MYSQL数据库服务器高iowait如何优化


本文摘自PHP中文网,作者一个新手,侵删。

一个数据库服务器高iowait的优化案例

1.开发反馈某一测试环境sql运行缓慢,而在其他测试环境该sql运行很快。两个环境其配置相同,均只部署了mysql服务器。

2.执行top命令发现sql运行缓慢的机器上磁盘iowait较sql运行较快的机器高出很多。推测这是导致sql运行缓慢的主因,因为该sql是要读取表,表较大,且要扫描的行数较多。

3.到底是什么导致机器iowait高呢,执行iotop发现消耗io的进程主要是mysql,而且主要是mysql上的读操作。

4.想必是有其他高频运行的查询语句不停从某大表中查询数据,且查询时可能使用不到索引,要扫描的表行数较多,从而导致高频io操作,致使其他需io操作的sql运行缓慢。

5.究竟是什么sql引起的呢?开启了general log,发现收集到的语句太多,且不能很好定位到高开销的sql。

6.开启slow log,long_query_time置为1,来捕获慢查询,同时使用pt-ioprofile用来追踪mysql数据文件中哪些文件上的io消耗比较多。

7.综合slow log(可使用pt-query-digest进行聚合)和pt-ioprofile的结果发现确实是两条典型的需要扫描全表的且对应的表非常大的sql频繁执行导致了磁盘的高io。

8.那么剩下的问题便是优化表或者查询了。最简单直接的是通过建合适的索引来提升查询性能,减少表扫描行数,需要继续榨取性能的话就是优化sql的写法,调整表结构,调整参数配置来解决了。

9.先从收益最大的方法入手,先评估sql语句,根据语句中的条件查看各个字段的数据分布情况,通过explain等评估在字段上创建索引或多列联合索引的合理性,并创建合适的索引。

10.最后发现建好索引后原来需要扫全表的语句通过索引可有效减少扫描行数,继而io操作减少了,服务器的iowait讲题,原来反馈的运行较慢的sql运行速度得以提升,但还是不够理想。

11.最后通过在该慢语句对应的表建索引,并修正where条件中使用错误的值类型极大的提升了sql语句运行速度,且服务器整体IO消耗大大降低。

12.可通过pt-query-digest聚合优化后mysql server产生的slow log以及使用pt-ioprofile分析优化后mysql数据文件io占用情况,可了解到优化前后的差异情况。

以上就是MYSQL数据库服务器高iowait如何优化的详细内容,更多文章请关注木庄网络博客

相关阅读 >>

后盾网mysql数据库视频教程资源推荐

一键重置mysql的root密码的实现脚本

hive和mysql的区别是什么

mysql为数据表及字段添加注释

mysql储存文字用什么

详解mysql基础语法的使用

c++连接使用mysql的方法

mysql中的join操作实例分享

mysql和sql是干什么的?

mysql数据库之数据表操作

更多相关阅读请进入《iowait》频道 >>


数据库系统概念 第6版
书籍

数据库系统概念 第6版

机械工业出版社

本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...