一. 块清除概念
我们知道在oracle中数据锁实际上是数据上的属性,存储在数据块首部。每一次用户访问这一个块的时候,如果发现这个块首部有以前用户访问的锁定信息,但以前的用户已经释放了锁。这个时候,应该首先将块首部清空。总而言之,块清除就是清除块首部一些锁定信息。
二. 块清除发生场景
1. Commit 的时候
用户提交数据的时候,commit有一个步骤是这样的:访问一个块的时候,如果块还在SGA中,就要再次访问这些块,如果可以访问,则对这些块进行清理。
2. update语句会清除块首部的事务信息(锁信息)
3. 进行大批量更新,删除,插入数据之后进行查询操作。
三. COMMIT清理块的条件
在与我们的事务相关的提交列表中,Oracle会记录已修改的块列表。这些列表都有20个块,Oracle会根据需要分配多个这样的列表,直至达到某个临界点。如果我们修改的块加起来超过了块缓冲区缓存大小的10%,Oracle会停止为我们分配新的列表。例如,如果缓冲区缓存设置为可以缓存3,000个块,Oracle会为我们维护最多300个块(3,000的10%)。COMMIT时,Oracle会处理这些包含20个块指针的列表,如果块仍可用,它会执行一个很快的清理。所以,只要我们修改的块数没有超过缓存中总块数的10%,而且块仍在缓存中并且是可用的,Oracle就会在COMMIT时清理这些块。否则,它只会将其忽略(也就是说不清理)。换言之,如果你事先执行了很大批量数据的插入,修改或者删除,commit的时候,不会清理这些修改或者插入数据所在块的块首部信息。下次一个用户查询这些数据的时候,首先会要清理这些块首部。由此,这个select语句会生成redo信息,显得很诡异!而且这些redo信息会反过来弄脏数据块。
四. 如何避免select生成redo信息
必须知道,如果块需要清理,第一接触这个数据的查询将带来一些额外的处理。(甚至会弄脏数据)如果认识到这一点,你就应该在UPDATE之 后自己主动地“接触”数据。你刚刚加载或修改了大量的数据;现在至少需要分析这些数据。可能要自行运行一些报告来验证数据已经加载。这些报告会完成块清 除,这样下一个查询就不必再做这个工作了。更好的做法是:由于你刚刚批量加载了数据,现在需要以某种方式刷新统计。通过运行DBMS_STATS实用程序来收集统计,就能很好地清理所有块,这是因为它只是使用SQL来查询信息,会在查询当中很自然地完成块清除
分享到:
相关推荐
Oracle块碎片监控清理以提高性能大全: Oracle_表碎片的监控与清理.pdf Oracle碎片整理 .pdf 表碎片起因及解决办法.pdf 消除oracle块碎片以提高性能.pdf 消除oracle碎片.pdf
Oracle 数据块深入分析总结 Oracle 数据块是 Oracle 数据库中最基本的存储单元,每个数据块都包含了数据、索引、事务控制信息等内容。在本文中,我们将对 Oracle 数据块的内部结构进行深入分析,并且使用 dump 和 ...
本文主要探讨了如何通过消除Oracle块碎片来提升系统性能。 一、产生碎片的原因: 1. **行迁移**:当UPDATE语句修改一行中的数据,导致该行超过了原来分配的空间,系统会将该行移动到新的数据块中,原有的位置变为...
Oracle会保留旧块中的行标识(Row ID),但不再更新该记录,导致数据存取过程复杂,影响Insert、Update操作的效率,同时增加Select操作的I/O操作,从而降低性能。 消除行迁移有多种方法。一种传统的方法是通过执行$...
当块清除发生时,Oracle会移除与锁定相关的事务信息,这是通过检查事务状态和SCN来完成的。 Cleanout过程有两种类型:快速提交清除(提交清除)和延迟块清除(延迟清除)。前者在事务提交时立即清除事务信息,后者...
- 清除共享池中不再使用的SQL执行计划,减少内存占用。 4. **优化查询执行计划**: - 通过优化SQL查询,减少不必要的全表扫描或排序操作,从而减少内存使用量。 - 使用索引加速查询,减少对SGA中数据缓冲区的...
块清除(Cleanout)是Oracle锁机制的一部分,它移除与事务锁定相关的信息,以优化数据块的使用和提高并发性能。 总的来说,Oracle的ITL事务槽是其并发控制和事务管理的核心机制之一。它有效地跟踪和管理事务状态,...
- **PMON (Process Monitor)**: 清除用户进程留下的残留资源。 - **Redo Log**: - 至少需要两个redo log组,每个组包含一个或多个成员。 - 成员之间互为镜像,以增强可靠性。 - **参数文件**: - **SPFILE ...
- **块(Block)**:Oracle数据库中的基本存储单位是块,每个块由多个字节组成,用于存储数据和元数据信息。默认情况下,Oracle数据库块大小为2KB至64KB不等。 - **段(Segment)**:数据库中存储相同类型数据的空间集合...
RMAN 的主要优点是可以跳过未使用的数据块,从而提高备份速度和效率。 二、使用 RMAN 工具 ### 2.1 RMAN 链接方式 在使用 RMAN 工具之前,需要连接到数据库,可以使用以下两种方式连接: * 本地链接:$ rman ...
Oracle 中的存储结构包括块参数 PCTFREE(填充因子)和 PCTUSED(复用因子),可控制块确定块本身何时有、 何时没有足够的空间接受新信息。这可以降低数据行连接与行迁移的可能性。块的大小可设置(OLTP 块和 DSS 块...
如果数据库中有大量操作正在执行,shutdown abort 命令可能会导致文件块的逻辑坏块,导致数据库崩溃恢复问题。虽然shutdown abort 命令的出错几率很小,但我们还是需要小心。 正确的处理流程 正确的处理流程是,...
"oracle基础.TXT"文件可能涵盖了Oracle数据库的基础概念,例如数据库实例、表空间、数据块、用户、权限和角色等。理解这些基本概念对于使用和管理Oracle数据库至关重要。数据库实例是Oracle运行时的内存结构和后台...
- **PMON (Process Monitor Process)**: 监视失败的会话,并清除它们的状态。 - **ARCH (Archiver Process)**: 在启用归档模式时,负责将填满的在线重做日志文件归档。 - **RECO (Recovery Process)**: 处理...
- **分布式重复数据消除处理**:通过将部分重复数据消除过程分配给Oracle服务器执行,可以显著提高备份速度。这种方法能够大幅减少Oracle服务器上的CPU和内存使用率,从而降低系统资源负担。 - **网络带宽利用率**:...
在Oracle 8.1及以上版本,`EVENT 10231`的功能通过`SKIP_CORRUPT`标志实现,该标志可以通过`DBMS_REPAIR`包进行设置和清除。`DBA_TABLES`视图中的`SKIP_CORRUPT`列显示了该标志是否已启用。 2. 使用ROW ID范围扫描...