您的位置:首页 > 产品设计 > UI/UE

[RAC性能调优] gc buffer busy acquire 处理

2014-05-20 11:02 651 查看

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
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

% of Capture shows % of GC Buffer Busy for each top segment compared

with GC Buffer Busy for all segments captured by the Snapshot
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: