MySQL文章学习记录

这篇博文主用来记录读到的MySQL相关的文章

机制系列

故障及优化案例系列

SQL变慢的原因主要有:

  1. SQL执行过程走索引不合理,导致执行缓慢。
  2. 使用合理索引,但是获取数据量比较多。(排序,临时表等)
  3. 网络重传丢包导致SQL变慢。
  4. 并发比较高的场景,请求排队处理,等待时间长。

性能优化是一个老生常谈的问题,需要对相关流程和机制有很深入的研究才能对症下药。平时扩充、积累相关知识,在遇到问题后,才会有思路。经验很重要,但更多的是建立在平时的积累上。

死锁系列

  • 漫谈死锁 (1. RC级别下也会存在Next-key 2. RC级别下,获取到不符合记录时会释放锁)
    • innodb_print_all_deadlocks (将死锁信息记录到errorlog中参数)
    • innodb_status_output_locks (标准监控开关参数)
  • 如何阅读死锁日志 (锁组合)
  • MySQL 各种SQL语句加锁分析
    • innodb_locks_unsafe_for_binlog
  • 死锁案例一 (简单插入唯一索引插入意向锁案例)
  • 死锁案例二 (delete操作会有锁区间行为。PS:删除已有记录会导致锁范围变大)
  • 死锁案例三 (insert同一区间时,唯一索引的插入意向锁导致的死锁)
  • 死锁案例四 (并发插入时,插入意向锁不同阶段死锁。注意跟案例三的区别:本案例为X锁等待,案例三为S锁等待)
  • 死锁案例五 (repalce into插入死锁情况)
  • 死锁案例六 (不同事务加锁顺序不一样,导致锁资源交叉影响导致的死锁)
  • 死锁案例七 (RC级别下,update不存在记录会持有lock_S + GAP锁)
  • 死锁案例八 (多并发插入下的又一插入意向锁竞争导致的死锁案例)
  • 死锁案例九 (并发批量插入,导致的死锁)
  • 死锁案例十 (并发更新普通二级索引造成的死锁。PS:另一程度上说明索引不是随便加就行
  • 死锁案例十一5.6升级到5.7后,INSERT INTO .. ON DUPLICATE KEY语句锁模式加强
  • 死锁案例十二 (唯一索引,多插入,插入意向锁死锁情况)
  • 一个最不可思议的死锁分析 (并发delete语句造成的死锁情况,里面引用了很多好文章,需要细品)

分析死锁单从show engines innodb status中往往只能看到最后执行的语句,并不能很好的了解整个死锁形成过程。所以在分析死锁时,需要先了解两个死锁事务的具体逻辑和语句过程。
了解MySQL不同操作的加锁过程非常重要,这是对死锁形成过程分析的基础。

MySQL8.0系列

源码解析

其他