排查网站查询缓慢故障

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

变慢。
使用情况。
传 递、进 程 状 态 变 更 等。 因
对于该情况,首先查看系
在 返 回 信 息 中 看 到,对 为 MySQL 是一个支持多线程
统资源使用情况,检测其是 于 PID 为 28716 的 进 程 来 的数据库工具,因此需要对
否存在异常状态。执行“top” 说,在 其“kB_rd/s”列 中 显 其使用到的线程进行全面分
28716”命令,在返回信息中 表。进入该目录,执行“ls” 包括“union”查询或者子查
显示和 MySQL 相关的所有线 命令,可以显示相关的表文 询,在“table”列中显示数据
程的数据读取信息,可以看 件,索引文件,元数据文件和 表的名称,在“type”列中显
到 PID 为 21970 的线程正在 原信息文件等。
Trouble Shooting 故障诊断与处理 责任编辑:赵志远
■ 河南 刘进京
某 商 品 销 售 编者按 : 笔者遇到某网站出现查询缓慢的故障,这对单 操作,其读取的
网站出现了查询 位业务产生了很大影响,经分析发现,是 MySQL 慢查询的 速 率 和 上 述 执
该 网 站 采 用 了 Python 行 查 看,其 CPU 占 用 率 并 不 颈问题。
Flask 开 发,后 台 使 用 的 是 高。
但是,该进程为什么要去
MySQL 数据库,所有的商品信
根据以上分析,CPU 的使 读取大量的磁盘数据呢,这
息都存储在 MySQL 数据库中, 用情况还算比较正常,接下 很有可能和 MySQL 的慢查询
息,这 说 明 必 须 为 该 字 段 设
息 中 显 示 MySQL 打 开 了 很
对 于 MySQL 的 慢 查 询 来 置一个合适的前缀长度。
多的文件,根据上述文件描 说,如果没有设置好索引的
执 行“ C R E A T E
述符的编号,发现与其对应 话,很容易出现查询缓慢的 I N D E X p r o d u c t s _ i n d e x
用户或应用可以通过 MySQL 来 需 要 排 查 I/O 使 用 情 况, 有关。对于慢查询来说,其
接口,根据提供的商品信息, 检测问题是都磁盘的 I/O 瓶 造成的故障现象基本上都会
来查询对应的数据。但是过 颈有关。执行“iostat”命令, CPU 使用率过高的问题,一般
于缓慢的查询速度,让网站 根据返回信息,发现磁盘每 并不会引发 I/O 瓶颈。
接着需要找到究竟是什 调试和教学的 Linux 用户空
执行任意命令后,都会稍微 么进程造成了这么高的磁盘 间跟踪器。可以利用该命令
停顿一下才看到回应信息, 读 取 情 况。 执 行“pidstat 来监控用户空间进程和内核
可以明显察觉系统响应速度 -d 1”命令,显示进程的 I/O 的交互,比如系统调用、信号
命令,在返回信息中可以看 示较高的磁盘读取值,这说 析。
到,两个 CPU 的 iowait 值都 明该进程正在进行大量的读
执 行“strace -f -p
146 2019.11
责任编辑:赵志远 投稿信箱:netadmin@ 故障诊断与处理 Trouble Shooting
示 查 询 类 型,在“possible_
读 取 大 量 的 磁 盘 数 据,其 读
进 入 MySQL 控 制 台,执 keys”列 中 显 示 可 能 引 用
取的文件描述符编号为 91, 行“show global variables 的 索 引,这 里 为“NULL”。 在
接着需要查找与该编号对应 like "%datadir% ";”命令, “key”列 中 显 示 确 切 使 用
根据以上分析,这里并没
应的文件。执行“echo $?” 命 令,在 返 回 信 息 中 显 示 有使用索引,当扫描的行数
命令,得到的返回值为“1”, 当 前 的 用 户 名、主 机 名、使 很多时,自然会出现反应迟
这说明上述命令执行失败, 用 的 数 据 库 名 称、执 行 的 缓的问题。
因为只有返回“0”,才说明没 命 令 类 型,执 行 的 时 间、状
的文件。
可以看到 MySQL 当前正在使 的 索 引,这 里 为“NULL”。 在
执 行“lsof -p 21970” 用的数据库路径,这和上述 “rows”列 中 显 示 扫 描 的 行
命令,奇怪的是并没有返回 查 询 到 的 信 息 一 致。 执 行 数。
任何信息,说明没有找到对 “show full processlist;”
无法正常为外界提供服务。
秒的读取速率较高,I/O 使用
要 想 对 MySQL 读 取 数
率为 98%,几乎处于完全饱和 据情况进行分析,需要使用
故障排查
的状态。这表明磁盘的读取 到 Strace 命令。我们知道,
登录到 Web 服务器上,对 出现了瓶颈。
Strace 是一个可用于诊断、
系 统 状 态 进 行 检 测,发 现 当
缓慢的问题,当执 设置问题。
行“iostat”命
行商品信息查询
令检测到的数
时,需要等待十几秒才出现 比 较 高,尤 其 对 于 CPI0 来 值 基 本 一 致,该 PID 对 应 的
回应信息,这给用户正常访 说,其 iowait 的值已经超过 是“mysqld”进 程。 这 说 明
问带来了不便。
70%。但是对于各个进程进 “mysqld”进程引发了 I/O 瓶
看 来,只 要 为 其 配
有问题。这表明 MySQL 使用 态、执 行 的 语 句 等 信 息,例 置 好 索 引,问 题 就 可 以
了很多线程,仅仅使用其中 如 在“Command”列 中 显 示 解 决 了。 执 行“CREATE
一个线程号进行查询是没有 “query”,表示执行的额是查 INDEX products_index ON
办法找到目标文件的。
询操作,在“Info”列中显示 products(produceID);” 命
执 行“lsof -p 28716” 具体的查询语句。
令,为该表添加索引,但是出
命 令,使 用 MySQL 的 进 程
现“EEEOR 1170”的 错 误 信
的 PID 进 行 查 看,在 返 回 信 故障解决
相关文档
最新文档