透过Buffer cache了解data block在DML操作下的状态演变(3)


多出了一行对应block 5/60683,这行对应的是data block
              FLAG:524288 换算成16进制后:0x80000(sequential scan only flag)
              CLASS: 1, 表示data block                                                                             
              STATE:1,表示Execlusive current                                                                       
              TCH: 1,表示Touch count
             
同时注意到block 5/60682这行的TCH增加到了2,因为扫描表的时候必然先要访问segment header


###对表T1118_1做update,先不提交
---session 1:
SYS@tstdb1-SQL> update scott.t1118_1 set user_id=100 where username='SYS';
                                                                         
1 row updated.               


SYS@tstdb1-SQL> select obj,indx,addr,hladdr,flag,lru_flag,class,state,dbarfil,dbablk,ba,tch from x$bh where obj=41231;                                                                       
                                                                                                                                                   
      OBJ      INDX ADDR            HLADDR                FLAG  LRU_FLAG      CLASS      STATE    DBARFIL    DBABLK BA                      TCH
---------- ---------- ---------------- ---------------- ---------- ---------- ---------- ---------- ---------- ---------- ---------------- ----------
    41231      31275 000000011099C328 07000001B6B503D8  35651584          0          4          1          5      60682 070000014A920000          3
    41231    147533 000000011099C328 07000001B6C811F8  35651584          0          9          1          5      60681 07000000F4010000          1
    41231    219283 000000011099C328 07000001B6D3F4F0  33554433          0          1          1          5      60683 07000001084A2000          1
    41231    219284 000000011099C1E0 07000001B6D3F4F0    524288          2          1          3          5      60683 0700000162014000          1
    41231    280262 000000011099C328 07000001B6DB20E0  35651584          0          8          1          5      60680 0700000102904000          1


(因为BA表示block在内存中的物理地址,所以后续以BA来标示某一行)
新增一行BA=07000001084A2000,这行里
              FLAG:33554433,换算成16进制:0x2000001=0x200000(Buffer has been written once)+0x00001(buffer dirty)
              CLASS:1, 表示data block
              STATE:1,表示Exclusive current
              TCH: 1,表示Touch count
同时注意到BA=0700000162014000,这行里
              LRU_FLAG:2,表示moved to tail of lru,放到了LRU的最末端,因为截止目前block 5/60683已经被扫描了两次(一次是在select时,一次是在update时)
              STATE:3,表示buffer consistant read,数据库块被修改前会先复制一份consistent read的版本

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/b53e281b6e4793f9b03652a9d50447ed.html