索引争用/ Oracle环境“高调”问题

时间:2013-11-18 11:36:45

标签: database oracle indexing binary-tree contention

我正在阅读“索引争用”并找到以下解释:

Oracle b-tree索引是“右撇子”,b-tree的右侧叶子包含最低树级别中的最高密钥。

当基于用户生成的密钥(即序列)插入行时发生索引叶节点争用,并且因为序列密钥始终是高阶键,所以低级索引树节点的每个插入必须向上传播到b树指数中的高调指标。

oracle b-tree索引还有其他任何缺点吗?

可能是索引争用/插入争用的其他原因是什么?

2 个答案:

答案 0 :(得分:2)

索引连续生成的pk时,可能会发生索引争用或热点。在这种情况下,所有新记录总是插入到索引的最右边的叶子上,从而导致锁存。

为避免此问题,oracle引入了reversed key选项。在反向键索引中,条目被反转保存(简单地说 - 123将被存储为321)并且新插入将在索引中传播。

一般来说,每次将大量数据插入同一个叶块时都会出现热点。

重要提示 - 使用反向键索引时,您将无法使用范围扫描,因此请权衡您的选项。

答案 1 :(得分:0)

我的问题是专门针对oracle b-tree索引而不是实际上是什么“索引争用”。 虽然我想在我的问题中添加更多的观点,然后回答它。

当基于用户生成的密钥(即序列)插入行时发生索引叶节点争用,并且因为序列密钥始终是高阶键,所以低级索引树节点的每个插入必须向上传播到b树指数中的高调指标。

有三种技术可用于缓解此索引争用问题:

  • 反向键索引
  • 包含缓存和无序选项的序列
  • 使用散列分区全局索引
  • 调整索引块大小