【云和恩墨】insert into太慢?Roger 带你找真凶

简介: 原创 2016-09-20 李真旭 Oracle insert into太慢?Roger 带你找真凶 李真旭(Roger) ACOUG 核心专家,Oracle ACE,云和恩墨技术专家 编辑手记:昨天谈到索引并不是万能的,事实上很多无用的索引给数据库带来很大的维护负担,事实并不止于此,今天拣选Roger的文章,跟大家分享索引引发的其他性能问题。

原创
  2016-09-20  李真旭 

insert into太慢?Roger 带你找真凶

李真旭(Roger)

ACOUG 核心专家,Oracle ACE,云和恩墨技术专家


编辑手记:昨天谈到索引并不是万能的,事实上很多无用的索引给数据库带来很大的维护负担,事实并不止于此,今天拣选Roger的文章,跟大家分享索引引发的其他性能问题。


问题描述

运营商客户的计费库反应其入库程序很慢,应用方通过监控程序发现主要慢在对于几个表的insert操作上。按照我们的通常理解,insert应该是极快的,为什么会很慢呢?而且反应之前挺好的。这有点让我百思不得其解。通过检查event也并没有发现什么奇怪的地方,于是我通过10046 跟踪了应用的入库程序,如下应用方反应比较慢的表的insert操作,确实非常慢,如下所示:

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


我们可以发现,insert了4579条数据,一共花了27.41秒;其中有24.02秒是处于等待的状态。而且等待事件为顺序读.很明显这通常是索引的读取操作,实际上检查10046 trace 裸文件,发现等待的对象确实是该表上的2个index。


同时我们从上面10046 trace可以看出,该SQL执行之所以很慢,主要是因为存在了大量的物理读,其中4579条数据的insert,物理读为4534;这说明什么问题呢? 这说明,每插入一条数据大概产生一个物理读,而且都是index block的读取。很明显,通过将该index cache到keep 池可以解决该问题。 实际上也确实如此,通过cache后,应用反馈程序快了很多。


那么对该问题,这里其实有几个疑问,为什么这里的SQL insert时物理读如此之高? oracle的keep pool对于缓存对象的清理机制是如何的?

下面我们通过一个简单的实验来进行说明。


首先我们创建2个测试表,并创建好相应的index,如下所示:

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=

创建表和索引并插入数据

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=

从前面的信息我们可以看出,object_name上的index其实聚簇因子比较高,说明其数据分布比较离散。


接着我们现在将index都cache 到keep 池中,如下:

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=

这里需要注意的是,仅仅执行alter 命令是不够的,我们还需要手工将index block读取到keep池中,如下:

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=

第一次读取并检查

hWAAAAAElFTkSuQmCC


第二次读取并检查

hWAAAAAElFTkSuQmCC


第三次读取并检查

hWAAAAAElFTkSuQmCC

我们可以大致看出,db keep pool 也是存在LRU的,而且对于block的清除机制是先进先出原则。那么为什么前面的问题中,insert会突然变慢呢?

下面我们来进行3次insert 测试。


第一次

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


使用10046事件跟踪

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=

第二次

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


第三次

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


使用10046事件跟踪

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


从测试来看,随着表的数据越来越大,insert的效率会越来越低,也其实主要在于index的问题。我们可以发现,3次测试过程中,物理读越来越大,而且db file sequential read的等待时间分别从0.5秒,增加到0.56秒,最后增加到1.07秒。 为什么会出现这样的情况呢?

随着表数据的日益增加,导致表上的index也不断增大,同时index的离散度比较高,这样就导致每次insert时,oracle在进行index block读取时,可能在buffer cache中都无法命中相应的block;这样就会导致每次读取需要的index block时,可能都要进行物理读,这势必会导致性能问题的出现。同时默认的default buffer cache pool虽然也可以缓存index 块,但是也要同时缓存其他的数据块,这样很容易导致相关的index block被从buffer cache pool中移走。所以这也是前面为什么需要将index cache到keep 池的原因。


----the end



...............................................................................................................................

● 本文来自于微信公众号转载文章,若有侵权,请联系小麦苗及时删除,非常感谢原创作者的无私奉献

● 本文在itpub(http://blog.itpub.net/26736162)、博客园(http://www.cnblogs.com/lhrbest)和个人微信公众号(xiaomaimiaolhr)上有同步更新

● QQ群:230161599  微信群:私聊

● 原文地址:http://mp.weixin.qq.com/s?__biz=MjM5MDAxOTk2MQ==&mid=2650271710&idx=1&sn=77eb5c98304a0cca406def2e02347001&chksm=be4877c8893ffede9e0d1c727d9369dc600a7dfabdc984742bcf0efeaa669e91f8d1d1be21b0&scene=1&srcid=0920sbVTgv2XaoV3hE2ToaZ4#rd

● 小麦苗分享的其它资料:http://blog.itpub.net/26736162/viewspace-1624453/

● 小麦苗云盘地址:http://blog.itpub.net/26736162/viewspace-1624453/

● QQ群: 230161599   微信群:私聊

● 联系我请加QQ好友(642808185),注明添加缘由

●【版权所有,文章允许转载,但须以链接方式注明源地址,否则追究法律责任】

...............................................................................................................................

手机长按下图识别二维码或微信客户端扫描下边的二维码来关注小麦苗的微信公众号:xiaomaimiaolhr,免费学习最实用的数据库技术。




目录
相关文章
|
2月前
|
存储 NoSQL 分布式数据库
数据库革命来临:未来数据的超级英雄,新一代存储技术震撼登场!
【8月更文挑战第6天】随着信息技术的发展,数据成为核心资源。新一代数据库技术以高性能、高可扩展性和支持多种数据模型等特点,解决了传统系统处理大数据时的不足。主流技术包括NoSQL(如MongoDB)、NewSQL(如Google Spanner)和多模型数据库(如ArangoDB)。未来趋势将侧重更高性能、智能优化及强化数据安全,持续推动数据存储领域的创新与发展。
44 7
|
云安全 安全 Cloud Native
|
弹性计算 Java 数据库
第四届数据库大赛赛道2分布式NewSQL测试c++代码运行
第四届数据库大赛赛道2分布式NewSQL测试c++代码运行
140 0
第四届数据库大赛赛道2分布式NewSQL测试c++代码运行
|
弹性计算 Java 数据库
第四届数据库大赛赛道2分布式NewSQL测试代码运行
第四届数据库大赛赛道2分布式NewSQL测试代码运行
106 0
第四届数据库大赛赛道2分布式NewSQL测试代码运行
|
存储 Cloud Native 固态存储
赛题解析 | 第四届全球数据库大赛赛道2:分布式NewSQL性能挑战
第四届全球数据库大赛—PolarDB性能挑战赛,瓜分40万奖金池,只等你来!各赛道TOP10都可获得现金奖励
1467 0
赛题解析 | 第四届全球数据库大赛赛道2:分布式NewSQL性能挑战
|
SQL 缓存 运维
阿里研究员:线下环境为何不稳定?怎么破
为什么线下环境的不稳定是必然的?我们怎么办?怎么让它尽量稳定一点?
阿里研究员:线下环境为何不稳定?怎么破
|
弹性计算 Cloud Native 固态存储
40万奖金 | 阿里云天池开启第三届数据库性能大赛 广邀英才挑战创新上云
日前,“第三届数据库大赛--创新上云性能挑战赛”在阿里云天池官网正式开赛。据悉,本次大赛由阿里云、英特尔联袂主办,聚焦数据库核心技术场景,探索新介质极致性能,挑战海量数据高效上云,全程将有资深技术专家提供技术指导。
14132 0
40万奖金 | 阿里云天池开启第三届数据库性能大赛 广邀英才挑战创新上云
|
安全 云计算
2021阿里云.计算峰会|想构筑更快,更稳,更安全的云上网络?你不可错过!
本次峰会,我们为大家带来了四大亮点: 首秀:阿里云计算产品家族首次整体亮相 大咖:云上企业先锋分享实战经验 全面:技术、工具、服务、方法论的全面解读 深入:聚焦4大行业,从技术深入到行业解决方案 阿里云联手诸多行业先锋,揭秘云上企业的关键能力,探寻高效,稳定,安全,规范地成为一个云上企业的高速路径
1408 0
2021阿里云.计算峰会|想构筑更快,更稳,更安全的云上网络?你不可错过!
|
容灾 Oracle 关系型数据库
“征战”国内企业市场数十年,数据库已经走到分布式叉口
刚刚过去的 2020,对蚂蚁自研数据库产品 OceanBase 是一个丰收年
“征战”国内企业市场数十年,数据库已经走到分布式叉口
|
存储 新零售 关系型数据库
2019,数据库行业迎50年第二次巨变
一场数据库的世纪之战,在所难免。
2744 0
下一篇
无影云桌面