如何在共享主机MySQL中记录慢查询?

时间:2010-04-17 17:59:12

标签: php mysql optimization query-optimization shared-hosting

我有一个共享主机,我有我的网站和MySQL数据库。 我已经安装了一个用于统计的开源脚本(phpMyVisites),并且它最近开始工作得非常慢。它是使用某种框架编写的,并且有许多PHP文件。 我知道要查找慢查询,我可以在MySQL中使用慢查询日志功能。但是在这个共享主机上我不能使用这种方法因为我无法改变my.cnf。我不想将我的统计脚本更改为其他脚本,我不想乱用此脚本的所有文件来找出将诊断代码手动记录到哪里的诊断代码。我想在不改变PHP代码的情况下这样做。

所以我的问题是:

如何记录这些编码中的慢查询?:

  • 无法更改my.cnf以启用慢查询日志
  • 无法将统计信息脚本更改为其他
  • 不知道如何编写scrpt以及发出mysql命令的位置
  • 无法向我的提供商询问慢查询日志

有简单,方便,快捷的方法吗?

4 个答案:

答案 0 :(得分:4)

嗯,也许创建一个函数来检查sql查询在返回值之前花了多长时间?然后,如果它超过指定的数量记录它...例如在PHP我会这样做

$before = time();
//run your query
$after = time();
$difference = $after - $before
if($difference > 5000)
   //Log query

模仿slog查询记录器,我不认为这是在共享主机上启用它的方法。

希望这会有所帮助:)

答案 1 :(得分:3)

我快速浏览了phpMyVisites。在config.inc.php中,我发现了以下内容:

// Other
if(!defined('DEBUG')) define('DEBUG', false);
define('DEFAULT_ACTION', false);

error_reporting( E_ALL );

if(DEBUG)
{
    define('PRINT_TIME', false);
    define('PRINT_QUERY_COUNT', true);
    define('SAVE_DB_LOG', true);
    define('PRINT_QUERY', true);
} 

我怀疑SAVE_DB_LOG可能是一个很好的起点,所以我会尝试打开DEBUG模式。

答案 2 :(得分:2)

是否将数据转储传输到本地测试系统,您可以在其中激活慢速查询日志选项?

答案 3 :(得分:0)

您可以在慢速脚本运行时编写一个监视mysql processlist的脚本。