Oracle数据库数据恢复、性能优化

找回密码
注册
搜索
热搜: 活动 交友 discuz
发新帖

0

积分

1

好友

3

主题
1#
发表于 2013-3-12 10:34:18 | 查看: 4683| 回复: 10
本帖最后由 波导手机 于 2013-3-12 13:52 编辑

数据库版本10.2.0.4.2
os redhat5.4 x86_64

现象 数据库连接数暴涨。
处理方法,没有处理,高峰时期1000个active ,dba登陆后很快消失。

当时的情景
查看最早session开始飙涨时v$active_session_history 找到了blocking_session

EVENT                                                            BLOCKING_SESSION   COUNT(*)
---------------------------------------------------------------- ---------------- ----------
enq: TX - index contention                                                   3232         132
db file sequential read                                                                              1

















2#
发表于 2013-3-12 12:05:41
25% -- 50% free spaceblocks.............52136
25% -- 50% free spacebytes..............427098112

大多是 25~50的free block, 可能这个 index上的数据被 删除过不少 存在所谓“碎片”

你能否上传问题时段的 AWR+ASH+ADDM?

回复 只看该作者 道具 举报

3#
发表于 2013-3-12 12:22:38
本帖最后由 波导手机 于 2013-3-12 13:03 编辑
Maclean Liu(刘相兵 发表于 2013-3-12 12:05
25% -- 50% free spaceblocks.............52136
25% -- 50% free spacebytes..............427098112


最后我们重建了索引。该表是一个大的分区表,每月做drop partition update global indexes操作。
主要是想找到root cause.

1 是一条insert ,为什么要等很长时间的db file sequenctial read
2 是该insert 阻塞了索引的块分裂。

回复 只看该作者 道具 举报

4#
发表于 2013-3-12 12:26:52
  1. select SS.snap_id,
  2. SS.stat_name,
  3. TO_CHAR(S.BEGIN_INTERVAL_TIME, ‘DAY’) DAY,
  4. S.BEGIN_INTERVAL_TIME,
  5. S.END_INTERVAL_TIME,
  6. SS.value,
  7. SS.value – LAG(SS.VALUE, 1, ss.value) OVER (ORDER BY SS.SNAP_ID) AS DIFF
  8. from DBA_HIST_SYSSTAT SS,
  9. DBA_HIST_SNAPSHOT S
  10. where S.SNAP_ID = SS.SNAP_ID
  11. AND SS.stat_NAME = ‘failed probes on index block reclamation’
  12. ORDER BY SS.SNAP_ID ;
复制代码
上面的脚本查一下

回复 只看该作者 道具 举报

5#
发表于 2013-3-12 12:30:51
本帖最后由 波导手机 于 2013-3-12 13:37 编辑
Maclean Liu(刘相兵 发表于 2013-3-12 12:26
上面的脚本查一下


结果附件中

回复 只看该作者 道具 举报

6#
发表于 2013-3-12 12:38:38
8546failed probes on index block reclamationMONDAY   2013-03-11 15:00:36.4102013-03-11 15:30:04.7391765-17650
28546failed probes on index block reclamationMONDAY   2013-03-11 15:00:36.5152013-03-11 15:30:04.80817650
28546failed probes on index block reclamationMONDAY   2013-03-11 15:00:36.4102013-03-11 15:30:04.7391941517650
28546failed probes on index block reclamationMONDAY   2013-03-11 15:00:36.5152013-03-11 15:30:04.808194150
28547failed probes on index block reclamationMONDAY   2013-03-11 15:30:04.7392013-03-11 16:00:01.8151765-17650
28547failed probes on index block reclamationMONDAY   2013-03-11 15:30:04.8082013-03-11 16:00:01.82117650
28547failed probes on index block reclamationMONDAY   2013-03-11 15:30:04.7392013-03-11 16:00:01.8151941517650
28547failed probes on index block reclamationMONDAY   2013-03-11 15:30:04.8082013-03-11 16:00:01.821194150
28548failed probes on index block reclamationMONDAY   2013-03-11 16:00:01.8152013-03-11 16:30:10.202194661175246
28548failed probes on index block reclamationMONDAY   2013-03-11 16:00:01.8212013-03-11 16:30:10.2761946610
28548failed probes on index block reclamationMONDAY   2013-03-11 16:00:01.8152013-03-11 16:30:10.20219415-175246
28548failed probes on index block reclamationMONDAY   2013-03-11 16:00:01.8212013-03-11 16:30:10.276194150
28549failed probes on index block reclamationMONDAY   2013-03-11 16:30:10.2022013-03-11 17:00:27.927194661175246
28549failed probes on index block reclamationMONDAY   2013-03-11 16:30:10.2762013-03-11 17:00:27.9331946610

回复 只看该作者 道具 举报

7#
发表于 2013-3-12 12:41:22
请问这个产生的原因,是因为索引的碎片太多吗? 怎么理解这个事件?

回复 只看该作者 道具 举报

8#
发表于 2013-3-12 12:42:20
因为是RAC 所以这个脚本出现的结果 会有点问题, 但是可以看到的是 16:00~16:30
这个时段的

failed probes on index block reclamation 是平时的几十倍,这说明 index split时 持有 enq:tx index锁的process 探测了大量的block 以便能找到合适的block来分裂块,  这是其他insert会等待 enq:tx index contention。

若持有enq:tx锁的进程一直找不到合适的block,则会导致大量的enq:tx index contention等待。  负责找这个block的 进程会 读取索引中 freelist上的合适块,如果 这些块不在buffer cache中 则会有 db file sequential read等待。


你可以看看这个文档:
http://www.askmaclean.com/archiv ... 88%86%E6%9E%90.html

回复 只看该作者 道具 举报

9#
发表于 2013-3-12 13:00:46

assm同样也存在,split时,找空闲块的情况,assm 从bitmap里扫标记空闲的块,可是扫到的块虽然空闲,但是不能进行分裂,分裂必须找到100%空闲,于是就不断的db file sequential read, 其他split只能等在这里,直到找到真正空闲的块。
我的理解是否正确?

回复 只看该作者 道具 举报

10#
发表于 2013-3-12 13:02:09
波导手机 发表于 2013-3-12 13:00
assm同样也存在,split时,找空闲块的情况,assm 从bitmap里扫标记空闲的块,可是扫到的块虽然空闲,但是 ...

不管mssm还是assm都存在 , 解决方法包括:

1.  强制缓存索引在keep中避免 物理读
2. 不做rebuild ,只做coalesce
3. 考虑用global hash  or range+hash local index

回复 只看该作者 道具 举报

11#
发表于 2013-3-12 13:03:10
非常感谢,结束此贴,受益匪浅。

回复 只看该作者 道具 举报

您需要登录后才可以回帖 登录 | 注册

QQ|手机版|Archiver|Oracle数据库数据恢复、性能优化

GMT+8, 2024-11-16 08:40 , Processed in 0.052425 second(s), 20 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部
TEL/電話+86 13764045638
Email service@parnassusdata.com
QQ 47079569