栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

[丁奇四十五讲]第6讲学习笔记

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

[丁奇四十五讲]第6讲学习笔记

全局锁和表锁

1.mysql中的锁
全局锁
表级锁
行锁

2.全局锁
Flush tables with read lock
当你需要让整个库处于只读状态的时候,更新、定义等线程将会被堵塞
使用场景:全库逻辑备份:获取一致性备份
主库上备份:备份期间业务停止
从库上备份:备份期间不能接受主库同步过来的binlog,导致主从延迟
为了拿到一致性视图:
在可重复读隔离级别下开启一个事务

3.mysqldump
自带的逻辑备份工具mysqldump,当使用参数single-transaction的时候,导数据就会自动启动一个事务,确保拿到一致性视图,在这个过程中由于mvcc的支持,这个过程中的数据是可以正常更新的
一致性读是好,但前提是引擎要支持这种隔离级别,single-transcation方法只适用于支持事务的引擎。

4.关于全库只读(不建议使用)
Set global readonly=true
(1)在一些库中,readonly的值被用来做其他判断,修改global的影响较大
(2)异常处理机制中,如果发生了客户端异常,数据库会一直保持readonly,导致库长时间不可读写,风险较高

5.表级锁
(1)表锁
(2)元数据锁

6.表锁
lock tables … read/write
unlock tables主动释放锁
表锁是最常见的处理并发的方式,对于innodb这种支持表锁的引擎,一般不使用lock tables因为其影响面太广了
如果出现lock tables要追查
(1)升级支持事务的引擎
(2)引擎升级了,但是代码还没升级,将lock和unlock变为begin和commit

7.元数据锁MDL
metadata lock
保证读写的正确性
在mysql5.5中引入了mdl,当一个表做增删改查时候,加mdl读锁;
变更表的结构变更时候,加mdl写锁
读锁之间不互相排斥,因此你可以有多个线程同时对一张表进行增删改查
读写锁之间、写锁之间是互斥的,需要等待另一个线程结束,再继续另一个线程

8.如何安全的给小表加字段
在做ddl变更的时候,刚好有长事务在执行,要考虑先暂停ddl,或者kill这个长事务

9.锁与事务的关系
事务与锁是不同的。事务具有ACID(原子性、一致性、隔离性和持久性)
锁是用于解决隔离性的一种机制。
事务的隔离级别通过锁的机制来实现。
另外锁有不同的粒度,同时事务也是有不同的隔离级别的
一般有四种:
读未提交Read uncommitted,
读已提交Read committed,
可重复读Repeatable read,
可串行化Serializable

暑期编程PK赛 得CSDN机械键盘等精美礼品!
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1017141.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号