Mysql - 当Linux服务器上的IO等待很高时查询很慢

Posted

技术标签:

【中文标题】Mysql - 当Linux服务器上的IO等待很高时查询很慢【英文标题】:Mysql - query is slow when IO on linux server wait is high 【发布时间】:2013-03-29 11:45:09 【问题描述】:

IO 等待高时查询慢。

从 iotop 命令显示

-- TID -- PRIO -- 用户 -- 磁盘读取 -- 磁盘写入 -- SWAPIN -- IO> -- 命令

-- 2311 -- be/4 -- mysql -- 0.00 B/s -- 0.00 B/s -- 0.00% -- 96.25% -- mysql~l.sock

-- 2311 -- be/4 -- mysql -- 0.00 B/s -- 0.00 B/s -- 0.00% -- 96.25% -- mysql~l.sock

-- 2311 -- be/4 -- mysql -- 0.00 B/s -- 0.00 B/s -- 0.00% -- 96.24% -- mysql~l.sock

高 IO 等待从下午 6:13:28 到下午 6:13:29(sar 命令)开始

--------------------- CPU -- %usr -- %nice -- %sys -- %iowait -- %steal

-- 下午 6:13:28 --- 所有 ----- 2.53 --- 0.00 ---- 2.02 ----- 39.39 ------ 0.00

-- 下午 6:13:29 --- 所有 ----- 1.99 --- 0.00 ---- 1.00 ----- 49.25 ------ 0.00

这段时间的查询速度很慢

时间:130329 18:13:29

用户@主机:wdwdwd[wdwdwd]@本地主机[]

Query_time: 2.007902 Lock_time: 0.000025 Rows_sent: 0 Rows_examined: 1 SET timestamp=1364555609;

UPDATE log_product SET credit=credit+1 WHERE id_product='349721228' and id_user='2021841' LIMIT 1;

## 问题是如何修复这个过程。真正的原因是什么? ##

【问题讨论】:

我得到了类似的东西 - 高 iowait、非常低的 CPU 和缓慢的响应。我怀疑 InnoDB 有什么奇怪的地方。您使用的是哪个 MySQL 版本? 【参考方案1】:

您在“Log_Product”表上是否有一个索引(id_user,id_product)作为单个索引,而不是两个索引,每列一个。此外,如果字段是数字,则不需要引号...

【讨论】:

我有 id_user 和 id_product 的索引,并且每个都有一个索引

以上是关于Mysql - 当Linux服务器上的IO等待很高时查询很慢的主要内容,如果未能解决你的问题,请参考以下文章

Linux 查看磁盘 查看磁盘IO并找出占用 并找出占用IO读写很高的进程

如果是MySQL引起的CPU消耗过大,如何优化?

Tomcat在Linux服务器上的BIONIOAPR模式设置

mysql占用磁盘IO过高的解决办法

linux cpu占用率很高

如何检查linux服务器cpu,内存性能