数据库IO高,可能是语法问题、数据库配置问题等
排查语句
Linux - iostat
此命令给出丰富的IO状态数据,一般用这个来查看是否存在性能瓶颈。 关于 CPU 的指标,重点看 %iowait 和 %idle 两个指标。
- %iowait:CPU 等待输入输出完成时间的百分比;
- %idle:CPU 空闲时间百分比。
若%iowait 的值过高,则表示硬盘存在 I/O 瓶颈;若 %idle 值高,表示 CPU 较空闲。如果 %idle 值高但系统响应慢时,有可能是 CPU 等待分配内存,此时应加大内存容量。%idle 值如果持续低于 10,那么系统的 CPU 处理能力相对较低,表明系统中最需要解决的资源是 CPU。
Linux - iotop
可以看到当前哪些进程在读写磁盘,以及读写速率和IO使用占比。
Mysql - 慢查询
show processlist;
看下是否有锁表 或 等待 情况
附上常见的日志位置:
|
|
可能影响IO的数据库配置
日志写入磁盘相关参数
sync_binlog:在提交事务之前将二进制日志同步到磁盘。这是最安全的设置,但是会造成磁盘的较高占用。- 0:依赖于操作系统而非Mysql服务器不时将二进制日志刷新到磁盘
- 1:每次提交之前都同步
- N:收集一组后,同步
innodb_flush_log_at_trx_commit:日志会在每次事务提交时写入并刷新到磁盘。- 0:每秒为单位
- 1:每次事务提交时
- N:在每次事务提交后写入日志,并每秒刷新一次到磁盘
上述两个参数设置为1时最安全,但是会牺牲性能。所以,在设置前要进行安全和性能之间的权衡。
内存等待参数
|
|