按MySQL中执行时间反向排序
mysqladmin processlist --verbose |grep 'Query'|awk -F "|" '{print $7 $2 $9}'|sort -rn -k1
杀死执行时间过长的session
cat killLongQuerySession.sh 杀掉执行时间超过300的session
#!/bin/bash
executetime=(`mysql -Bse 'show processlist'| grep 'Query'|awk '{print $6 " " $1}'|sort -rn|head -1`) #第6列是运行时间,第一列为session id
time=${executetime[0]}
id=${executetime[1]}
while :
do
maxtime=300
if [ $time -gt $maxtime ] ; then
echo $time $id >> /tmp/killqueryid.log
mysql -Bse "kill $id"
#else
# echo $time $id
fi
sleep 10 #睡眠10s
done
-- cat killWaitSession.sh 杀掉等待select中有Waiting的会话
#!/bin/bash
for i in `mysql -Bse 'show full processlist' | grep -i select |grep -i "Waiting | awk '{print $1}'`
do
mysql -Bse "kill $i"
done
mysql连接相关:
SHOW PROCESSLIST; ##所有的连接信息
show status like '%max_connections%'; ##mysql最大连接数
set global max_connections=1000 ##重新设置
show variables like '%max_connections%'; ##查询数据库当前设置的最大连接数
show global status like 'Max_used_connections'; ##服务器响应的最大连接数
show status like 'Threads%';
Variable_name Value
Threads_cached 0 ##mysql管理的线程池中还有多少可以被复用的资源
Threads_connected 152 ##打开的连接数
Threads_created 550 ##表示创建过的线程数,如果发现Threads_created值过大的话,表明MySQL服务器一直在创建线程,这也是比较耗资源,可以适当增加配置文件中thread_cache_size值,查询服务器
Threads_running 1 ##激活的连接数,这个数值一般远低于connected数值,准确的来说,Threads_running是代表当前并发数
show variables like 'thread_cache_size';
set global thread_cache_size=60;
mysql慢查询
重新生成慢查询日志
SQL> flush slow logs;
SQL> flush general logs;
image.png
查看慢查询参数及是否开启
mysql> show variables like '%slow%';
+---------------------------+-----------------------------------+
| Variable_name | Value |
+---------------------------+-----------------------------------+
| log_slow_admin_statements | OFF |
| log_slow_slave_statements | OFF |
| slow_launch_time | 2 |
| slow_query_log | OFF |
| slow_query_log_file | /var/lib/mysql/localhost-slow.log |
+---------------------------+-----------------------------------+
5 rows in set (0.01 sec)
开启慢查询:cnf\inf文件方式
//慢查询时间单位秒,这里表示超过10秒算慢查询
log_query_time=6
slow-query-log=On
slow_query_log_file="mysql_show_query.log"
//记录未使用索引的query
log-query-not-using-indexes=On
开启慢查询:SQL语句方式
set global slow_query_log=ON;
解析慢查询
# -s:排序方式。c , t , l , r 表示记录次数、时间、查询时间的多少、返回的记录数排序;
# ac , at , al , ar 表示相应的倒叙;
# -t:返回前面多少条的数据;
# -g:包含什么,大小写不敏感的;
mysqldumpslow -s r -t 10 /slowquery.log #slow记录最多的10个语句
mysqldumpslow -s t -t 10 -g "left join" /slowquery.log #按照时间排序前10中含有"left join"的
网友评论