知识大全 单条查询问题还是服务器问题(2)

Posted 吞吐量

篇首语:读过一本好书,像交了一个益友本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 单条查询问题还是服务器问题(2)相关的知识,希望对你有一定的参考价值。

高性能MySQL:单条查询问题还是服务器问题(2)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

   单条查询问题还是服务器问题( )

  使用SHOW PROCESSLIST 命令时 在尾部加上\\G 可以垂直的方式输出结果 这很有用 因为这样会将每一行记录的每一列都单独输出为一行 这样可以方便地使用sort|uniq|sort 一类的命令来计算某个列值出现的次数

  $ mysql e SHOW PROCESSLIST\\G | grep State: | sort | uniq c | sort rn

   State:

   State: Sending data

   State: freeing items

   State: NULL

   State: end

   State: Updating

   State: cleaning up

   State: update

   State: Sorting result

   State: logging slow query

  如果要查看不同的列 只需要修改grep 的模式即可 在大多数案例中 State 列都非常有用 从这个例子的输出中可以看到 有很多线程处于查询执行的结束部分的状态 包括 freeing items end cleaning up 和 logging slow query 事实上 在案例中的这台服务器上 同样模式或类似的输出采样出现了很多次 大量的线程处于 freeingitems 状态是出现了大量有问题查询的很明显的特征和指示

  用这种技术查找问题 上面的命令行不是唯一的方法 如果MySQL 服务器的版本较新 也可以直接查询INFORMATION_SCHEMA 中的PROCESSLIST 表 或者使用innotop 工具以较高的频率刷新 以观察屏幕上出现的不正常查询堆积 上面演示的这个例子是由于InnoDB 内部的争用和脏块刷新所导致 但有时候原因可能比这个要简单得多 一个经典的例子是很多查询处于 Locked 状态 这是MyISAM 的一个典型问题 它的表级别锁定 在写请求较多时 可能迅速导致服务器级别的线程堆积

  使用查询日志

  如果要通过查询日志发现问题 需要开启慢查询日志并在全局级别设置long_query_time 为 并且要确认所有的连接都采用了新的设置 这可能需要重置所有连接以使新的全局设置生效 或者使用Percona Server 的一个特性 可以在不断开现有连接的情况下动态地使设置强制生效

  如果因为某些原因 不能设置慢查询日志记录所有的查询 也可以通过tcpdump 和ptquery digest 工具来模拟替代 要注意找到吞吐量突然下降时间段的日志 查询是在完成阶段才写入到慢查询日志的 所以堆积会造成大量查询处于完成阶段 直到阻塞其他查询的资源占用者释放资源后 其他的查询才能执行完成 这种行为特征的一个好处是 当遇到吞吐量突然下降时 可以归咎于吞吐量下降后完成的第一个查询(有时候也不一定是第一个查询 当某些查询被阻塞时 其他查询可以不受影响继续运行 所以不能完全依赖这个经验)

  再重申一次 好的工具可以帮助诊断这类问题 否则要人工去几百GB 的查询日志中找原因 下面的例子只有一行代码 却可以根据MySQL 每秒将当前时间写入日志中的模式统计每秒的查询数量

  $ awk /^# Time:/print $ $ c;c= /^# User/c++ slow query log

   : :

   : :

   : :

   : :

   : :

   : :

   : :

   : :

   : :

   : :

   : :

   : :

  从上面的输出可以看到有吞吐量突然下降的情况发生 而且在下降之前还有一个突然的高峰 仅从这个输出而不去查询当时的详细信息很难确定发生了什么 但应该可以说这个突然的高峰和随后的下降一定有关联 不管怎么说 这种现象都很奇怪 值得去日志中挖掘该时间段的详细信息(实际上通过日志的详细信息 可以发现突然的高峰时段有很多连接被断开的现象 可能是有一台应用服务器重启导致的 所以不是所有的问题都是MySQL 的问题)

  理解发现的问题(Making sense of the findings)

  可视化的数据最具有说服力 上面只演示了很少的几个例子 但在实际情况中 利用上面的工具诊断时可能产生大量的输出结果 可以选择用gnuplot或R 或者其他绘图工具将结果绘制成图形 这些绘图工具速度很快 比电子表格要快得多 而且可以对图上的一些异常的地方进行缩放 这比在终端中通过滚动条翻看文字要好用得多 除非你是 黑客帝国 中的矩阵观察者

  我们建议诊断问题时先使用前两种方法 SHOW STATUS和SHOW PROCESSLIST 这两种方法的开销很低 而且可以通过简单的shell脚本或者反复执行的查询来交互式地收集数据 分析慢查询日志则相对要困难一些 经常会发现一些蛛丝马迹 但仔细去研究时可能又消失了 这样我们很容易会认为其实没有问题

  发现输出的图形异常意味着什么?通常来说可能是查询在某个地方排队了 或者某种查询的量突然飙升了 接下来的任务就是找出这些原因

       返回目录 高性能MySQL

       编辑推荐

       ASP NET开发培训视频教程

  数据仓库与数据挖掘培训视频教程

cha138/Article/program/MySQL/201311/29702

相关参考

知识大全 剖析单条查询(2)[2]

高性能MySQL:剖析单条查询(2)[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  使用S

知识大全 剖析单条查询(1)[2]

高性能MySQL:剖析单条查询(1)[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  |ch

知识大全 剖析单条查询(2)[1]

高性能MySQL:剖析单条查询(2)[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  剖析单

知识大全 剖析单条查询(3)[2]

高性能MySQL:剖析单条查询(3)[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  另外也

知识大全 剖析单条查询(1)[1]

高性能MySQL:剖析单条查询(1)[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  剖析单

知识大全 剖析单条查询(3)[1]

高性能MySQL:剖析单条查询(3)[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  剖析单

知识大全 oracle多表查询与子查询

  (一)子查询select*fromtableA  whereidoperator(select*fromtableAawhereaid=)  operaor  单条记录子查询(

知识大全 Oracle临时表空间过大问题解决

Oracle临时表空间过大问题解决  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  查询数据库服务

知识大全 数据查询语句[2]

    ——此文章摘自《网络游戏服务器端编程》定价¥ 特价¥详细>>//tracklinktechcn/?m_id=dangdang&a_i

知识大全 我在百度提了问题,请问在哪里查询答案

我在百度提了问题,请问在哪里查询答案去“我的知道”然后点“我的提问”就可以看见你的提问以及回答情况我在百度里提了问题该怎样找答案百度右上角“登陆”―“我的知道”―“我的提问”我在百度里面了问题在哪看答