oracle11g基於某個資料塊一致性讀版本cr consistent read最大限制系列一
背景
因為表的資料塊可能會同時被多個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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 轉:Oracle資料庫一致性讀的原理(Consistent Read)Oracle資料庫
- Oracle一致性讀(Consistent Read)的原理Oracle
- consistent read(讀一致性)的通俗理解
- zt_oracle一致性讀consistent readOracle
- consistent read(讀一致性)的通俗理解(轉)
- 構造一致性CR塊讀,ORACLE需要做的工作:Oracle
- 注意資料檔案最大塊數限制
- 參考oracle官方文件關於髒讀、一致性讀、undo中已提交資料塊的理解Oracle
- 【基礎篇一致性讀】一致性讀分析
- 同一個資料塊的db file sequential read,說明了什麼?
- 【基礎篇一致性讀】一致性讀分析(三)
- 【基礎篇一致性讀】一致性讀分析(續)
- 如何指定 SAP UI5 應用程式基於某個特定的版本執行試讀版UI
- 基於資料塊的恢復
- ORA-1653 oracle單個資料檔案最大限制Oracle
- 如何實現資料庫讀一致性資料庫
- 用oracle 11g bbed copy替換同一個表資料塊block為另一個資料塊之系列八OracleBloC
- 查詢某條記錄存在哪個資料塊中
- redis基礎篇——資料一致性Redis
- 深度剖析 | 關於資料鎖定和讀取一致性問題
- db block gets 與 consistent read getsBloC
- db block get和consistent read getBloC
- 資料庫基於版本的閃回資料庫
- 資料檔案頭塊保留大小、ROWID、資料檔案最大大小等資料庫限制的說明資料庫
- 一致性 hash 演算法( consistent hashing )演算法
- 限制使用者在某個時間段內禁止登入資料庫資料庫
- 怎樣獲得資料表中某個欄位的第二個最大值
- CAP理論以及Eventually Consistent (最終一致性)解析
- 如何限制使用者在某個時間段內禁止登入資料庫資料庫
- 資料一致性
- 資料一致性(一) - 介面呼叫一致性
- 如何基於日誌,同步實現資料的一致性和實時抽取?
- 資料庫系列——基於Canal實現MySQL增量資料同步資料庫MySql
- oracle11g基於bootstrap$中的ind$表損壞系列五Oracleboot
- 7. 關於資料一致性校驗方案
- InnoDB鎖結構個數最大限制
- 偽造基於ASSM表空間的資料塊SSM
- 一致性雜湊演算法(consistent hashing)【轉】演算法