背景
客户反馈最近一段时间数据库运行缓慢,磁盘的压力很大,现在有两种不同的分析结论,存储设备性能下降和数据库压力变大,请我们进行系统的分析,给一个结论。
现象







分析
解决
转到活动会话,查看当时正在执行的SQL语句, 大量的会话都存在PAGEIOLATCH_*相关的等待。PAGEIOLATCH_ *等待类型出现在数据从数据文件传输到缓冲区时。
等待越多说明大量的数据都不在缓冲区内。

该服务器配置 256GB 内存 , 分配给 缓冲区 230 GB,还出现如此严重的缓冲区空间不足,推断有一些SQL语句把大表整表的数据的数据都加载进缓冲区了。进入活动会话汇总 视图,按照逻辑读进行排序, 发现几类新上线的报表类SQL语句,因为缺少合适的索引导致几张大表的全表扫描,要把整表的数据存入缓冲区,造成了缓冲区的压力。创建合适索引后问题解决,所有指标都恢复正常。
经验
-
很多时候磁盘是被冤枉的,因为低效的SQL或者物理内存本身不足导致内存压力,从而把压力转嫁到磁盘上,分析时一定要全面, Page Life Expectancy和 Lazy writes /sec就是两个很重要的指标 。
-
磁盘压力不是非常大的情况下,SSD盘响应时间在5毫秒左右,机械盘在30毫秒左右。如果通过性能指标发现磁盘读、写的量不大,但是响应时间却很长,那么基本可以确定是磁盘的性能问题。
-
索引的重要性强调多少遍都不为过,70%的情况下通过优化索引就能解决性能问题。在和大量的技术人员交流过程中发现,对于索引的重要性恰恰没有足够的重视,一提到优化就是修改SQL语句、读写分离、分布式数据库等舍近求远的方案,索引才是对数据库最高性价比的优化手段。
北京格瑞趋势科技有限公司是聚焦于数据服务的高新技术企业,成立于2008年,创始团队及核心技术人员来自微软和雅虎。微软数据平台金牌合作伙伴,卫宁健康数据平台战略合作伙伴。通过产品+服务双轮驱动的业务模式,14年间累计服务4000+客户,覆盖互联网、市政、交通、电信、医疗、教育、电力、制造业等各个领域。
