oracle11g基於某個資料塊一致性讀版本cr consistent read最大限制系列一

wisdomone1發表於2015-10-21

背景

   因為表的資料塊可能會同時被多個DML會話併發修改,所以資料塊會進行修改,但另一個查詢會話卻不能看到這個資料塊修改的結果,它會去根據SQL查詢時的SCN去資料塊,結合ITL以及UNDO SEGMENT HEADER BLOCK獲取UNOD BLOCK
構造SQL查詢時點的資料塊版本,   
   資料庫版本為11.2.0.1


結論


1,_db_block_max_cr_dba引數控制基於資料塊最大可以建立多少個一致性緩衝個數,可以簡單理解為可以最大建立多少個一致性資料塊版本
2,_db_block_max_cr_dba引數預設值為6
3,_db_block_max_cr_dba引數是靜態引數,修改必須重啟庫
4,_db_block_max_cr_dba引數調小值後,ORACLE透過內部演算法或機制會最終給一個實際值給此引數
5,最終決定基於資料塊最大可以建立多少個一致性緩衝個數,不止這個引數_db_block_max_cr_dba,肯定還有其它的因素
6,資料塊的一致性讀資訊可以透過select file#,block#,status,dirty,stale,new from v$bh where objd=(select object_id from dba_objects where object_name='T_CR')
  檢視,檢視關注其中status=cur的記錄即可
7,一致性讀的必要條件是當前會話是SELECT查詢會話,同時其它會話是DML會話


新的問題

1,每個SQL查詢會話構建一致性讀,到底基於哪個SCN


測試



1,資料庫版本
SQL> select * from v$version where rownum=1;


BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production


2,每個資料塊允許最大建立一致性資料塊的個數為6
_db_block_max_cr_dba                               6                                                  Maximum Allowed Number of CR buffers per dba


3,建立1個UPDATE會話,超過6個查詢會話


會話1 UPDATE會話
SQL> create table t_cr(a int);


Table created.


SQL> insert into t_cr values(1);


1 row created.


SQL> commit;


Commit complete.


SQL> update t_cr set a=2;


1 row updated.


超過6個查詢會話(略去重複內容)
[oracle@seconary ~]$ sqlplus scott/system


SQL> show user
USER is "SCOTT"
SQL> select * from t_cr;


         A
----------
         1


4,監控會話,大於等於6個查詢會話時,最大可以允許建立的一致性資料塊個數為6個
SQL> select file#,block#,status,dirty,stale,new from v$bh where objd=(select object_id from user_objects where object_name='T_CR');


     FILE#     BLOCK# STATUS               DI ST NE
---------- ---------- -------------------- -- -- --
         4      98986 xcur                 N  N  N
         4      98989 xcur                 N  N  N
         4      98984 xcur                 N  N  N
         4      98987 xcur                 N  N  N
         4      98990 xcur                 N  N  N
         4      98985 xcur                 N  N  N
         4      98988 xcur                 N  N  N
         4      98991 xcur                 Y  N  N
         4      98991 cr                   N  N  N  --STATUS=CR即一致性讀產生的緩衝
         4      98991 cr                   N  N  N
         4      98991 cr                   N  N  N


     FILE#     BLOCK# STATUS               DI ST NE
---------- ---------- -------------------- -- -- --
         4      98991 cr                   N  N  N
         4      98991 cr                   N  N  N
         4      98991 cr                   N  N  N


14 rows selected.

SQL> 


5,調小控制一致性資料塊個數的引數,
SQL> show user
USER is "SYS"
SQL> alter system set "_db_block_max_cr_dba"=3;
alter system set "_db_block_max_cr_dba"=3
                 *
ERROR at line 1:
ORA-02095: specified initialization parameter cannot be modified




SQL> alter system set "_db_block_max_cr_dba"=3 scope=spfile;


System altered.


SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> 
SQL> 
SQL> 
SQL> startup
ORACLE instance started.


Total System Global Area 2137886720 bytes
Fixed Size                  2215064 bytes
Variable Size            1392509800 bytes
Database Buffers          738197504 bytes
Redo Buffers                4964352 bytes
Database mounted.
Database opened.


可見雖然調整此引數為4,其實ORACLE內部還是有個判斷機制,實際調整後的值為4
_db_block_max_cr_dba                               4                                                  Maximum Allowed Number of CR buffers per dba




可見調小引數後,實際可以最大建立的一致性資料塊個數為5,等於引數值+1,可見ORACLE內部是一種演算法或機制控制到底可以最大建立多大的一致性資料塊,也就是說不止配置
這一個引數,還有其它的因素共同作用決定
SQL> select file#,block#,status,dirty,stale,new from v$bh where objd=(select object_id from dba_objects where object_name='T_CR');


     FILE#     BLOCK# STATUS               DI ST NE
---------- ---------- -------------------- -- -- --
         4      98986 cr                   N  N  N
         4      98986 xcur                 N  N  N
         4      98989 xcur                 N  N  N
         4      98987 xcur                 N  N  N
         4      98990 xcur                 N  N  N
         4      98988 xcur                 N  N  N
         4      98991 xcur                 Y  N  N
         4      98991 cr                   N  N  N
         4      98991 cr                   N  N  N
         4      98991 cr                   N  N  N
         4      98991 cr                   N  N  N


11 rows selected.

個人簡介:


8年oracle從業經驗,具備豐富的oracle技能,目前在國內北京某專業oracle服務公司從事高階技術顧問。
   
   服務過的客戶:
          中國電信
          中國移動
          中國聯通
          中國電通
          國家電網
          四川達州商業銀行
          湖南老百姓大藥房
          山西省公安廳
          中國郵政
          北京302醫院     
          河北廊坊新奧集團公司
  
 專案經驗:
           中國電信3G專案AAA系統資料庫部署及最佳化
           中國聯通CRM資料庫效能最佳化
           中國移動10086電商平臺資料庫部署及最佳化
           湖南老百姓大藥房ERR資料庫sql最佳化專案
           四川達州商業銀行TCBS核心業務系統資料庫模型設計和RAC部署及最佳化
           四川達州商業銀行TCBS核心業務系統後端批處理儲存過程功能模組編寫及最佳化
           北京高鐵訊號監控系統RAC資料庫部署及最佳化
           河南宇通客車資料庫效能最佳化
           中國電信電商平臺核心採購模組表模型設計及最佳化
           中國郵政儲蓄系統資料庫效能最佳化及sql最佳化
           北京302醫院資料庫遷移實施
           河北廊坊新奧data guard部署及最佳化
           山西公安廳身份證審計資料庫系統故障評估
         
 聯絡方式:
          手機:18201115468
          qq   :   305076427
          qq微博: wisdomone1
          新浪微博:wisdomone9
          qq群:275813900    
          itpub部落格名稱:wisdomone1    http://blog.itpub.net/9240380/

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

相關文章