MySQL查找占用CPU、MEMORY比较高的SQL

本文介绍了如何使用系统PID结合MySQL的性能模式来定位占用CPU资源和内存较高的SQL语句。通过`top -p mysqlpid -H`获取线程ID,再结合`performance_schema.threads`和`performance_schema.events_statements_current`表,可以查找到具体的SQL语句。例如,当系统PID为2966且CPU占用率为97%时,可以找到对应的thread_id和SQL内容。
摘要由CSDN通过智能技术生成

通过top -p mysqlpid -H  可以找到thread_os_id ->

                                            通过thread_os_id 和  performance_schema.threads 找到thread_id ->

                                             通过thread_id和performance_schema.events_statements_current 找到sql语句

[root@node2 ~]# ps -ef | grep -i mysql
mysql     2296  1211 18 14:17 ?        00:03:46 /home/db/mysql/product/bin/mysqld --basedir=/home/db/mysql/product --datadir=/mysqldata/data --plugin-dir=/home/db/mysql/product/lib/plugin --user=mysql --log-error=/mysqldata/logs/mysql_error.log --pid-file=/mysqldata/data/mysqld.pid --socket=/home/db/mysql/product/mysql.sock --port=13306

[root@node2 ~]# top -p 2296 -H
top - 14:59:55 up 42 min,  4 users,  load average: 0.41, 0.81, 1.39              
Threads:  67 tota
查找占用磁盘资源比较SQL,可以使用 MySQL 的性能分析工具——`pt-query-digest`,它可以分析 MySQL 的慢查询日志,生成报告并展示 SQL 查询的详细信息。 以下是使用 `pt-query-digest` 工具查找占用磁盘资源比较SQL 的步骤: 1. 确保 MySQL 的慢查询日志已经开启,并记录了足够的历史记录。 2. 执行以下命令对慢查询日志进行分析: ``` pt-query-digest /var/lib/mysql/slow.log ``` 这里假设慢查询日志文件路径为 `/var/lib/mysql/slow.log`,你需要将其替换为实际的慢查询日志文件路径。 3. 分析报告会展示所有的 SQL 查询及其详细信息,你可以根据磁盘 IO 使用情况来找出占用磁盘资源比较SQL,例如: ``` # Profile # Rank Query ID Response time Calls R/Call Apdx V/M Item # ==== ======== ================ ===== ====== ==== ===== ==================== # 1 0x 12.4513 14.2% 3470 0.0036 0.00 SELECT `id`, `name`, `email`, `status`, `created_at`, `updated_at` FROM `users` WHERE `status` = 1 ORDER BY `created_at` DESC LIMIT 10 # 2 0x 10.2039 11.7% 511 0.0200 0.00 SELECT `id`, `name`, `email`, `status`, `created_at`, `updated_at` FROM `users` WHERE `status` = 2 ORDER BY `created_at` DESC LIMIT 10 # 3 0x 9.3122 10.7% 14851 0.0006 0.00 SELECT `id`, `name`, `email`, `status`, `created_at`, `updated_at` FROM `users` WHERE `status` = 0 ORDER BY `created_at` DESC LIMIT 10 # 4 0x 6.3059 7.2% 12472 0.0005 0.00 SELECT COUNT(*) FROM `users` WHERE `status` = 0 # 5 0x 5.9732 6.8% 11501 0.0005 0.00 SELECT COUNT(*) FROM `users` WHERE `status` = 1 ``` 在这个例子中,第一条 SQL 查询占用CPU 时间 14.2%,排名第一,可以考虑调整查询语句或者增加索引来优化性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值