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/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/9240380/viewspace-1815494/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值