mysql 全局锁和表锁
1 mysql 根据锁的范围分为 全局锁,表级锁,和行级锁。
2 全局锁
2.1 全局锁会让整个表变成只读的状态。一般用在 数据的逻辑备份。
2.2 mysql 可是使用 Flash table with read lock (FTWRL) 给全局添加读锁。
2.3 mysql官方自带的逻辑备份工具是 mysqldump。当mysqldump 使用参数 -single-transaction 的时候,数据启动之前就会启动一个事务,保证拿到数据的 一致性。
但是 single-transaction 方法只适用于所有的表示用事务引擎的库。 MySAM 就不支持事务引擎。
3 表级锁
3.1 表级锁,有2种,一种是表锁,一种是元数据锁(meta data lock MDL)。
3.2 表锁的语法是 lock table .. read/write 就是对表进行操作前,先拿到锁。
3.3 MDL 不需要显示添加,在表操作的时候,会默认加上,就是为了防止,数据不一致。
3.4 为了防止ddL小表,阻塞整个数据库,需要 解决长事物问题。 设置DDL超时时间,或者kill 长事务。
4 行锁: 就是能锁住一行数据的锁。InnoDb 支持行锁。
5 两阶段锁
5.1 innodB 事务中,行锁是在需要的时候添加上的,但并不是用完这行数据就解锁,而是等事务提交之后再解锁。
5.2 因此 如果事务中需要多个行锁,把最有可能造成所冲突,最有可能影响并发度的锁尽量往后放。
6 死锁和死锁检测
6.1 当并发系统,不同线程都在等待别的线程释放资源时,就会导致这几个线程进入无线等待状态,俗称死锁。
6.2 解决死锁的方式有两种: 第一种是设置超时等待时间 通过innodb_lock_wait_timeout 参数设置。innodb 默认超时时间是50s
第二种,方式是 开启死锁检测,innodb_deadlock_detect 设置为on, 但是开启这个参数后,并发量大会 比较吃cpu 性能因为 检测复杂度是 O(n)
为解决热点更新为题,可以临时吧死锁检测关掉或者,控制并发度。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)