您的位置:首页 > Web前端

gc buffer busy等待事件

2012-12-04 22:00 561 查看
这2天RAC生产库出现gc buffer busy 等待事件,出现的应用情况为出单缓慢。下面是官方对此的解释:

gc buffer busy

This wait event, also known as global cache buffer busy prior to Oracle 10g,

specifies the time the remote instance locally spends accessing the requested data block.

This wait event is very similar to the buffer busy waits wait event in asingle-instance database and are often the result of:

1. Hot Blocks -

multiple sessions may be requesting a block that is either not in buffer cache or is in an incompatible mode.

Deleting some of the hot rows and re-inserting them back into the table may alleviate the problem.

Most of the time the rows will be placed into a different block and reduce contention on the block.

The DBA may also need to adjust the pctfree and/or pctused parameters for the table to ensure the rows are placed into a different block.

2. Inefficient Queries ˆ

as with the gc cr request wait event,

the more blocks requested from the buffer cache the more likelihood of a session having to wait for other sessions.Tuning queries to access

fewer blocks will often result in less contention for the same block.

--------------------------------------------------------------------

在10g 之前。这个等待事件叫做 global cache buffer busy,产生的原因和单实例的 buffer busy waits 类似

就是一个时间点节点a的实例向节点b请求block的等待。

产生原因:

1:热块

可能有多个session 请求这个数据块,有可能是数据块还没有读入 data buffer cache(某个session正在读入),或者session 间存在冲突的模式

一个会话在delete 热块的热行 并且重新插入的时候,有可能出现这个问题。

解决的办法是 修正 (扩大)pctfree 参数。来打散这个热块。

2:低效的查询

越多的数据块请求到buffer cache 中,那么越可能造成 别的会话等待。优化查询(sql),读入更少的lock。

解决过程

alter session set nls_timestamp_format='yyyy-mm-dd hh24:mi:ss.ff';

Session altered.

select SNAP_ID,INSTANCE_NUMBER,SAMPLE_TIME from dba_hist_active_sess_history where rownum=1;

SNAP_ID INSTANCE_NUMBER SAMPLE_TIME
---------- --------------- ---------------------------------------------------------------------------
21666               2 2012-12-03 11:00:12.153

select SNAP_ID from dba_hist_active_sess_history where SAMPLE_TIME between to_timestamp('2012-12-04 10:00:00','yyyy-mm-dd hh24:mi:ss.ff') and
to_timestamp('2012-12-04 12:00:00','yyyy-mm-dd hh24:mi:ss.ff');

21689

select wait_class_id, wait_class, count(*) cnt from dba_hist_active_sess_history  where snap_id=21689 group by wait_class_id, wait_class
order by 3;

WAIT_CLASS_ID WAIT_CLASS                                                              CNT
------------- ---------------------------------------------------------------- ----------
2723168908 Idle                                                                      2
3290255840 Configuration                                                             3
2000153315 Network                                                                  13
4108307767 System I/O                                                               28
3386400367 Commit                                                                  130
1893977003 Other                                                                   216
3875070507 Concurrency                                                            1822
1740759767 User I/O                                                               5473
8297
4217450380 Application                                                           16657
3871361733 Cluster                                                              114836

11 rows selected.

SELECT event_id, event, COUNT (*) cnt
FROM dba_hist_active_sess_history
WHERE snap_id=21689 AND wait_class_id = 3871361733
GROUP BY event_id, event
ORDER BY 3;

EVENT_ID EVENT                                                                   CNT
---------- ---------------------------------------------------------------- ----------
1742950045 gc current retry                                                          1
3897775868 gc current multi block request                                            3
2701629120 gc current block busy                                                     3
512320954 gc cr request                                                             4
1077045392 gc current block unknown                                                  5
667696377 gc current grant congested                                                7
75296820 gc remaster                                                              17
2705335821 gc cr block congested                                                    25
1520064534 gc cr block busy                                                         29
1445598276 gc cr disk read                                                          71
3794703642 gc cr grant congested                                                   124
3785617759 gc current block congested                                              136
2277737081 gc current grant busy                                                   356
2685450749 gc current grant 2-way                                                  365
737661873 gc cr block 2-way                                                      1365
3201690383 gc cr grant 2-way                                                      6109
111015833 gc current block 2-way                                                 7915
661121159 gc cr multi block request                                             12166
1478861578 gc buffer busy                                                        86135

spool sql_id.txt
SELECT sql_id, COUNT (*) cnt
FROM dba_hist_active_sess_history
WHERE snap_id=21689 AND event_id IN (661121159, 1478861578)
GROUP BY sql_id
HAVING COUNT (*) > 1
ORDER BY 2;
spool off
--参看sql_id.txt
[oracle@host103] ~/bin 1007>tail -10 sql_id.txt
65b19gtx3pq95        521
3ym50bscr504n        533
0y8c91ys5nh3a        578
538ytbrzda34c        673
9xtp115t3zbqd       1190
2nh8vygjwqty9       1562
a17rkh5dsxwb7       2606

set line 250
set long 1000
set pagesize 0
spool sql_gc.txt
SELECT sql_id,SQL_TEXT  FROM dba_hist_sqltext d  WHERE sql_id IN(
'a17rkh5dsxwb7',
'2nh8vygjwqty9',
'9xtp115t3zbqd',
'538ytbrzda34c',
'0y8c91ys5nh3a',
'3ym50bscr504n',
'65b19gtx3pq95');
spool off;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: