1, MySQL数据库当出现慢查询,是比较危险的,一旦有其他的DDL操作,可能会造成整个数据库的等待
可以分以下几种情况:
当表是MyiSAM表,对表有慢查询,不阻塞选择、对该表的其他DML、DDL操作都会被阻塞,比如出现车站等表级锁,数据库中一定不能还存在MyiSAM表
当表是Innodb表,当表上有慢查询,不阻塞选择和DML,其他的DDL操作都会被阻塞,比如出现等待表元数据锁
综上,当数据库中存在慢查询时,是比较危险的,当执行备份,创建索引,alter 表,冲表等操作时就会造成数据库的等待
解决办法:
1,对数据库中执行时间较长的选择进行监控,并及时报警
2,如果允许的话,写脚本,发现较长语的选择句,直接杀,并记录日志中
- b,——batch ,,,,不要# 39;t使用历史文件。禁用互动行为只,
- s,——silent ,,,更沉默。打印结果与一个标签分隔符,每一行> # !/bin/bash for 小姐:“拷贝mysql -Bse & # 39; show full processlist& # 39;, |, grep 小姐;select | grep 我;“Waiting |, awk , & # 39; {print 1美元}& # 39;” 做 ,,,,,,,mysql -Bse “kill ,我美元; 以前做>
显示processlist的命令的状态有很多,其中查询代表正在执行的命令
<强> Query :线程执行一个语句。强>
猫killLongQuerySession。sh
,mysqladmin processlist ——verbose | grep & # 39;查询# 39;| awk -F “|”, & # 39; {print 7美元,2美元,9美元}& # 39;| sort -rn k1
参考:https://blog.51cto.com/jim123/1836712
https://dev.mysql.com/doc/refman/5.7/en/show-processlist.html https://dev.mysql.com/doc/refman/5.7/en/thread-commands.html