MySQL锁

监控锁状态

1.查看有没有锁等待

mysql> show status like 'innodb_row_lock%';
+-------------------------------+-------+
| Variable_name                 | Value |
+-------------------------------+-------+
| Innodb_row_lock_current_waits | 0     |   当前有多少锁等待
| Innodb_row_lock_time          | 0     |
| Innodb_row_lock_time_avg      | 0     |
| Innodb_row_lock_time_max      | 0     |
| Innodb_row_lock_waits         | 0     |      一共发生过多少锁等待
+-------------------------------+-------+
5 rows in set (0.00 sec)

2.查看那个事务在等待(被阻塞了)

select * from information_schema.INNODB_TRX WHERE trx_state='lock wait';
trx_id 事务ID
trx_state:当前事务的状态
trx_mysql_thread_id:连接层的,连接线程ID(SHOW PROCESSLIST===>Id或trx_id)

3查看锁源,谁锁的

select * from sys.innodb_lock_waits   被锁的和锁定它的之间关系
locaked_table:那张表出现的等待
locaked_type: 锁的类型(recordlock,gaplock,nextlock)
waiting_trx_id :等待的事务(与上个视图trx_id对应)
waiting_pid:  等待的线程号(与上个视图trx_mysql——thread_id)
waiting_lock_mode,等待锁的类型(x,s)
waiting_query:事务语句
blocking_trx_id:  锁源的事务ID
blocking_pid :锁源的线程号
sql_kill_blocking_connection 处理建议

4.根据锁源的pid,找到锁源SQL的线程ID

select * from performance_schema.threads where processlist_id=1691;

5.根据锁源SQL线程ID,找到锁源的SQL语句

select * from performance_schema.`events_statements_current` where thread_id=1716;

死锁监控

show engine innodb status\G
show variables like '%deadlock%';
vim /etc/my.cnf
innodb_print_all_deadlocks = 1

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 一、概述 数据库锁定机制简单来说,就是数据库为了保证数据的一致性,而使各种共享资源在被并发访问变得有序所设计的一种...
    不变甄心阅读 7,627评论 0 3
  • 为什么要学习锁机制 锁是计算机协调多个进程或线程并发访问某一资源的机制。 因为数据也是一种供许多用户共享的资源,如...
    Java架构师笔记阅读 4,511评论 0 7
  • 引言 数据库锁定机制简单来说就是数据库为了保证数据的一致性而使各种共享资源在被并发访问变得有序所设计的一种规则;对...
    高级java架构师阅读 4,014评论 0 1
  • 锁分类 根据锁粒度和兼容性划分 |----表锁(MyISAM,InnoDB 开销小,加锁快,不死锁,并发差) ...
    机智的老刘明同志阅读 9,717评论 0 5
  • 8.17,七夕,本以为会有你,实际上只有吹过的凉风与拥挤的人群。 我还记得,你就在我旁边的时候,摆弄头发,空气中弥...
    烟酒来杯茶阅读 1,022评论 1 3

友情链接更多精彩内容