11g中的db_block_checking参数

初始化参数DB_BLOCK_CHECKING控制Oracle如何全面检查读写的每个数据块的完整性。启用的检查界别是环境中的故障承受级别(通常很低)与连续检查块所需的开销折中的结果。在11g中db_block_checking参数有了更多的选项,以满足不等的块检验粒度:
?
1
2
3
4
5
6
7
SQL>  alter  system  set  db_block_checking=AA;
alter  system  set  db_block_checking=AA
*
ERROR  at  line 1:
ORA-00096: invalid value AA  for  parameter db_block_checking, must be  from  among  FULL TRUE , MEDIUM, LOW,  OFF FALSE
 
/* 可选的有  OFF = FALSE , FULL = TRUE 以及MEDIUM和LOW */
不同的DB_BLOCK_CHECKING选项对应不同的检查粒度:
  • OFF或FALSE 不执行任何检查块的操作
  • LOW 在内存中更改块或从磁盘中读取块后对块进行基本检查,其中包括RAC环境中在实例间传输块的情形
  • MEDIUM 包括所有LOW检查,另加检查所有非IOT(索引组织表)块
  • FULL或TRUE 包括所有LOW和MEDIUM检查,另加检查索引块
在客户愿意承担性能开销的前提下,Oracle建议使用FULL值。默认值是OFF,但仍始终启用针对SYSTEM表空间的FULL块检查功能(受到隐式参数_db_always_check_system_ts的控制,默认为TRUE)。通常认为块检查开销的范围在1%~10%之间,在OLTP环境中更接近于10%。  以下为Oracle GCS对块检查性能损耗的描述: Oracle checks a block by going through the data in the block, making sure it is logically self-consistent. Block checking can often prevent memory and data corruption. Block checking typically causes 1% to 10% overhead, depending on workload and the parameter value. The more updates or inserts in a workload, the more expensive it is to turn on block checking. You should set DB_BLOCK_CHECKING to FULL if the performance overhead is acceptable
  • full - see above depending on updates and inserts and how well the database is tuned it can be costly 10%+
  • medium - midrange but can be up to 10%.
  • low - very low around 1 %
  • off - no overhead
10%?!这是真的吗?我们不妨自己来测试一下!:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
SQL>  select  from  v$version;
BANNER
--------------------------------------------------------------------------------
Oracle  Database  11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production
PL/SQL Release 11.2.0.2.0 - Production
CORE    11.2.0.2.0      Production
TNS  for  Linux: Version 11.2.0.2.0 - Production
NLSRTL Version 11.2.0.2.0 - Production
 
SQL>  create  table  MACLEAN(t1  int ,t2  char (20),t3  char (20),t4  char (20), t5  char (20),t6  date ) tablespace users;
Table  created.
 
SQL>  create  or  replace   procedure  insert_data(s  int as
   2   begin
   3     for  in  1..s  loop
   4       insert  into  MACLEAN  values (i, 'A' , 'B' , 'C' , 'D' ,sysdate);
   5       commit ;
   6       end  loop;
   7       end ;
   8  /
Procedure  created.
 
SQL> show parameter db_block_checking
NAME                                  TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_block_checking                    string       FALSE
 
SQL>  begin
   2    /* NON_CHECKING_50000 */
   3    insert_data(50000);
   4     end ;
   5    /
 
  truncate  table  MACLEAN;
  alter  system flush buffer_cache;
 
  begin
   /* NON_CHECKING_100000 */
   insert_data(100000);
   end ;
   /
 
  truncate  table  MACLEAN;
  alter  system flush buffer_cache;
 
   begin
   /* NON_CHECKING_150000 */
   insert_data(150000);
   end ;
   /
 
  truncate  table  MACLEAN;
  alter  system flush buffer_cache;
 
  alter  system  set  db_block_checking= TRUE ;
 
  begin
   /* DO_CHECKING_50000 */
   insert_data(50000);
   end ;
   /
 
  truncate  table  MACLEAN;
  alter  system flush buffer_cache;
 
  begin
   /* DO_CHECKING_100000 */
   insert_data(100000);
   end ;
   /
 
  truncate  table  MACLEAN;
  alter  system flush buffer_cache;
 
   begin
   /* DO_CHECKING_150000 */
   insert_data(150000);
   end ;
   /
 
PL/SQL  procedure  successfully completed.
 
SQL> SQL> SQL>
Table  truncated.
 
SQL>
System altered.
 
SQL> SQL>   2    3    4    5
 
PL/SQL  procedure  successfully completed.
 
SQL> SQL>
Table  truncated.
 
SQL>
System altered.
 
SQL> SQL>   2    3    4    5
 
PL/SQL  procedure  successfully completed.
 
SQL> SQL>
Table  truncated.
 
SQL>
System altered.
 
SQL> SQL>
System altered.
 
SQL> SQL>   2    3    4    5
 
PL/SQL  procedure  successfully completed.
 
SQL> SQL> SQL>
Table  truncated.
 
SQL>
System altered.
 
SQL> SQL>   2    3    4    5
 
PL/SQL  procedure  successfully completed.
 
SQL> SQL>
Table  truncated.
 
SQL>
System altered.
 
SQL> SQL>   2    3    4    5
 
PL/SQL  procedure  successfully completed.
 
SQL> SQL> SQL> SQL> SQL> SQL>
 
SQL> col sql_text  for  a70;
SQL>  select  sql_text, cpu_time, elapsed_time
   2   from  v$sql
   3   where  sql_text  like  '%CHECKING%'
   4   and  sql_text  not  like  '%v$sql%'
   5   order  by  CPU_TIME;
 
SQL_TEXT                                                                 CPU_TIME ELAPSED_TIME
---------------------------------------------------------------------- ---------- ------------
begin    /* NON_CHECKING_50000 */   insert_data(50000);    end ;             7222902      7675162
  begin    /* DO_CHECKING_50000 */   insert_data(50000);    end ;             8285740      8522438
  begin    /* NON_CHECKING_100000 */   insert_data(100000);    end ;         13142002     13327092
  begin    /* DO_CHECKING_100000 */   insert_data(100000);    end ;          15353665     15686535
   begin    /* NON_CHECKING_150000 */   insert_data(150000);    end ;        19346058     19502160
   begin    /* DO_CHECKING_150000 */   insert_data(150000);    end ;         25374143     26539033
 
rows  selected.

 可以看到在面对频繁的dml操作时(模拟OLTP环境),DB_BLOCK_CHECKING为TRUE对CPU资源的使用影响可能远大于10%;实际上只有极少数对数据完整性要求异常苛刻的环境中,我们才会使用到它。



本文转自maclean_007 51CTO博客,原文链接:http://blog.51cto.com/maclean/1277566


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值