首页 > 代码库 > [RAC性能调优] gc buffer busy acquire 处理

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


RAC性能调优] gc buffer busy acquire 处理              
分类: troubleshooting RAC 255人阅读 评论(0)收藏 编辑删除

目录(?)[+]

  1. RAC性能调优 gc buffer busy acquire 处理





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






























event 解释:



gcbufferbusyacquire是当session#1尝试请求访问远程实例(remote instance)buffer,但是在session#1之前已经有相同实例上另外一个session#2请求访问了相同的buffer,并且没有完成,那么session#1等待gcbufferbusyacquire

 

 

原因/解决方法
---------------------
- 1.
》热点块(hot block)
AWRSegments by Global Cache BufferBusy记录了访问频繁的gcbuffer.
解决方法可以根据热点块的类型采取不同的解决方法,比如采取分区表,分区索引,反向index等等。这点与单机数据库中的bufferbusywaits类似。

 

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被请求访问,增加了bufferbusy的机会。在AWR中可以找到TOP SQL。解决方法可以优化SQL语句减少buffer访问。这点与单机数据库中的bufferbusy 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) FROMfeeorder_log_1404 WHERE requestdata >SYSDATE - 5 / 1440 AND requestdata <= SYSDATE AND rspcode=‘000000‘ ANDSUBSTR(copyrightid, -1, 1)=‘1‘ ) || ‘ ‘ || ( SELECT COUNT(1) FROMfeeorder_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 fromfeeorder_log_1404where REQUESTDATA>sysdate-5/1440 and REQUESTDATA<=sysdate), (selectcount(1) as successall fromfeeorder_log_1404where REQUESTDATA>sysdate-5/1440 and REQUESTDATA <=sysdate and RspCode =‘000000‘)

 

--3》。数据交叉访问。
RAC
数据库,同一数据在不同数据库实例上被请求访问。
如果应用程序可以实现,那么我们建议不同的应用功能/模块数据分布在不同的数据库实例上被访问,避免同一数据被多个实例交叉访问,可以减少buffer的争用,避免gc等待。

 

--4-可能为Oracle bug
建议安装Oracle推荐的最新Patch SetPSU
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