数据库死锁排查

#首先区分是锁超时还是死锁

--
当前运行的所有事务 SELECT * FROM information_schema.INNODB_TRX; -- 当前出现的锁 SELECT * FROM information_schema.INNODB_LOCKs; -- 锁等待的对应关系 SELECT * FROM information_schema.INNODB_LOCK_waits; -- 每个MySql线程的用户,地址以及操作的db等其他信息。 SELECT * FROM information_schema.PROCESSLIST; -- 线程的信息 包括执行的sql信息(SQL_TEXT) select * from performance_schema.events_statements_current ##数据库死锁排查方案1 --查看造成死锁服务器日志## -- 找到状态为RUNNING的记录 拿到线程id:trx_mysql_thread_id SELECT * FROM information_schema.INNODB_TRX; -- 查询information_schema.processlist表 找到执行事务的客户端请求的SQL线程 拿到host select * from information_schema.PROCESSLIST WHERE ID = 'trx_mysql_thread_id'; -- 根据端口和ip 到服务器查看相关的应用和日志 # netstat -nlatp | grep 23452 # ps -eaf | grep 12059 ##数据库死锁排查方案2 -- 查看造成死锁的SQL信息## -- 找到状态为RUNNING的记录 拿到线程id:trx_mysql_thread_id SELECT * FROM information_schema.INNODB_TRX; -- 根据线程id获取所有线程信息 select * from performance_schema.threads where PROCESSLIST_ID = 'trx_mysql_thread_id' -- 根据线程id 从当前事件语句中获取到具体的执行sql select * from performance_schema.events_statements_curren where THREAD_ID in (select THREAD_ID from performance_schema.threads where PROCESSLIST_ID='trx_mysql_thread_id')

 

posted @ 2022-09-29 11:36  java从精通到入门  阅读(401)  评论(0编辑  收藏  举报