块清除

简介: 一般的清除是COMMIT清除,当需要修改(DML)的块大于BUFFER CACHE的10%的时候就会出现延迟块清除,在一般的OLTP系统不会出现这样的情况。
一般的清除是COMMIT清除,当需要修改(DML)的块大于BUFFER CACHE的10%的时候就会出现
延迟块清除,在一般的OLTP系统不会出现这样的情况。以为修改的数据量巨大,执行COMMIT的时候
只会修改ITL FLAG信息(ITL FLAG信息是U,一般的COMMIT清除是C,在没有提交的时候是没有记录的就是-----)和SCN,而对于在行上LB信息就不会清除(这叫FAST COMMIT,也是为什么COMMIT及时在数据量
很大的情况下依然很快的原因),只有依靠下次的延迟的块清除,
延迟的块清除不但会导致SELECT语句生成REDO,而且会把原本干净的已经写入磁盘的
数据块,重新读入BUFFER CACHE,然后完成延迟块清除后重新写入磁盘,这就导致了
大量的不必要的物理写,清除其实就是清理块的头信息的ITL信息,ITL信息能够记录哪行被修改,
同时ITL.XID 能够对应事物信息,同时也能找到UNDO HEADER,
ITL.UBA能够找到UNDO块的信息
在行中的lb(lock BTTE)记录了ITL信息,也就是在ITL对应哪一行

Block header dump:  0x024014ed
Object id on Block? Y
seg/obj: 0x2e61  csc: 0x00.ec539  itc: 1  flg: - typ: 1 - DATA
fsl: 0  fnx: 0x0 ver: 0x01
Itl    Xid                       Uba                     Flag  Lck      Scn/Fsc         
0x01   xid:  0x0005.000.00000805 uba: 0x00c02619.0304.01  ---- 1        fsc 0x0000.00000000
tab 0, row 0, @0x7aa 
tl: 14 fb: --H-FL-- lb: 0x1 cc: 4 
col  0: [ 2]  c1 02 
col  1: [ 4]  52 4f 57 31 
相关文章
|
2月前
|
存储 编译器 C语言
如何在 C 语言中判断文件缓冲区是否需要刷新?
在C语言中,可以通过检查文件流的内部状态或使用`fflush`函数尝试刷新缓冲区来判断文件缓冲区是否需要刷新。通常,当缓冲区满、遇到换行符或显式调用`fflush`时,缓冲区会自动刷新。
|
2月前
|
Python
不要在for与while循环后面写else块
不要在for与while循环后面写else块
48 0
有 3 个进程 P1、P2、P3 协作解决文件打印问题。P1 将文件记录从磁盘读入内存的缓冲区 1,每执行一次读一个记录 ;P2 将缓冲区 1 中的内容复制到缓冲区 2 中,每执行一次复制一个记录 ;
有 3 个进程 P1、P2、P3 协作解决文件打印问题。P1 将文件记录从磁盘读入内存的缓冲区 1,每执行一次读一个记录 ;P2 将缓冲区 1 中的内容复制到缓冲区 2 中,每执行一次复制一个记录 ;
重复文件清除工具,硬盘内存拯救者。。。
重复文件清除工具,硬盘内存拯救者。。。
|
存储 编译器 C++
清除 C/C++ 中的输入缓冲区
临时存储区称为缓冲区。所有标准输入和输出设备都包含一个输入和输出缓冲区。在标准 C/C++ 中,流被缓冲,例如在标准输入的情况下,当我们按下键盘上的键时,它不会发送到您的程序,而是由操作系统缓冲直到时间分配到那个程序。
219 0
|
SQL
[20180626]延迟块清除与只读表.txt
[20180626]延迟块清除与只读表.txt --//以前测试过延迟块清除与只读表空间的情况.今天测试只读表的情况. --//链接:[20150409]只读表空间与延迟块清除.
1272 0
|
存储 关系型数据库 Oracle