mysql数据库卡顿问题排查过程
作者:Ygv587
介绍了四种排查数据库问题的方法,包括查看SQL运行情况、库和表信息、数据库配置情况以及重启数据库,每种方法都有具体的操作步骤和注意事项,旨在帮助读者解决数据库资源不足、死锁等问题
一、查看后台sql的运行情况
这种能排查后台有进程一直占用资源,导致死锁
1、查看正在执行的事务
SELECT * FROM information_schema.INNODB_TRX
2、查看进程
SHOW PROCESSLIST
3、杀死进程
KILL 123
二、查看库和表信息
这种能排查是资源不够用的情况
1、据库大小和索引大小
-- 据库大小和索引大小 SELECT TABLE_SCHEMA, CONCAT(TRUNCATE(SUM(data_length)/1024/1024,2),' MB') AS data_size, CONCAT(TRUNCATE(SUM(index_length)/1024/1024,2),'MB') AS index_size FROM information_schema.tables GROUP BY TABLE_SCHEMA ORDER BY data_size DESC;
2、查询单个库中所有表磁盘占用大小
-- 查询单个库中所有表磁盘占用大小 SELECT CONCAT(TRUNCATE(SUM(data_length)/1024/1024,2),'MB') AS data_size, CONCAT(TRUNCATE(SUM(max_data_length)/1024/1024,2),'MB') AS max_data_size, CONCAT(TRUNCATE(SUM(data_free)/1024/1024,2),'MB') AS data_free, CONCAT(TRUNCATE(SUM(index_length)/1024/1024,2),'MB') AS index_size FROM information_schema.tables WHERE TABLE_SCHEMA = '你的数据库名';
3、查看数据库中所有表的信息
-- 查看数据库中所有表的信息 SELECT CONCAT( table_schema, '.', table_name ) AS 'Table Name', table_rows AS 'Number of Rows', CONCAT( ROUND( data_length / ( 1024 * 1024 * 1024 ), 6 ), ' G' ) AS 'Data Size', CONCAT( ROUND( index_length / ( 1024 * 1024 * 1024 ), 6 ), ' G' ) AS 'Index Size', CONCAT( ROUND( ( data_length + index_length ) / ( 1024 * 1024 * 1024 ), 6 ), ' G' ) AS 'Total' FROM information_schema.TABLES W WHERE table_schema LIKE '你的数据库名'; ``` ## 4、单位GB表空间 ```sql # 单位GB表空间 SELECT CONCAT( ROUND( SUM( data_length ) / ( 1024 * 1024 * 1024 ), 6 ), 'GB' ) AS 'Total Data Size' FROM information_schema.TABLES WHERE table_schema LIKE '你的数据库名';
5、索引空间
-- 索引空间 SELECT CONCAT( ROUND( SUM( index_length ) / ( 1024 * 1024 * 1024 ), 6 ), ' GB' ) AS 'Total Index Size' FROM information_schema.TABLES WHERE table_schema LIKE '你的数据库名';
三、查看数据库的配置情况
这种能排查数据库是默认配置导致的资源没跑满
SHOW VARIABLES LIKE '%connect%';
四、重启数据库
万物回归大法
1、命令
service mysql start service mysql stop service mysql restart
2、报错
如果遇到pid报错,那个文件出现问题删除那个
3、报错2
可能是文件之间的权限不匹配,例如改完一个配置文件,重新上传到的,可能是root权限,但是其他的是有的是777,有的是644,导致数据库起不来。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。