欢迎访问 生活随笔!

ag凯发k8国际

当前位置: ag凯发k8国际 > 编程资源 > 编程问答 >内容正文

编程问答

oracle index contention,index contention等待 -ag凯发k8国际

发布时间:2024/10/14 编程问答 10 豆豆
ag凯发k8国际 收集整理的这篇文章主要介绍了 oracle index contention,index contention等待 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

l表被删除后的空间是可以被重用的, (pctused对表块有影响,块上删除后的空间可以重用。pctfree给表块未来的update留空间)

索引被删除只加了删除标记,不能被重用。(除非该叶子快的所有索引都被标记为删除,即100% free的index block才能被放到freelist里面重用。或者虽然不是全空的,但是后续插入的行与原来的行的索引值是同一个值或者同范围。)

(pctused对索引块没有影响,因为索引记录被删除后的空间不能重用)

(pctfree对于索引块实际不是给update留空间而是给insert留空间,索引update:是先删除(加删除标记) insert插入(新的块)。 而索引总是有序的,insert某值可能位于已有的块中间(对于非右增长的))

过多的dml操作使得索引变得松散(rebuild)

l重建索引:

1,有可能会降低btree的level

2,松散的索引变得紧凑

lassm(automatic segment space management)

段中的block的位图只有这几种: 0~25%, 25%~50%, 50%~75%,75%~100%。 没有单独标记100% free的位图。

index 块split时,要去search 75%~100%的块, 找到后, 然后判断是否full free block(只有100% free的空块才能被用来做索引的分裂)。

l索引分裂的时候(无论是50-50,还是90-10),split进程找临近空块,在找到临近的70%-100%的空块之后,却发现不能重用的原因有2个:????

1,可能这个块不是100%free的,而是70% ~ <100% free的, 也就是找到的这个block上面还有几行或者多行索引记录,所以不能被重用来做split

2,可能这个块上还有一些其它的active transaction,所以它重用不了。

而每次寻找空块然后failed ,oracle就会增加这个统计指标: failed probes on index block reclamation

l对某些库的index contention的时候伴随出现的buffer gets增加的问题原因解释:

---update * set * where (select * 。。。) ,有子查询的这种dml, 会受两方面的影响导致该类dml的buffer gets增加:

1,可能select子查询受一致性读的影响,读cr block产生更多的buffer gets

2,可能索引找空块, 随着索引碎片的增加,它找空块的次数也变多(找空块本身也是一个事务,有可能成功也有可能会失败回滚),从而产生更多的buffer gets。

---insert ** values (。。。) , 这种无子查询的dml , 会受这个因素影响导致dml 的buffer gets增加:

2,可能索引找空块, 随着索引碎片的增加,它找空块的次数也变多(找空块本身也是一个事务,有可能成功也有可能会失败回滚),从而产生更多的buffer gets。

来自 “ itpub博客 ” ,链接:http://blog.itpub.net/22818880/viewspace-2077100/,如需转载,请注明出处,否则将追究法律责任。

总结

以上是ag凯发k8国际为你收集整理的oracle index contention,index contention等待的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得ag凯发k8国际网站内容还不错,欢迎将ag凯发k8国际推荐给好友。

网站地图