1.手动解锁:
先查询锁住的事务
SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX;
杀死进程
kill id
其中,id为:trx_mysql_thread_id列
另一种方法:
查询是否有在锁的表:
show OPEN TABLES where In_use > 0;
查询进程(如果你有SUPER权限,你可以看到所有线程。否则,只能看到你自己的线程):
show processlist;
杀死进程:
kill id
2.慢查询
查找当前数据库是否开启了慢查询:
show variables like '%slow%';
查询慢查询日志:
show variables like '%slow_query_log%';
3.查询正在执行的sql(同样适用于长sql)
select * from information_schema.`PROCESSLIST` where info is not null;
另外:
show processlist;
可以查询出当前连接中所有数据库及所有用户的执行情况,但是sql显示不完全。
4.查询数据库连接数
查询数据库最大连接数:
show variables like '%max_connections%';
查询数据库服务器响应的最大连接数:
show global status like 'Max_used_connections';
对于mysql服务器最大连接数值的设置范围比较理想的是:服务器响应的最大连接数值占服务器上限连接数值的比例值在10%以上,如果在10%以下,说明mysql服务器最大连接上限值设置过高。
例如:
可以看到占比远低于10% |
5.线程池缓存大小
( 当客户端断开连接后 将当前线程缓存起来 当在接到新的连接请求时快速响应 无需创建新的线程 )
show status like 'Threads%';
show variables like 'thread_cache_size';
set global thread_cache_size=64; (立即生效重启后失效,具体的需要在mysql配置文件中改)
Threads_cached : 当前线程池中缓存有多少空闲线程
Threads_connected : 当前的连接数 ( 也就是线程数 )
Threads_created : 已经创建的线程总数
Threads_running : 当前激活的线程数 ( Threads_connected 中的线程有些可能处于休眠状态 )
当 Threads_cached
越来越少 但 Threads_connected
始终不降 且 Threads_created
持续升高
这时可适当增加 thread_cache_size
的大小,thread_cache_size设置标准:
根据物理内存设置规则如下:
1G > 8
2G > 16
3G > 32
>3G > 64
6.Mysql占用大量写I/O处理方法
show variables like '%sync_binlog%';
sync_binlog是将二进制日志文件刷新到磁盘上,sync_binlog 的默认值是0