oracle索引分裂探索
背景:近期生产环境业务高峰期库压力突增,表现为CPU使用率升高,sql执行时间长,执行sql的会话阻塞大概100多条。等待事件是enq:TX-index contention 和 buffer busy waits
enq:TX-index contention是一个非常常见的等待事件,其专指由于索引分裂产生的竞争等待。
索引分裂:
什么是索引分裂呢?索引分裂是指:当某个索引块中的空闲空间不足以容纳新加入的记录时,寻找一个新的索引块来存放记录。一般来说insert是引起索引块分裂的主要操作。
索引分裂可以分为三种:
leaf block split(叶节点分裂)
branch block split(枝节点分裂)
root block split(根节点分裂)
按照 leaf Block Split 分裂时的行为 又可以分为:
leaf node 90-10 splits 插入到索引leaf block叶子块中的索引键是该块中最大的键值(包括块中已删除的索引键值)。 在此种情况下实施 90-10 split( 实际是 99-1 ),原叶子块仍保持99%的full, 而到另一个空的叶子块中插入该条新的最大键值记录。
leaf node 90-10 splits 行为的次数可通过v$sysstat视图 中leaf node 90-10 splits获得,AWR中也有对应记录:

leaf node 50-50 splits 当插入到索引叶子块中的索引键值不是该块中的最大值时(包括块中已删除的索引键值), 将发生 50/50 split分裂, 这意味着有一半索引记录仍存在当前块,而另一半数据移动到新的叶子块中。
leaf node 50-50 splits的次数也是通过AWR中获取


5275

被折叠的 条评论
为什么被折叠?



