- 1、 select * from information_schema.processlist where command !='sleep' and user !='system user'\G;
查询数据库用户正在执行的sql
命令的输出结果显示了有哪些线程在运行,可以帮助识别出有问题的查询语句,然后kill掉。
这个命令中最关键的就是state列,mysql列出的状态主要有以下几种:
Locked
被其他查询锁住了。
Sending data
正在处理Select查询的记录,同时正在把结果发送给客户端。Sending data”状态的含义,原来这个状态的名称很具有误导性,所谓的“Sending data”并不是单纯的发送数据,而是包括“收集 + 发送 数据”。
Sleeping
正在等待客户端发送新请求.
Updating
正在搜索匹配的记录,并且修改它们。
Waiting for tables
该线程得到通知,数据表结构已经被修改了,需要重新打开数据表以取得新的结构。然后,为了能的重新打开数据表,必须等到所有其他线程关闭这个表。以下几种情况下会产生这个通知:FLUSH TABLES tbl_name, Alter TABLE, RENAME TABLE, REPAIR TABLE, ANALYZE TABLE,或OPTIMIZE TABLE。查询时间过长也会导致CPU飙高,临时kill掉就行了 - 2、开启慢查询。
slow-query-log = on
slow-query-log-file = /data/logs/mysql/mysql_slow.log
long_query_time = 3
对于MySQL排查问题找出性能瓶颈来说,最容易发现并解决的问题就是MYSQL的慢查询以及没有得用索引的查询。
通过慢查询日志找出执行时间长的sql,并通过添加索引或者定期truncate表(在不影响生产业务的情况下)。 这种比较常见,通常是由于查询数据量过大导致服务器负载过大或者没有添加索引导致查询缓慢引起的,这种一般配合开发把索引添加上就行了。 - 3、通过查看mysql日志排查 通过日志后台发现频繁执行判断是否建表的操作,经过排查,是开发把此sql放在了硬件服务器代码上,而代码的作用是 每当用户通过APP向硬件服务器发送指令的时候都执行此sql,而这个sql我们是按月份建表的,但是现实是每次用户发送指令都执行此操作。!!!这样做既增加了数据库服务器的负载又导致mysql日志记录大量无用操作。 然后我要求开发把这个sql删了, 我手动花了10秒建了1年的表(或者可以不创建 定期清理下也可以的)。不然没有这个表会导致sql报错。。。。
您还未添加分享代码,请到主题选项中,添加百度分享代码!
您可以选择一种方式赞助本站
支付宝转账赞助
支付宝扫一扫赞助
微信钱包扫描赞助