gc current block pin time gc current block flush time 疑惑

wei-xh發表於2015-02-05
非常簡單的記錄,沒有可讀性,留作一個疑惑。


第一個節點更新資料塊
第二個節點更新同樣的資料塊
由於是更新操作,因此需要塊的current block
第二個節點像第一個節點要求current block,再傳送前,第一個節點需要pin住此塊,把log buffer內的內容寫磁碟。
統計量裡的gc current block pin time gc current block flush time分別對應了此種情況。但是我模擬的情況,發現並沒有發生統計量的增加。


節點1:
test@ILSP>select
  2          statistic#,
  3          name,
  4          value
  5  from
  6          v$sysstat where statistic# in (215,216);


STATISTIC# NAME                                                                  VALUE
---------- ---------------------------------------------------------------- ----------
       215 gc current block pin time                                                68
       216 gc current block flush time                                            7019


test@ILSP>        update t_one set v1='10' where n1=265 and rownum=1;


1 row updated.


test@ILSP>
test@ILSP>select
  2          statistic#,
  3          name,
  4          value
  5  from
  6          v$sysstat where statistic# in (215,216);


STATISTIC# NAME                                                                  VALUE
---------- ---------------------------------------------------------------- ----------
       215 gc current block pin time                                                68
       216 gc current block flush time                                            7019


節點2:       
test@ILSP>select
  2          statistic#,
  3          name,
  4          value
  5  from
  6          v$sysstat where statistic# in (215,216);


STATISTIC# NAME                                                                  VALUE
---------- ---------------------------------------------------------------- ----------
       215 gc current block pin time                                                67
       216 gc current block flush time                                            6906


test@ILSP>        update t_one set v1='10' where n1=266 and rownum=1;


1 row updated.


test@ILSP>
test@ILSP>select
  2          statistic#,
  3          name,
  4          value
  5  from
  6          v$sysstat where statistic# in (215,216);


STATISTIC# NAME                                                                  VALUE
---------- ---------------------------------------------------------------- ----------
       215 gc current block pin time                                                67
       216 gc current block flush time                                            6906
       
但是,另一個場景卻發生了:       


test@ILSP>begin
  2  for i in 1 ..100000 loop
  3  UPDATE  wxh_tbd SET object_name=20 where rowid='AAAVaMAAEAAABDjAAA';
  4  commit write immediate wait;
  5  end loop;
  6  end;
  7  /




test@ILSP>begin
  2  for i in 1 ..10000 loop
  3  UPDATE  wxh_tbd SET object_name=20 where rowid='AAAVaMAAEAAABDjAAB';
  4  commit write immediate wait;
  5  end loop;
  6  end;
  7  /


sys@ILSP>select
  2          statistic#,
  3          name,
  4          value
  5  from
  6          v$sysstat where statistic# in (215,216);


STATISTIC# NAME                                                                  VALUE
---------- ---------------------------------------------------------------- ----------
       215 gc current block pin time                                                72
       216 gc current block flush time                                            7502


2 rows selected.


sys@ILSP>/


STATISTIC# NAME                                                                  VALUE
---------- ---------------------------------------------------------------- ----------
       215 gc current block pin time                                                73
       216 gc current block flush time                                            7545


2 rows selected.


sys@ILSP>/


STATISTIC# NAME                                                                  VALUE
---------- ---------------------------------------------------------------- ----------
       215 gc current block pin time                                                73
       216 gc current block flush time                                            7570


2 rows selected.


sys@ILSP>/


STATISTIC# NAME                                                                  VALUE
---------- ---------------------------------------------------------------- ----------
       215 gc current block pin time                                                74
       216 gc current block flush time                                            7591


我的版本是11.2.0.3,我的猜想,可能是ORACLE做了最佳化,再傳送current block前檢查下對應的日誌有沒有寫磁碟,如果已經寫磁碟了,就不需要再去做pin和flush的操作了。
       

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22034023/viewspace-1427402/,如需轉載,請註明出處,否則將追究法律責任。

相關文章