性能优化:B*Tree 索引分裂之存储参数

黄玮(Fuyuncat)

黄玮(Fuyuncat),资深 Oracle DBA,从事 Oracle 数据库管理、维护与开发工作十余年,有丰富的大型数据库设计、开发与维护方面的经验,涉及航空、水利、军工、电信等多个行业。曾供职于某世界著名物流公司,负责公司的电子物流系统的数据库开发和维护工作。2005年创建了个人网www.HelloDBA.com,致力于数据库底层技术的研究,整理和发布了大量关于数据库系统底层机制、存储结构、性能调优以及基础算法方面的文章,获得广大同行的高度评价。

编辑手记:你还在为运维中遇到的索引分裂问题而烦恼吗?恭喜你,今天我们的分享就是为你去除烦恼的,让我们一起去认识索引分裂之存储参数。

我们知道,在表的数据块中,当数据插入时,要保证数据块上剩余空间大于、等于PCTFREE的比例设置,以用于数据更新和多事务处理,从而减少数据迁移(Row Migration)的发生;而当分配新的数据块时,会根据INITRANS的设置预留相应的 ITL slot,保证并发事务能分配到 ITL slot。

在索引中,这两个参数仅在有数据时创建或重建索引才会起作用,且仅在叶子节点上起作用。

INITRANS

INITRANS 在索引数据块上是否起作用,是由索引在创建或重建时是否有数据(即是否会分配数据块)决定的。比较以下代码,第一段代码在 truncate 之后 rebuild(即不会分配索引数据块),因而 ITL slot数量为默认值2;第二段代码在有数据时 rebuild,然后再 truncate,此时再插入数据产生的新的索引块上 ITL slot数量就受到 INITRANS 的控制:

需要注意的是,当数据块上ITL Slot数量大于起作用的 INITRANS 时,在分裂时被“继承”。在以下例子中,在 rebuild 时,指定了 INITRANS 为3:

我们同时启动4个事务作用在最后一个节点,导致该数据块上分配5个(加一个递归事务ITL slot)ITL slot:

然后将它们全部提交或回滚,再插入数据,造成分裂:

Dump 出分裂的数据块,可以看到所有数据块都被分配了5个 ITL slot,而不是 INITRANS(3)的数量:

PCTFREE

PCTFREE在分裂时则被忽略。在上述例子中,我们找到一块发生9-1分裂产生的数据块,可以看到其空闲空间为44b,空闲率为44/2048=2.1%,远远小于我们rebuild时的设定值(60)。

我们再插入一些中间数据,造成5-5分裂:

可以看到,发生分裂的数据块的空闲率为556/2048=27.1%,可见PCTFREE(60)也被忽略了。

--- Fuyuncat TBC ---

原文发布于微信公众号 - 数据和云(OraNews)

原文发表时间:2016-08-09

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏北京马哥教育

高性能服务器架构里的隐藏秘密

作者:Coder李海波 来源:http://blog.csdn.net/marising/article/details/5186643 在提到服务器架构时,...

2714
来自专栏Java编程技术

Java并发编程之美

并发编程相比 Java 中其他知识点的学习门槛较高,从而导致很多人望而却步。但无论是职场面试,还是高并发/ 高流量系统的实现,却都离不开并发编程,于是能够真正掌...

1113
来自专栏IT技术精选文摘

微信后台基于时间序的海量数据冷热分级架构设计实践

1716
来自专栏Albert陈凯

2018-08-25 2000万条数据迁移从几天到几个小时

一直不知道性能优化都要做些什么,从哪方面思考,直到最近接手了一个公司的小项目,可谓麻雀虽小五脏俱全。让我这个编程小白学到了很多性能优化的知识,或者说一些思考方式...

872
来自专栏腾讯大数据的专栏

Hermes与开源的Solr、ElasticSearch的不同

谈到Hermes的索引技术,相信很多同学都会想到Solr、ElasticSearch。Solr、ElasticSearch真可谓是大名鼎鼎,是两个顶级项目,最...

2385
来自专栏即时通讯技术

一文读懂高性能网络编程中的I/O模型

随着互联网的发展,面对海量用户高并发业务,传统的阻塞式的服务端架构模式已经无能为力。本文(和下篇《高性能网络编程(六):一文读懂高性能网络编程中的线程模型》)旨...

651
来自专栏Java技术

初探性能优化--2个月到4小时的性能提升!

一直不知道性能优化都要做些什么,从哪方面思考,直到最近接手了一个公司的小项目,可谓麻雀虽小五脏俱全。让我这个编程小白学到了很多性能优化的知识,或者说一些思考方式...

591
来自专栏Java架构解析

如果再有人问你分布式 ID,这篇文章丢给他

通常我们会调研各种各样的生成策略,根据不同的业务,采取最合适的策略,下面我会讨论一下各种策略/算法,以及他们的一些优劣点。

523
来自专栏大数据文摘

5大架构:细数数据平台的组成与扩展

2098
来自专栏吉浦迅科技

DAY26:阅读性能优化策略

824

扫码关注云+社区