要查看MySQL的性能统计信息并找出是什么连接或请求导致MySQL占用100%的CPU,您可以采取以下步骤:

1. 查看当前运行的查询

登录到MySQL服务器,使用以下命令查看当前活跃的查询和它们的状态:

   SHOW FULL PROCESSLIST;

这个命令会列出所有当前正在运行的进程,包括每个进程执行的SQL语句和运行时间。

2. 使用性能模式

如果您的MySQL版本支持,可以打开性能模式(Performance Schema)来收集详细的性能数据。开启后,您可以查询性能模式的各种表来分析性能问题。

3. 查看慢查询日志

如果您之前已经开启了慢查询日志,可以通过查看慢查询日志来找出运行缓慢的查询。慢查询日志中会记录执行时间超过指定阈值的查询。您可以通过以下命令来查看慢查询日志的配置:

会话变量

SHOW VARIABLES LIKE '%slow_query_log%';

全局变量

SHOW GLOBAL VARIABLES LIKE '%slow_query_log%';

如果慢查询日志已开启,您可以找到日志文件并检查里面的内容。

如果慢日志为关闭则会输出

MariaDB [(none)]> SHOW VARIABLES LIKE '%slow_query_log%';
+---------------------+-----------------------+
| Variable_name       | Value                 |
+---------------------+-----------------------+
| slow_query_log      | OFF                   |
| slow_query_log_file | b209f58a1af5-slow.log |
+---------------------+-----------------------+
2 rows in set (0.001 sec)

开启慢查询日志

您可以通过以下命令临时开启慢查询日志(只在当前会话有效):

   SET GLOBAL slow_query_log = 'ON';

如果您想永久开启慢查询日志,需要在MySQL的配置文件(通常是my.cnfmy.ini)中设置:

   [mysqld]
   slow_query_log = 1
   slow_query_log_file = /path/to/your/log-file-name-slow.log
   long_query_time = 2

其中long_query_time是慢查询的阈值,单位是秒,您可以根据需要设置。这里设置为2表示记录所有执行时间超过2秒的查询。

重启MySQL服务

如果您修改了配置文件,需要重启MySQL服务来使更改生效。在Docker容器中,您可以使用以下命令重启MySQL服务:

   docker restart <container_name_or_id>

请将<container_name_or_id>替换为您的容器名称或ID。

监控慢查询日志

开启慢查询日志后,您可以使用以下命令查看慢查询日志中的内容:

   docker exec -it <container_name_or_id> tail -f /path/to/your/log-file-name-slow.log

或者,如果您有宿主机上的文件访问权限,您可以直接在宿主机上使用tail命令来跟踪日志文件。

手动触发慢查询,谨慎使用,会异常占用

SELECT BENCHMARK(1000000000, ENCODE('message', 'password'));

分析慢查询日志

一旦慢查询日志中有了数据,您可以分析这些查询,找出哪些查询执行时间长,是否有可以优化的地方。优化可能包括添加或修改索引、改写查询语句、调整数据库配置参数或者优化表结构。

开启慢查询日志可能会略微增加系统负载,因为它需要记录额外的数据。在问题解决后,您可以根据实际情况决定是否关闭慢查询日志。

4. 使用EXPLAIN分析查询执行计划

对于发现的慢查询,您可以使用EXPLAINEXPLAIN ANALYZE(MySQL 8.0.18及以上版本)命令来查看查询的执行计划,这有助于您了解MySQL是如何执行这些查询的,以及是否可以通过索引优化等方式来提升性能。

5. 检查InnoDB引擎状态

您可以使用以下命令来获取InnoDB存储引擎的详细状态信息:

   SHOW ENGINE INNODB STATUS;

这个命令会输出当前InnoDB存储引擎的状态,包括锁等待、I/O信息和缓冲池状态等。

6. 使用第三方工具

您还可以使用第三方的性能分析工具,如Percona Toolkit中的pt-query-digest来分析慢查询日志,或者使用MySQL Workbench等图形界面工具来辅助分析。

最后修改:2024 年 11 月 06 日
如果觉得我的文章对你有用,请随意赞赏