【发布时间】:2019-06-01 12:28:59
【问题描述】:
我已经为这个问题苦苦挣扎了 2 天,但没有找到解决方案。
我以 10 秒的周期记录 mysql 慢查询。在日志文件中有一个巨大的条目与此语句:
# Thread_id: 222244 Schema: user QC_hit: No
# Query_time: 51.019708 Lock_time: 0.000119 Rows_sent: 1 Rows_examined: 13295012
# Rows_affected: 0
SET timestamp=1559388099;
SELECT (COUNT(*)) AS `count`
FROM statistics Statistics WHERE (id >= 1 AND ad_type <> 3);
这与 apache 请求的激增有关。 query_time 最多完成一分钟或更长时间,并导致我的服务器超载。 问题是我在我的 php 脚本中找不到导致慢查询的文件。
是否有任何命令行来查找相关文件。或者有什么快速的方法?
CREATE TABLE statistics` (
id bigint(20) unsigned NOT NULL AUTO_INCREMENT,
... ,
PRIMARY KEY (id),
KEY idx_uid (uid),
KEY idx_ip (ip),
KEY idx_cnid_uid (cid,uid),
KEY idx_rlid (rid),
KEY idx_created_uid (created,uid)
) ENGINE=InnoDB AUTO_INCREMENT=34015 DEFAULT CHARSET=utf8
【问题讨论】:
-
我试过这条线,还是不行:grep -HIi -rnw "Statistics" './public_html' |剪切 -d: -f1
-
你为什么将
statistics表别名为Statistics -
就我个人而言,我会连接一个适当的 PHP 分析器,然后简单地检查代码中时间花费的位置。但是,如果您想手动搜索,请尝试例如
'id >='、'ad_type <>'、Statstic->find、Statistics->find、Statstic->find('count'、Statstics->find('count'、paginate('Statstic'、paginate('Statstics'、paginate($this->Statistic、@ 987654334@... 通常是find('count'和->count(),因为CakePHP 核心在各个地方也会发出计数查询,例如在保存数据时。也可以尝试使用双引号而不是单引号。 -
并确保您的列被正确索引,这样一个简单的查询不应该花费任何大量时间,即使有数百万行。
-
请提供
SHOW CREATE TABLE statistics
标签: php mysql cakephp mariadb mysql-slow-query-log