性能优化: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 条评论
登录 后参与评论

相关文章

来自专栏开源优测

[大数据测试]ETL测试或数据仓库测试入门

概述 在我们学习ETL测试之前,先了解下business intelligence(即BI)和数据仓库。 什么是BI? BI(Business Intell...

43160
来自专栏灯塔大数据

教程 | 中国酷炫地图,大神教你用Python一边爬一边画

先来聊聊为什么做数据分析一定要用Python或R语言。编程语言这么多种,Java, PHP都很成熟,但是为什么在最近热火的数据分析领域,很多人选择用Python...

42530
来自专栏小红豆的数据分析

毕业设计:爬虫及数据分析

指导老师跟我说,本科毕业设计不需要创新,但是工作量一定要够,我就知道又要搞事情了。

2.5K20
来自专栏禁心尽力

数据库设计

杨鑫奇数据库设计经验之谈 一个成功的管理系统,是由:[50% 的业务 + 50% 的软件] 所组成,而 50% 的成功软件又有 [25% 的数据库 + 25% ...

30580
来自专栏Danny的专栏

数据库设计经验谈

一个成功的管理系统,是由:[50% 的业务 + 50% 的软件] 所组成,而 50% 的成功软件又有 [25% 的数据库 + 25% 的程序] 所组成,数据库...

18440
来自专栏WeTest质量开放平台团队的专栏

用ElasticSearch搭建自己的搜索和分析引擎

互联网产品中的检索功能随处可见。当你的项目规模是百度大搜|商搜或者微信公众号搜索这种体量的时候,自己开发一个搜索引擎,加入各种定制的需求和优化,是非常自然的事情...

38830
来自专栏Hadoop数据仓库

HAWQ取代传统数仓实践(八)——维度表技术之角色扮演维度

        单个物理维度可以被事实表多次引用,每个引用连接逻辑上存在差异的角色维度。例如,事实表可以有多个日期,每个日期通过外键引用不同的日期维度,原则上每...

292100
来自专栏软件测试经验与教训

ES性能测试笔记

518120
来自专栏开源优测

大数据测试之ETL测试入门

概述 在我们学习ETL测试之前,先了解下business intelligence(即BI)和数据仓库。 什么是BI? BI(Business Intell...

71580
来自专栏小文博客

用Python画一个中国地图【转】

23530

扫码关注云+社区

领取腾讯云代金券