【oracle】oracle索引分裂

本文为云贝教育 刘峰 原创,请尊重知识产权,转发请注明出处,不接受任何抄袭、演绎和未经注明出处的转载。

一、索引分裂概述

Oracle数据库中的索引分裂是数据库维护和性能管理中的一个重要概念,特别是在处理大量数据插入、更新和删除操作时。索引分裂发生的原因、类型以及对数据库性能的影响如下:

1.1 索引分裂的原因

索引分裂主要发生在以下场景:

  • • 插入操作:当向已满或接近满的索引块中插入新记录时,如果该块没有足够的空间容纳新数据,索引就需要分裂来创造额外的空间。
  • • 更新操作:如果更新导致索引项的大小变化,以至于原块无法容纳,则可能触发索引块的分裂。
  • • 删除操作:虽然删除通常不会直接导致索引块分裂,但在某些情况下,删除后留下的空间碎片可能需要通过索引重组或合并来优化。
1.2 索引分裂的类型

索引分裂主要有三种基本类型:

  1. 1. 叶节点分裂(Leaf Node Split):这是最常见的类型,当索引叶子节点(存储实际索引值的块)没有足够的空间来容纳新的索引条目时,叶子节点会被分裂成两个或更多块。大多数情况下,分裂是90-10或50-50的比例,即原块的一部分数据迁移到新块,其余数据保留在原块。
  2. 2. 枝节点分裂(Branch Node Split):当索引的枝节点(连接叶子节点的中间层块)满载时,也会发生分裂,以容纳更多的分支。
  3. 3. 根节点分裂(Root Node Split):虽然较为罕见,但当根节点需要更多空间来存储指向枝节点的指针时,根节点也可能分裂,这通常伴随着索引层次的增加。
1.3 对性能的影响
  • • 性能下降:索引分裂会导致额外的I/O操作,增加数据库的写操作负担,可能会暂时降低查询性能。
  • • 空间碎片:频繁的分裂会导致索引结构中出现碎片,影响索引扫描效率。
  • • 维护成本:索引分裂需要数据库自动维护,增加了系统资源的消耗。

二、索引分裂验证

实验环境: oracle 19c

2.1 基础环境准备

切换到pdb,创建一张带主键的表

2.2 查看表头信息

2.3 查看当前表和索引的分配的区

表和索引都分配了1个区,每个区有8个块。

2.4 查看当前索引分裂的情况

由于当前数据库刚启动,所以没有块分裂。

2.5 跟踪块分裂

通过10224事件跟踪块分裂

分析trace

2.6 查看表和索引占用的块数

可以看到表和索引都

2.7 查看录入数据之后表和索引的分配的区

2.8 查看当前索引分裂的情况

观察到插入数据之后,产生了92次索引叶子块分裂,且分裂类型均为9-1单边分裂类型。

三、数据分析

结论:

  • • 从索引的分裂情况来看,在录入数据之前,索引PK_ID分配了一个区,这个区有8个块,但实际上只使用了一个块
  • • 在录入数据之后,索引的的分区有12个,共96个块,也就是说,索引最多扩展95(96-1)次。
  • • 从trace分析和v$sysstat视图可以确认,由于录入的数据是有序的,分裂了92次均为leaf node 90-10 splits类型。

四、思考

1. 出现严重的索引分裂会带来什么样的问题?又是如何解决?

2. 什么情况下会出现50-50 splits类型的索引分裂?

在下一篇文章中,我们再揭幕。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/36758.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python入门-基础知识-变量

1.标识符与关键字 Python语言规定,标识符由字母、数字和下画线组成,且不允许以数字开头。合法的标识符可以 是student_1、 addNumber、num等,而3number、2_student等是不合法的标识符。在使用标识符时应注意以下几点。 (1)命名时应遵循见名知…

CVPR 2024最佳论文分享:生成图像动力学

CVPR 2024最佳论文分享:生成图像动力学 CVPR(Conference on Computer Vision and Pattern Recognition)是计算机视觉领域最有影响力的会议之一,主要方向包括图像和视频处理、目标检测与识别、三维视觉等。近期,CVPR 2…

使用python在dolphinDB上运行SQL

需要先部署好dolphindb并启动数据库 步骤1:链接dolphinDB数据库 安装依赖库:pip install dolphindb 然后运行: import dolphindb as ddbdef get_dolphin_session():"""获取dolphinDB的session"""dolphin_c…

2000—2022年青藏高原遥感生态指数数据集

该数据集是基于多套MODIS数据集,选取NDVI、LST、WET、NDBSI四项指标,采用主成分分析法,生成2000-2022年500米空间分辨率的遥感生态指数(RSEI)数据集。 遥感生态指数:是一种基于遥感技术的生态环境质量综合评…

3D立体卡片动效(附源码)

3D立体卡片动效 欢迎关注:xssy5431 小拾岁月参考链接:https://mp.weixin.qq.com/s/9xEjPAA38pRiIampxjXNKQ 效果展示 思路分析 需求含有立体这种关键词,我们第一反应是采用动画中的平移、倾斜等实现。如果是立体,必然产生阴影&…

[c++] 类型推导 typeid decltype auto

前言:为什么c需要类型推导 诸如python这类语言,声明对象和函数返回时都不需要显示声明类型,如果程序比较复杂很容易在函数多级传参时找不到返回值的数据类型,这时类型推导就是一件很有意义的事了,而c/c中,函数的返回值类型都是显示传递的,不同类型之间还不能直接进行赋值,看起…

FFmpeg中位操作相关的源码:GetBitContext结构体,init_get_bits函数、get_bits1函数和get_bits函数分析

一、引言 由《音视频入门基础:H.264专题(3)——EBSP, RBSP和SODB》可以知道,H.264 码流中的操作单位是位(bit),而不是字节。因为视频的传输和存贮是十分在乎体积的,对于每一个比特(bit&#xf…

利用圆上两点和圆半径求解圆心坐标

已知圆上两点P1,P2,坐标依次为 ( x 1 , y 1 ) , ( x 2 , y 2 ) (x_1,y_1),(x_2,y_2) (x1​,y1​),(x2​,y2​),圆的半径为 r r r,求圆心的坐标。 假定P1,P2为任意两点,则两点连成线段的中点坐标是 x m i …

TS-常量枚举

如果使用普通的数值枚举或字符串枚举,在编译成JavaScript代码后会产生较多代码来支持各项功能,开销较大且可读性较差,而且很可能被人误用。例如,使用索引查找或反向映射会导致可读性进一步变差,出错率进一步提高。 要解…

qt 实现对字体高亮处理原理

在Qt中实现对文本的字体高亮处理,通常涉及到使用QTextDocument、QTextCharFormat和QSyntaxHighlighter。下面是一个简单的例子,演示如何为一个文本编辑器(假设是QTextEdit)添加简单的关键词高亮功能: 步骤 1: 定义关键…

redis sentinel 部署

安装Redis 建议版本不要太低 > 6.2,我这里是redis 7.2.5 curl -fsSL https://packages.redis.io/gpg | sudo gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg echo "deb [signed-by/usr/share/keyrings/redis-archive-keyring.gpg] http…

Git Flow 工作流学习要点

Git Flow 工作流学习要点 Git Flow — 流程图Git Flow — 操作指令优点:缺点:Git Flow 分支类型Git Flow 工作流程简述关于 feature 分支关于 Release 分支关于 hotfix 分支 总结 Git Flow — 流程图 图片来源:https://nvie.com/posts/a-succ…

vue全局方法plugins/utils

一、在src目录下创建一个plugins文件夹 test.ts文件存放创建的方法,index.ts用于接收所有自定义方法进行统一处理 二、编写自定义方法 // test.ts文件 export default {handleTest(val1: number, val2: number) {// 只是一个求和的方法return val1 val2;}, };三…

vue3 【提效】使用 CSS 框架 UnoCSS 实用教程

该换种更高效的方式写 CSS 啦&#xff0c;举个例&#xff1a; <div class"flex"> </div>相当于 <div class"flex"> </div> <style> .flex {display: flex; } </style>当然&#xff0c;还有超多强大的功能帮我们提升…

江科大笔记—FLASH闪存

FLASH闪存 程序现象&#xff1a; 1、读写内部FLASH 这个代码的目的&#xff0c;就是利用内部flash程序存储器的剩余空间&#xff0c;来存储一些掉电不丢失的参数。所以这里的程序是按下K1变换一下测试数据&#xff0c;然后存储到内部FLASH&#xff0c;按下K2把所有参数清0&…

注册中文网址(中文域名)有什么用?

随着互联网的全球普及&#xff0c;域名系统作为网络空间的门牌号&#xff0c;其重要性不言而喻。长久以来&#xff0c;英文域名占据了主导地位&#xff0c;但随着国际化域名&#xff08;IDN&#xff0c;Internationalized Domain Name&#xff09;技术的发展&#xff0c;注册中…

检索增强生成RAG系列2--提高RAG准确度的关键点

上一章讲到了RAG的基本流程&#xff0c;但是如果只是完成一个基本流程&#xff0c;想要在商业上使用还是不行&#xff0c;因为正常商业上的使用其准确度至少有个90%甚至更高。那么如何提高RAG的准确度&#xff0c;那么需要看看RAG有哪些关键点。 目录 1 RAG结构图2 文档处理3 …

【PyQt5】一文向您详细介绍 QVBoxLayout() 的作用

【PyQt5】一文向您详细介绍 QVBoxLayout() 的作用 下滑即可查看博客内容 &#x1f308; 欢迎莅临我的个人主页 &#x1f448;这里是我静心耕耘深度学习领域、真诚分享知识与智慧的小天地&#xff01;&#x1f387; &#x1f393; 博主简介&#xff1a;985高校的普通本硕&a…

前端面试题(基础篇十一)

一、DOCTYPE 的作用是什么&#xff1f; <!DOCTYPE> 声明一般位于文档的第一行&#xff0c;它的作用主要是告诉浏览器以什么样的模式来解析文档。一般指定了之后会以标准模式来进行文档解析&#xff0c;否则就以兼容模式进行解析。在标准模式下&#xff0c;浏览器的解析规…

速盾:ddos高防ip是什么?

DDoS攻击是一种通过向目标网络发送大量的无效请求&#xff0c;以致其无法正常运作的攻击方式。这种攻击方式广泛应用于各种网络服务&#xff0c;如网站、服务器、游戏等。由于DDoS攻击可以导致被攻击的网络瘫痪&#xff0c;因此许多组织和个人都开始关注网络安全&#xff0c;并…