如何从许多小查询中找到较慢的MySQL查询

时间:2011-07-27 01:06:23

标签: mysql profiling

我想知道是否有人对我的情况有任何建议:

我有一个运行数万个查询的进程。整个过程需要5到10分钟。我想知道哪些查询的运行速度比其他查询慢,但我知道它们都没有运行超过5秒钟(有很多查询,这在我的日志中会非常明显)。我应该如何找出哪些花费最多的时间,如果经过优化,哪些会提供最佳效果?

更多细节:

我的查询运行单线程和同步,我会说70%SELECT和30%INSERT / UPDATE。我必须得到一些合作,并确定工作是否可以分成不同的单位,可以同时运行 - 我不确定...

所有查询都是简单的INSERT语句,单属性UPDATE语句,或主键或外键上的SELECT语句或双字段ANDed限制。

问题描述:

我所做的基本上是复制一个复杂的有向图结构。节点是数据库条目,并且邻接表示基本上是外键,但严格来说不是(它们可以是两个字段的组合,其中第一个表示第二个是id的表)。

3 个答案:

答案 0 :(得分:3)

看一下MySQL的slow query log。您可以配置被视为“慢”的阈值。

答案 1 :(得分:1)

基本上,您可以跟踪从查询开始到查询结束的时间,例如:

function getmicrotime() {
    list($usec, $sec) = explode(" ",microtime());
    return ((float)$usec + (float)$sec);
}

$query_start = getmicrotime();
$query = 'SELECT ...';
mysql_query($query, $connect); 
$query_end = getmicrotime();
if ($query_end - $query_start > 2) { 
    // add query to log
    your_slow_queries_logger($query);
}

我会为mysql_query函数制作某种包装器,以便记录慢速查询。

我个人使用syslog

记录我的慢查询

答案 2 :(得分:0)

如果您认真考虑优化MySQL,请阅读本书

High Performance MySQL: Optimization, Backups, Replication, and More

最新的MySQL版本的某些内容可能已经过时,但应该足够覆盖MySQL 5.1。它还有关于基准测试以及技术和方法的广泛章节,并指导您创建适合您需求的基准计划。

它还有关于索引和查询优化的章节,如果您需要优化使用基准标识的慢查询,这些章节对您非常有帮助。