如何追踪有问题的MySQL查询?

时间:2011-05-27 08:17:51

标签: mysql query-optimization

我使用MySQL(确切地说是Percona ExtraDB 5.1)作为我选择的数据库。总体而言,对性能印象非常深刻。使用它的应用程序非常大。

我们认为,无论出于何种原因(即内存/缓冲区),查询有时会导致数据库上的线程备份。服务器已被无数次调整以防止这种情况,所以现在它确实是1%的问题,但仍然非常烦人。除非您每周7天,每天24小时监视数据库服务器,否则您不太可能看到备份的原因。

是否有任何建议(除了通过慢速查询日志),任何人都可以建议跟踪有问题的查询(即通过应用程序报告)?

3 个答案:

答案 0 :(得分:0)

正如您在问题中指出的那样,最好的选择是慢查询日志:

http://dev.mysql.com/doc/refman/5.5/en/slow-query-log.html

您可能还想在应用级别记录此内容:

在脚本开头,记下您要做什么以及何时开始。如果处理请求所花费的时间高于某个阈值,则记录此信息。

这样,您将能够识别有问题的查询序列而不是单个查询。 (顺便说一下,这可能表明没有单个查询是缓慢的,但有些请求可能会引发大量的小查询。)

答案 1 :(得分:0)

带有XtraDB的Percona Server实际上以微秒分辨率记录时间戳和执行时间,因此您可以精确地找到查询的开始和结束。但是,日志分析可能是错误的方法。您可能需要使用Aspersa的stalk + collect工具。

答案 2 :(得分:0)

查看this script,它允许您提取导致问题的查询的更抽象的表示。

我通常按频率和运行时的乘积对列表进行排序,以获得导致问题最多的查询。

NB记录查询的实际开始和结束与测量实际导致锁定的查询无关 - 从手册“获取初始表锁的时间不算作执行时间”

你只需要解决缓慢的问题。