在非常简单的查询上过多的资源使用

时间:2017-06-11 22:43:27

标签: php mysql

我不确定是否需要担心这一点,但我想确保我的脚本不是在窃听mysql或其他东西。

我每隔30秒收到一封来自lfd的电子邮件,我在php中使用mysql中的查询运行脚本。

session_start();
include('connect.php');

$sql = "SELECT * FROM table WHERE (dest_id = '".$_SESSION['session_user_id']."' OR dest_id = '0') AND user_id != '".$_SESSION['session_user_id']."' AND `read` = 0 AND org_code = '".$_SESSION['session_org_code']."'";
$result = $GLOBALS['db']->query($sql);
echo $result->num_rows;

我手动运行时的查询似乎运行得非常快。

来自lfd的电子邮件说

Time:         Fri Jun  9 01:20:55 2017 -0700
Account:      ********
Resource:     Process Time
Exceeded:     719621 > 1800 (seconds)
Executable:   /usr/bin/php
Command Line: /usr/bin/php /home/myname/public_html/example/includes/inbox_total.php
PID:          17579 (Parent PID:16310)
Killed:       No

我的理解是Exceeded: 719621 > 1800 (seconds)表示我的脚本需要719621秒才能运行?

是否需要担心,如果有问题,我可以用它来查找问题?

1 个答案:

答案 0 :(得分:2)

了解这是否准确的最佳方法:打开慢速查询日志(如果您可以访问MySQL配置)。这肯定会告诉你更多细节。对于一个看起来很快花费很长时间的查询来说,这并不是一件容易的事。如果这是一个也经常被写入的表,那么由于在等待写入时无法读取,您最终可能会挂起MySQL(或者至少冻结一个特定的事务)。这在很大程度上取决于您使用的MySQL存储引擎,负载的可变性以及其他一些难以预测的因素。我以前肯定遇到过这个问题,而且最终确实存在一些问题,我的查询工作正常,但在高负载时间,意外的流量高峰或其他我无法控制的事情中陷入困境。后者尤其可能是在运行控制不佳的VPS上运行(在这种情况下,由托管公司控制得不好:配置不当的虚拟主机,VPS可以吸收CPU资源"专用"到另一个VPS ,对你不利。)

这可能吗?绝对。你怎么办?取决于根本问题:流量高峰,VPS分配不佳等。有时可能需要大量挖掘才能找到问题的根源。

一个直接的问题可能是没有适当索引的大表。实际上不可能索引OR条件,所以我实际上可以说没有看到你的查询没有使用索引的任何其他内容。如果这个表甚至有几千个记录,在错误的负载条件下,它很容易变成一个超慢的查询,特别是如果你通常写入表并使用MyISAM。

虽然没有更多细节,但这只是在黑暗中拍摄的。