【暴侃IT圈】数据库索引导致的性能问题分析
来源:互联网 发布:如何做淘宝优惠券群主 编辑:程序博客网 时间:2024/05/21 17:07
本期和大家分享暴暴的一次性能调优经验,希望对大家有帮助。
0x00 被测系统描述
被测系统是若干个的web接口。测试方法是通过LoadRunner发送Http post/get请求,给被测接口加压。
0x01 遇到问题
先测试的前面几个接口,接口性能都很稳定。但是在最后一个接口测试的时候,发现性能出现下降,并且加压时间越长,TPS越低,性能越差。暴暴整个人都不好了。
0x02 分析方法
方法一:重启系统
对整个架构各个层次节点的服务器进行重启,但是问题仍然存在;
方法二:验证其他接口性能是否仍然稳定
发现有部分接口TPS明显下降,但是仍然有部分接口性能稳定。通过对比其他接口和问题接口在报文流转路径上的区别,初步定为是Oracle可能出现了问题。
方法三:Oracle数据库监控
对问题接口进行加压,同时监控Oracle,分析AWR报告。
0x03 定位问题
通过分析AWR报告,发现有一条SQL查询语句消耗的时间比较长
select 。。。from tablename where id2=4
查看tablename,发现id是主键,已经在主键上建立了索引。id2也是唯一的,但是id2上没有建立索引。
另外,统计tablename里的数据量,发现在加压前大约有1W条记录,截止到统计数据为止,已经积累了90W多条数据,数据量急剧增长。
因此初步确认问题原因是没有对id2建立索引,随着数据量增加,导致全表查询效率越来越低。
0x04 解决问题
在tablename表的id2列建立索引。
重新测试该问题接口,发现TPS明显提高,且稳定。
0x05 总结
本次性能调优过程,发现应用系统中如果根据某个条件进行查询,应该考虑是否需要在该列建立索引。
当然并不是建立越多索引,系统性能就越好,关于建立索引的度的问题,不在本文探讨范围,暴暴会在以后文章里专门介绍建立索引时需要考虑的事情。
【暴侃IT圈】
这可能是东半球最IN的公众号
- 【暴侃IT圈】数据库索引导致的性能问题分析
- 数据库建立索引前后的性能分析
- 外键无索引导致oracle数据库锁的经典问题
- 频繁分配释放内存导致的性能问题的分析
- 频繁分配释放内存导致的性能问题的分析
- 频繁分配释放内存导致的性能问题的分析
- 频繁分配释放内存导致的性能问题的分析
- 频繁分配释放内存导致的性能问题的分析
- 频繁分配释放内存导致的性能问题的分析
- 频繁分配释放内存导致的性能问题的分析
- 频繁分配释放内存导致的性能问题的分析
- 频繁分配释放内存导致的性能问题的分析
- 频繁分配释放内存导致的性能问题的分析
- 频繁分配释放内存导致的性能问题的分析
- 频繁分配释放内存导致的性能问题的分析
- 频繁分配释放内存导致的性能问题的分析
- 频繁分配释放内存导致的性能问题的分析
- 频繁分配释放内存导致的性能问题的分析
- iOS 实现Facebook的分享(调用系统的分享)
- MySQL数据库知识点归纳
- 人脸验证 DeepID 算法实践
- 干货!优秀程序员必备软件
- category的介绍与简单实用
- 【暴侃IT圈】数据库索引导致的性能问题分析
- 加班那点事(二)
- git常用命令
- 记一次内存泄露优化过程
- 关于服务号的模板消息发送接口种种
- 图解VC++开发ActiveX控件C#调用
- Android Studio 生成 Xutils3 注入的插件
- python_笔记3_list列表(有序集合)
- HTML 保留显示空格