在我的一个MySQL服务器上,我遇到了一个奇怪的情况。
mysqladmin status和SELECT * FROM information_schema.global_status清楚地表明,MySQL的负载大约为每秒1000个查询。top说,在这个8核系统上,MySQL服务器占用了大约250%的CPU .
但是如果我做了SHOW FULL PROCESSLIST,我只能在那里看到大约4到5个条目,并且查询非常快,只需不到1秒就能完成。如果我运行mytop,它将显示2-3的qps和相同的查询,而不是更多。
这怎么可能呢?什么可以从过程列表中被排除?
MySQL是5.6。
发布于 2017-11-24 09:41:23
SHOW FULL PROCESSLIST命令只显示当前正在运行的线程(如tcp连接)以及它们正在做什么。它只显示了4-5个条目,这意味着有4-5个并发连接。
这些连接很可能每秒处理200个小/简单的查询,从而运行每个查询需要0.005秒的时间。
如果您想确定正在发生的事情,还可以暂时启用通用查询日志,这样您就可以实际看到服务器运行的所有查询。
发布于 2017-11-24 18:53:19
有“延迟”和“吞吐量”。您有1000个qps吞吐量。在你饱和CPU核心或其他东西之前,你可以做几次这样的事情。
从客户端的角度来看,延迟是查询完成所需的时间。如果所有查询都需要5ms才能运行,并且您要发出1000/秒的命令:
0.005 sec/query * 1000 queries/sec = 5 queries in progress at any moment数字是合理的。
我会用long_query_time = 1 (第二个)打开慢速日志,并关注慢速日志--它最终会显示“最糟糕”的查询,也就是应该查看的查询。
https://stackoverflow.com/questions/47469756
复制相似问题