我想知道是否有人对我的情况有任何建议:
我有一个运行数万个查询的进程。整个过程需要5到10分钟。我想知道哪些查询的运行速度比其他查询慢,但我知道它们都没有运行超过5秒钟(有很多查询,这在我的日志中会非常明显)。我应该如何找出哪些花费最多的时间,如果经过优化,哪些会提供最佳效果?
更多细节:
我的查询运行单线程和同步,我会说70%SELECT和30%INSERT / UPDATE。我必须得到一些合作,并确定工作是否可以分成不同的单位,可以同时运行 - 我不确定...
所有查询都是简单的INSERT语句,单属性UPDATE语句,或主键或外键上的SELECT语句或双字段ANDed限制。
问题描述:
我所做的基本上是复制一个复杂的有向图结构。节点是数据库条目,并且邻接表示基本上是外键,但严格来说不是(它们可以是两个字段的组合,其中第一个表示第二个是id的表)。
答案 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。它还有关于基准测试以及技术和方法的广泛章节,并指导您创建适合您需求的基准计划。
它还有关于索引和查询优化的章节,如果您需要优化使用基准标识的慢查询,这些章节对您非常有帮助。