我正在使用 MySQL 5.5.25 服务器和 InnoDB 作为我的数据库。
由于 mysqld 进程大约一分钟,服务器的 CPU 经常以 100% 的速度工作。使用 SHOW PROCESSLIST:
Command | Time | State | Info
Query | 100 | Sending data | SELECT a.prefix, a...
Query | 107 | Sending data | SELECT a.prefix, a...
Query | 50 | Sending data | SELECT a.prefix, a...
有问题的查询是:
SELECT a.prefix, a.test_id, a.method_id, b.test_id
FROM a
LEFT JOIN b ON b.test_id = a.test_id
AND user_id = ?
AND year = ?
所有这些列都已编入索引,因此这不是问题。此外,当我在 phpMyAdmin 中运行查询(具有足够的 LIMIT)时,需要 0.05 秒才能完成。此外,令人沮丧的是,我发现自己无法重现此问题,即使同时执行此查询两次并发送垃圾邮件只会使我的 CPU 达到 40% 的峰值。
使用 EXPLAIN 为查询添加前缀会导致:
Id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra
1 | SIMPLE | a | ALL | NULL | NULL | NULL | NULL | 1169 |
1 | SIMPLE | b | ref | user_id,year,test_id | test_id | 4 | db.a.test_id | 58 |
除非我看不到我面前的东西,否则我正在寻找方法来发现如何调试此类问题。我确实已经记录了所有查询及其执行时间以及它们的值等。但是由于我无法重现它,所以我被卡住了。我应该怎么做才能弄清楚这个问题是关于什么的?