时间:2021-07-01 10:21:17 帮助过:9人阅读
RAC性能调优] gc buffer busy acquire 处理 分类: troubleshooting RAC 2014-04-21 20:02 255人阅读 评论(0) 收藏 编辑删除 目录(?)[+] RAC性能调优 gc buffer busy acquire 处理 [RAC性能调优] gc buffer busy acquire event 解释: gc buffer busy acquir
RAC性能调优] gc buffer busy acquire 处理 分类: troubleshooting RAC 2014-04-21 20:02 255人阅读 评论(0) 收藏 编辑删除目录(?)[+]
event 解释:
gc buffer busy acquire是当session#1尝试请求访问远程实例(remote instance) buffer,但是在session#1之前已经有相同实例上另外一个session#2请求访问了相同的buffer,并且没有完成,那么session#1等待gc buffer busy acquire。
原因/解决方法
---------------------
- 1.》热点块(hot block)
在AWR中Segments by Global Cache Buffer Busy记录了访问频繁的gc buffer.
解决方法可以根据热点块的类型采取不同的解决方法,比如采取分区表,分区索引,反向index等等。这点与单机数据库中的buffer busywaits类似。
Segments by GlobalCache Buffer Busy
Owner |
Tablespace Name |
Object Name |
Subobject Name |
Obj. Type |
GC Buffer Busy |
% of Capture |
WMCADMIN |
BILLDATA0 |
FEEORDER_LOG_1404 |
|
TABLE |
79,555,421 |
78.41 |
WMCADMIN |
BILLINDEX0 |
FEEORDER_LOG_1404_RSPCODETIME |
|
INDEX |
21,779,575 |
21.47 |
WMCADMIN |
BILLINDEX0 |
IDX_BILLRING_INFO_1404_1 |
|
INDEX |
125,829 |
0.12 |
SYS |
SYSTEM |
UET$ |
|
TABLE |
182 |
0.00 |
SYS |
SYSTEM |
I_FILE#_BLOCK# |
|
INDEX |
62 |
0.00 |
- 2》低效SQL语句
低效SQL语句会导致不必要的buffer被请求访问,增加了buffer busy的机会。在AWR中可以找到TOP SQL。解决方法可以优化SQL语句减少buffer访问。这点与单机数据库中的buffer busy waits类似。
Buffer Gets |
Executions |
Gets per Exec |
%Total |
Elapsed Time (s) |
%CPU |
%IO |
SQL Id |
SQL Module |
SQL Text |
539,775,845 |
8 |
67,471,980.63 |
44.45 |
80,098.98 |
16.9 |
17.4 |
0mtunwsd5p9z1 |
SQL*Plus |
SELECT 'Result ' || ( SELECT C... |
520,003,254 |
7 |
74,286,179.14 |
42.82 |
72,983.93 |
19 |
19 |
bx100749tk78y |
SQL*Plus |
select 'Result ' || successall... |
相应的sql 为:
SELECT 'Result ' || ( SELECT COUNT(1) FROM feeorder_log_1404 WHERE requestdata >SYSDATE - 5 / 1440 AND requestdata <= SYSDATE AND rspcode='000000' ANDSUBSTR(copyrightid, -1, 1)='1' ) || ' ' || ( SELECT COUNT(1) FROM feeorder_log_1404 WHERErequestdata > SYSDATE - 5 / 1440 AND requestdata <= SYSDATE ANDSUBSTR(copyrightid, -1, 1)='1' ) FROM dual
select 'Result ' || successall ||' '|| requestall from (selectcount(1) as requestall from feeorder_log_1404where REQUESTDATA>sysdate-5/1440 and REQUESTDATA<=sysdate), (selectcount(1) as successall from feeorder_log_1404where REQUESTDATA>sysdate-5/1440 and REQUESTDATA <=sysdate and RspCode ='000000')
--3》。数据交叉访问。
RAC数据库,同一数据在不同数据库实例上被请求访问。
如果应用程序可以实现,那么我们建议不同的应用功能/模块数据分布在不同的数据库实例上被访问,避免同一数据被多个实例交叉访问,可以减少buffer的争用,避免gc等待。
--4》- 可能为Oracle bug
建议安装Oracle推荐的最新Patch Set和PSU。
Patch set和PSU信息请参考:Oracle Recommended Patches -- Oracle Database (Doc ID 756671.1)
如果问题还在的话,可以做一下一下操作:
RAC数据库收集hanganalyze的命令:
SQL> conn / as sysdba
SQL> oradebug setmypid
SQL> oradebug unlimit
SQL> oradebug -g all hanganalyze 3