Java互联网科技Java成长之路

Mysql中的三类锁,你知道吗?

2020-04-06  本文已影响0人  Java_老男孩

导读

全局锁

为什么备份要加全局锁?

全局锁有什么坏处?

全局备份比较好的解决方案

表级锁

如何加表锁

    lock tables tb_name read/write;    unlock tables;

MDL

查询表级锁争用

    show status like 'table_locks_waited'

行级锁

排他锁

    select * from user where id=1 for update;

间隙锁

共享锁

分析行锁定

    show status like 'innodb_row_lock%' 

死锁解决方案

1、直接进入等待,直到超时。这个超时时间可以通过参数innodb_lock_wait_timeout来设置,默认50秒。注意超时时间不能设置太短,如果仅仅是短暂的等待,一旦设置时间很短,很快便解锁了,会出现误伤。

2、发起死锁检测,发现死锁后,主动回滚死锁链条中的某一个事务,让其他事务得以继续执行。将参数innodb_deadlock_detect设置为on,表示开启这个逻辑,默认开启。 主动死锁检测在发生死锁的时候,是能够快速发现并进行处理的,但是它也是有额外负担的。 当并发很高的时候,检测死锁将会消耗大量的资源,因此控制并发也是很重要的一种策略。

欢迎关注公众号:《老男孩的成长之路》,后台私信“资料”领取《Java面试宝典Plus》版

上一篇下一篇

猜你喜欢

热点阅读