美文网首页
丁奇-MySQL实战读书笔记7

丁奇-MySQL实战读书笔记7

作者: 布朗XD | 来源:发表于2021-02-05 14:17 被阅读0次

怎么减少行锁对性能的影响?

在 InnoDB 事务中,行锁是在需要的时候才加上的,但并不是不需要了就立刻释放,而是要等到事务结束时才释放。这个就是两阶段锁协议。
如果你的事务中需要锁多个行,要把最可能造成锁冲突、最可能影响并发度的锁尽量往后放。

案例:
假设你负责实现一个电影票在线交易业务,顾客 A 要在影院 B 购买电影票。我们简化一点,这个业务需要涉及到以下操作:
从顾客 A 账户余额中扣除电影票价;
给影院 B 的账户余额增加这张电影票价;
记录一条交易日志。

最合理的顺序是:3、1、2。因为2被并发访问的概率最高,尽量降低锁的时间。

如果你要删除一个表里面的前 10000 行数据,有以下三种方法可以做到:
第一种,直接执行 delete from T limit 10000;
第二种,在一个连接中循环执行 20 次 delete from T limit 500;
第三种,在 20 个连接中同时执行 delete from T limit 500。

第一种方式(即:直接执行 delete from T limit 10000)里面,单个语句占用时间长,锁的时间也比较长;而且大事务还会导致主从延迟。第三种方式(即:在 20 个连接中同时执行 delete from T limit 500),会人为造成锁冲突。

相关文章

  • 丁奇-MySQL实战读书笔记7

    怎么减少行锁对性能的影响? 在 InnoDB 事务中,行锁是在需要的时候才加上的,但并不是不需要了就立刻释放,而是...

  • mysql的锁

    整理自 丁奇的MySQL实战45讲 全局锁 命令Flush tables with read lock (FTWR...

  • 丁奇-MySQL实战读书笔记1

    这个专栏的内容是我工作以来看过讲MySQL最深入而且最细致的,作者丁奇是前阿里资深技术专家,和褚霸(霸爷)一起研究...

  • 丁奇-MySQL实战读书笔记2

    今日主题:redo log(重做日志)和 binlog(归档日志)。 redo log(重做日志) MySQL 里...

  • 丁奇-MySQL实战读书笔记3

    隔离性与隔离级别 若隔离级别是“读未提交” V1=2 V2=2 V3=2 若隔离级别是“读提交” V1=1 V2...

  • 丁奇-MySQL实战读书笔记6

    全局锁 全局锁就是对整个数据库实例加锁,全局锁的典型使用场景是,做全库逻辑备份。 表级锁 一种是表锁,一种是元数据...

  • 丁奇-MySQL实战读书笔记5

    在下面这个表 T 中,如果我执行 select * from T where k between 3 and 5,...

  • 丁奇-MySQL实战读书笔记4

    索引维护 B+ 树为了维护索引有序性,在插入新值的时候需要做必要的维护。以上面这个图为例,如果插入新的行 ID 值...

  • 丁奇-MySQL实战读书笔记14

    1:又刷新了认知,先给结论(之前不知从哪看的,以为count(主键id)性能最佳)按照效率排序的话,count(字...

  • 丁奇-MySQL实战读书笔记15

    本期是答疑,把核心要点记录一下: MySQL 怎么知道 binlog 是完整的? binlog-checksum ...

网友评论

      本文标题:丁奇-MySQL实战读书笔记7

      本文链接:https://www.haomeiwen.com/subject/auyvtltx.html