Oracle(block clean out)的块清除
Clean out有2种: fast commit cleanout,delayed block cleanout
1.如果一个事务(transaction)修改不超过10%buffer cache的数据块时,oracle做的是fast commit leanout。
2.如果一个事务(transaction)修改的块超过10% buffer cache,那么超过的块"就执行delayed block leanout,
3.在事务commit前,修改的数据块已经写入硬盘,当发生commit时,oracle并不会把block重新读入内存来做cleanout,这样成本太高.而是把cleanout留到下一次对此块的访问(select,update)时完成。
SQL> show parameter db_cache;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_cache_size big integer 58720256
--只需更改50M/10=5M的数据量就会触发DELAY CLEAN OUT
SQL> create table t2 (id int ,col1 char(2000),col2 char(2000),col3 char(2000),col4 char(1000));
表已创建。
--1行一个块,
SQL> insert into t2 select object_id,object_name,'1','1','1' from all_objects where rownum <=1000;
已创建1000行。
SQL> commit;
SQL> select * from (
select rownum rn, id,dbms_rowid.rowid_relative_fno(rowid) "file#",dbms_rowid.rowid_block_number(rowid) "block#" from t2 )
3 where rn=1 or rn=1000;
RN ID file# block#
---------- ---------- ---------- ----------
1 7559 8 36
1000 14700 8 1160
--fast clean out 快速块清除
SQL> update t2 set id=id,col1=col1,col2='c',col3='c',col4='c' where id='7559'; --第36块
1 ROWS UPDATED
SQL> select xidusn,xidslot,xidsqn,ubafil,ubablk,ubarec from v$transaction;
XIDUSN XIDSLOT XIDSQN UBAFIL UBABLK UBAREC
-------- ---------- ---------- ---------- ---------- ----------
10 22 339 2 41167 11
SQL> COMMIT;
提交成功
SQL> alter system dump datafile 8 block 36;
系统已更改。
Start dump data blocks tsn: 8 file#: 8 minblk 36 maxblk 36
buffer tsn: 8 rdba: 0x02000024 (8/36)
scn: 0x0000.000b21db seq: 0x01 flg: 0x00 tail: 0x21db0601
frmt: 0x02 chkval: 0x0000 type: 0x06=trans data
Block header dump: 0x02000024
Object id on Block? Y
seg/obj: 0x739d csc: 0x00.b21db itc: 2 flg: E typ: 1 - DATA
brn: 0 bdba: 0x2000021 ver: 0x01
inc: 0 exflg: 0
Itl Xid Uba Flag Lck Scn/Fsc
0x01 0x000a.02b.00000152 0x0080a0c5.002a.2a C--- 0 scn 0x0000.000b218f
0x02 0x000a.016.00000153 0x0080a0cf.002a.0b ---- 1 fsc 0x0000.00000000
----这里的FLAG已经清除
--delay clean out 延时块清除
SQL> update t2 set id=id,col1=col1,col2='c',col3='c',col4='c'; --8M的更新数据
已更新1000行。
SQL> select xidusn,xidslot,xidsqn,ubafil,ubablk,ubarec from v$transaction;
XIDUSN XIDSLOT XIDSQN UBAFIL UBABLK UBAREC
---------- ---------- ---------- ---------- ---------- ----------
3 8 470 2 6788 1
SQL> COMMIT;
SQL> alter system dump datafile 8 block 36; --大于db_cache_size 10%的块
系统已更改。
SQL> alter system dump datafile 8 block 1160; --小于db_cache_size 10%的块
系统已更改。
Start dump data blocks tsn: 8 file#: 8 minblk 36 maxblk 36
buffer tsn: 8 rdba: 0x02000024 (8/36)
scn: 0x0000.000b2b52 seq: 0x01 flg: 0x02 tail: 0x2b520601
frmt: 0x02 chkval: 0x0000 type: 0x06=trans data
Block header dump: 0x02000024
Object id on Block? Y
seg/obj: 0x739d csc: 0x00.b21db itc: 2 flg: E typ: 1 - DATA
brn: 0 bdba: 0x2000021 ver: 0x01
inc: 0 exflg: 0
Itl Xid Uba Flag Lck Scn/Fsc
0x01 0x000a.02b.00000152 0x0080a0c5.002a.2a C--- 0 scn 0x0000.000b218f
0x02 0x0003.008.000001d6 0x0080129d.0043.01 --U- 1 fsc 0x0000.000b2b52
|
|
----大于10%的块未被清除
Start dump data blocks tsn: 8 file#: 8 minblk 1160 maxblk 1160
buffer tsn: 8 rdba: 0x02000488 (8/1160)
scn: 0x0000.000b2b5d seq: 0x01 flg: 0x00 tail: 0x2b5d0601
frmt: 0x02 chkval: 0x0000 type: 0x06=trans data
Block header dump: 0x02000488
Object id on Block? Y
seg/obj: 0x739d csc: 0x00.b2b5d itc: 2 flg: E typ: 1 - DATA
brn: 0 bdba: 0x200040a ver: 0x01
inc: 0 exflg: 0
Itl Xid Uba Flag Lck Scn/Fsc
0x01 0x000a.02b.00000152 0x0080a0ce.002a.6a C--- 0 scn 0x0000.000b218f
0x02 0x0003.008.000001d6 0x00801a84.004a.01 C--- 0 scn 0x0000.000b2b52
|
|
----小于10%的块被清除
--再次访问这些块时,会被清除
SQL> set autot on
SQL> select count(*) from t2;
COUNT(*)
----------
1000
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE
1 0 SORT (AGGREGATE)
2 1 TABLE ACCESS (FULL) OF 'T2'
Statistics
----------------------------------------------------------
0 recursive calls
0 db block gets
1265 consistent gets
0 physical reads
15600 redo size
--产生很多的REDO信息,用于块清除
376 bytes sent via SQL*Net to client
503 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
1 rows processed
SQL> /
COUNT(*)
----------
1000
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE
1 0 SORT (AGGREGATE)
2 1 TABLE ACCESS (FULL) OF 'T2'
Statistics
----------------------------------------------------------
0 recursive calls
0 db block gets
1005 consistent gets
0 physical reads
0 redo size
--再访问就没有REDO了
376 bytes sent via SQL*Net to client
503 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
1 rows processed
--再来看清除的数据块信息
SQL> alter system dump datafile 8 block 36;
系统已更改。
SQL> alter system dump datafile 8 block 1160;
系统已更改。
Start dump data blocks tsn: 8 file#: 8 minblk 36 maxblk 36
buffer tsn: 8 rdba: 0x02000024 (8/36)
scn: 0x0000.000b3059 seq: 0x01 flg: 0x02 tail: 0x30590601
frmt: 0x02 chkval: 0x0000 type: 0x06=trans data
Block header dump: 0x02000024
Object id on Block? Y
seg/obj: 0x739d csc: 0x00.b2c2a itc: 2 flg: E typ: 1 - DATA
brn: 0 bdba: 0x2000021 ver: 0x01
inc: 0 exflg: 0
Itl Xid Uba Flag Lck Scn/Fsc
0x01 0x0008.000.000001d7 0x00800761.003e.01 C--- 1 fsc 0x0000.000b3059
0x02 0x0003.008.000001d6 0x0080129d.0043.01 C--- 0 scn 0x0000.000b2b52
|
|
----大于10%的块也被清除成功
Start dump data blocks tsn: 8 file#: 8 minblk 1160 maxblk 1160
buffer tsn: 8 rdba: 0x02000488 (8/1160)
scn: 0x0000.000b305a seq: 0x01 flg: 0x00 tail: 0x305a0601
frmt: 0x02 chkval: 0x0000 type: 0x06=trans data
Block header dump: 0x02000488
Object id on Block? Y
seg/obj: 0x739d csc: 0x00.b305a itc: 2 flg: E typ: 1 - DATA
brn: 0 bdba: 0x200040a ver: 0x01
inc: 0 exflg: 0
Itl Xid Uba Flag Lck Scn/Fsc
0x01 0x0008.000.000001d7 0x00801ec8.0046.01 C--- 0 scn 0x0000.000b3059
0x02 0x0003.008.000001d6 0x00801a84.004a.01 C--- 0 scn 0x0000.000b2b52
|
|
----小于10%的块不变
参考至:http://blog.sina.com.cn/s/blog_7414f6640100thhf.html
如有错误,欢迎指正
邮箱:czmcj@163.com
相关推荐
Oracle是业界广泛使用的大型关系型数据库管理系统,其核心组成部分之一就是数据块结构(Block)。数据块是Oracle数据库中最小的存储单位,是操作系统中读写数据的基本单位,也是数据库实例中逻辑上存储数据的基本...
Oracle 数据块(Block)是数据库存储的基本单位,它在Oracle数据库管理系统中扮演着至关重要的角色。数据块的设计和管理直接影响到数据库的性能和空间利用率。本文将深入解析Oracle数据块的结构及其相关知识点。 ...
gc block lost 是 Oracle RAC 环境中一种常见的性能问题,其原因是由于 Global Cache(全局高速缓存)中块的丢失所引起的。在 Oracle RAC 环境中,每个实例都维护着一个 Local Cache(本地高速缓存),用于存储当前...
"Oracle 坏块修复" Oracle 坏块修复是指在 Oracle 数据库中出现的数据块混乱现象,导致数据库进程无法正常解析数据块的内容,进而使数据库进程报错乃至挂起,并级联导致整个数据库实例出现异常。 一、坏块的产生...
Oracle存储过程中的“Out”游标是数据库编程中一种常用的技术,主要用于在PL/SQL块中返回结果集到调用者。在这个场景中,我们有三个文件:TESTPACKAGE.txt,CURSOR_TEST2.txt和OracleProcedure.java,分别涉及Oracle...
BBED(Oracle Block Brower and EDitor Tool),用来直接查看和修改数据文件数据的一个工具,是Oracle一款内部工具,可以直接修改Oracle数据文件块的内容,在一些极端恢复场景下比较有用。
### Oracle 数据坏块处理 #### 一、概述 在Oracle数据库管理中,数据坏块处理是一项重要的维护工作。数据坏块通常是指数据库中物理损坏的数据块,这些损坏可能由多种原因造成,例如硬件故障或软件错误等。如果不...
Oracle 数据库中,最基本的数据管理单位是数据块(datablock),它是数据库逻辑上最小的数据单位。在操作系统级别,数据是最小物理存储单位是字节(byte),而在数据库级别则是数据块。Oracle 在处理数据时,通常以...
一个数据块(Block)是 Oracle 数据库中的最小存储单元,它是数据文件(Datafile)中的一部分。每个数据块的大小可以是 2k、4k、8k 或 16k 等,取决于数据库的设置。 在 Oracle 数据库中,数据块的结构主要包括以下...
在 Oracle 数据库中,数据块(Data Block)是最基本的数据存储单位。一个数据块通常包含了一系列的记录,这些记录用于存储数据库表中的数据。理解数据块的物理结构对于深入掌握 Oracle 数据库的工作原理至关重要。 ...
Oracle数据库的块转储(Dumping Oracle Blocks)是一种技术,用于查看数据库中特定数据块、索引块或控制文件块的详细内容。这种操作通常由DBA(数据库管理员)进行,以便深入了解数据库内部的工作机制,或者在遇到...
例如,我们可能会看到类似于“ORA-01578: ORACLE data block corrupted”的错误消息,这表明存在物理损坏的数据块。 坏块错误的影响广泛,可能会影响数据的完整性和一致性,导致查询失败、应用崩溃或者性能下降。...
### Oracle坏块处理详解 #### 引言 在Oracle数据库管理中,遇到ORA-01578错误,即“Oracle数据块损坏”,是DBA(数据库管理员)们经常面临的一项挑战。这种错误通常伴随着ORA-01110错误,指向特定的数据文件及其...
BBED(Block Browser and Editor)是 Oracle 数据库中用于浏览和编辑数据块的重要工具。使用 BBED 工具可以查看和编辑数据块的内容,从而对数据块的内部结构进行分析和修改。 五、解决 ORA-1200 错误 ORA-1200 ...
Oracle RAC 环境下索引热块的处理思路是指在 Oracle RAC 环境下,due to the high concurrency and parallelism of multiple instances, the index block contention issue may occur, leading to performance ...
数据块的大小是由初始化参数`DB_BLOCK_SIZE`指定的,标准数据块的大小通常设定为8KB、16KB或32KB。在Oracle 9i及后续版本中,还支持使用非标准块,即大小不同于标准块的数据块。非标准块的数量限制为5个不同的大小。...
2. Oracle 单个block标记为坏块 3. 查看和修改某个block内容 4. 修改文件头scn(checkpoint scn) 5. 修改文件头resetlogs scn 6. 修改文件头fuzzy标记 7. 不同文件之间数据块拷贝 8. 修改oracle进程内存中内容,...
Oracle 数据块解析是理解 Oracle 数据库内部工作原理的关键部分。数据块是数据库进行最小 I/O 操作的单位,它包含了存储在表、索引和其他数据库对象中的数据。在这个过程中,我们将通过一系列步骤来了解数据块的内部...
Oracle块碎片监控清理以提高性能大全: Oracle_表碎片的监控与清理.pdf Oracle碎片整理 .pdf 表碎片起因及解决办法.pdf 消除oracle块碎片以提高性能.pdf 消除oracle碎片.pdf