#13《并发场景、锁和死锁》

文摘   2024-11-02 09:47   上海  

本周六10月26日直播课 ,第13单元。
进技术交流群方式,见文末海报二维码。

==前13单元大纲==

第13单元《并发场景、锁和死锁》

1. 锁分类

2.不同种类的锁加锁和解锁时机

3.InnoDB锁等待案例分析

4.业务实践:高并发场景优化思路

5. 事务隔离级别对锁策略的影响

6. 业务实践:如何选择合适的事务隔离级别

7. Server层死锁预防和处理策略

8. InnoDB死锁预防和处理策略 

9. 死锁检测机制和回滚机制

10.业务实践:死锁预防和死锁处理案例

第一单元《读懂执行器》大纲

第一节:基础知识回顾

1.InnoDB的数据组织形式

2.执行器的基本操作演示

3.索引树上的操作

    a) index up

    b) index range scan

    c) table scan

    d) index skip scan

 4.过滤

 5.排序算法演示和性能评估

    a) 普通排序

    b) 优先队列排序

    c) 归并排序

聚合

第二节:读懂执行器

  1. 读懂explain analyze的输出

  2. 读懂optimizer_trace的输出

  3. 描述执行流程

  4. 发现语句瓶颈

  5. 设计优化方案


第三节:实践案例

  用第二节的方法论,分析实际案例的优化过程

第二单元《讲透Join》大纲

第一节 基础知识回顾

1. 常见Join语义和示例

     join / left join / right join / outer join

2. join 写法: on和using 异同


第二节 Join 算法流程和代价分析

1. Nested Loop Join

     a) 算法流程

     b) 驱动顺序选择代价分析

     c) straight_join 的语义和功能

2. semi-join

     a) MySQL使用semi-join的场景

     b) 算法流程和时间复杂度

3. anti-join

     a) MySQL使用anti-join的场景

     b) 算法流程和时间复杂度

4. Block Nested Loop Join(BNL)和 Hash Join

    a) Join buffer 的使用场景

    b) BNL的时间复杂度

    c) Hash Join 算法流程和代价分析


第三节 Join语句的应用场景

1. 两表join的业务逻辑

   a) SQL写法

   b) 能否改写成简单语句替换?分析方法和结论

2. 一个执行10.1秒的SQL语句的优化过程

   a) 10.1s -> 3.4s -> 1.3s

   b) 能否改写成简单语句替换?分析方法和结论

3. 小结:能否改写成简单语句的判断方式

4. semi-join 和 antiyjoin应用场景

5. 两个三表join的例子

    性能分析和优化(27s --> 0.01s)


第四节 实战例子

  一个生产上性能优化的例子,

  分析过程和方案(13s --> 1s)

 

第三单元《binlog和性能》大纲

第一节 基础知识回顾

1. binlog的row和stmt格式

    a) 格式区别

    b) 查看日志内容方式

2. 基于binlog的主从架构

   a) 主从同步流程

   b) HA基本结构


第二节 binlog和性能相关

1.  影响主库性能的参数

     a) 参数效果和原理

     b) 生产设置建议

2. 一个面试题:

    以下参数开/关对性能影响排序

     binlog_checksum

     syn_binlog

     binlog_group_commit_sync_delay(1s)

     binlog_order_commits

     binlog_row_image(full vs minimal)

     semi-sync

3. 影响从库同步速度的因素

4. 多线程同步

     a) 不同策略特性、原理和发展史

     b) 实践配置建议

5. 备库恢复速度

    a) 几个秒级恢复数据的方案

    b) 小时级恢复数据的方案以及加速方法

6.主备切换速度

    a) 主备切换基本流程

   b) 要实现切换SLA 30秒的挑战:探测机制设计

   c) 切换流程分解

第四单元《MVCC原理和实践》大纲

第一节 基础知识回顾

1. 可重复读RR和读提交RC的定义

2. 用1个例子加深对RC的理解

3. 用4 个例子加深对RR的理解

    a) 一致性视图的范围

    b) 一致性视图的创建时机

    c) 实现原理:多版本的物理形态和操作逻辑

4. RR的数据可见性规则总结

5. 两个课堂练习


第二节 RR的使用场景

1. 逻辑备份流程

2. 逻辑备份一致性保障

3. 有MyISAM的逻辑备份和优化机制

4. 适应HTAP等其他场景备份方案

5. 并发减库存的场景,问题和改进


第三节 用perf和代码辅助优化

1. perf 基本功能介绍

2. 5.6到8.0性能下跌问题

    a) perf 分析代码

    b) 匹配原理

    c) 验证 & 优化

3. 案例分析,select limit 1性能问题


第五单元《MySQL的Server层线程》大纲

第一节 用户线程

1. 用户线程的行为

2. 用户线程的三种状态

3. 三种状态在gdb里看到的对应特征

4. 用户线程停等协议的理解


第二节 监听线程

1. 监听线程工作模式

2. 问答:权限验证是哪个线程做的?

3. 如何验证结论


第三节 GTID相关线程

1. gtid 持久化机制

2. gtid合并机制


第四节 事件调度线程

1. event_scheduler线程的工作模式

2. event执行线程工作模式

3. MySQL event的实践建议


第五节 信号处理线程

1. 信号处理线程作用

2.  kill -6 生产上使用时注意事项


第六节 MySQL线程内存消耗

1. 用户线程消耗资源的几个内存

2. 不同的内存的使用行为

3. 关于长空闲连接的业务使用建议


第七节 线程池机制

1. 线程池原理

2. 线程池相关使用场景


第六单元 《InnoDB线程和IO模型》 

第一节:基础知识回顾

  1. innodb_file_per_table

   2. innodb_buffer_pool_instances

  3. innodb_undo_tablespaces

  4. 课堂练习

第二节:buf_resize_thread

  1. 动态修改buffer pool 命令

   2. 线程分工

  3. 程序逻辑、日志现象、影响范围

  4. 生产实践建议

第三节:buf_dump_thread

  1. dump/load命令

  2. 输出格式和对用的代码逻辑(简要)

  3. 应用场景,新加读库加速方法(限定)

  4. 生产实践建议

第四节:ib_io_read

  1. InnoDB两种预读策略

  2.课堂练习:触发预读策略的方式

  3. ibuf_merge和io_read

第五节:io_ibuf_thread

  1. Change buffer 策略逻辑

  2. 适用场景和异常处理

  3. Change Buffer收益最小的场景是什么?

  3. 生产实践建议 

第六节:purge_thread

  1.  undo log知识点回顾

       a) 产生机制

       b) 物理形态

       c) 回收策略

       d) 观察命令

  2.课堂练习

       a) insert & History list

       b)truncate 对undo 的影响

       c) update varchar 和text的区别

 第七节:flush_thread

   1. page_cleaners参数行为

    2.相关概念:脏页、刷脏

   3. 脏页比例对性能的影响

第七单元《综合面试题&解析》

  1. 磁盘满和语句响应关系问题 

  2. MySQL扫描行数计算问题

  3. 备份导致生产故障问题&延申优化

  4. mysqldump --flush-logs与事务关系

第八单元 《MySQL怎么办系列-生产实践篇一》 

1.  ibdata被误删了,读不出ibd里的数据,怎么办?

2. 索引统计信息跟实际差距太大,怎么办?

3. 从库延迟几万秒了怎么办?

4. auto_increment自增id快用完了怎么办?

5. binlog文件快用到binlog.999999了怎么办?

第九单元 《MySQL索引和文件》 

第一节 InnoDB索引结构和文件

1. 聚集索引结构

2. 紧凑索引的约定定义

3. 数据插入顺序对索引的结构的影响

4. 加索引流程

5. 怎么判断重建索引的收益

6. 课堂练习:为什么optimize table后,表空间变大了


第二节:索引相关算法

1. 回表概念和流程

2. 回表和全表扫描的代价评估

3. ICP概念和流程

4. ICP生效条件和案例

5. 覆盖索引优化

6. 利用ICP的思路优化带大字段的查询


第三节:一道索引综合题解析

1. 二级索引和全表扫描选择策略

2. 执行计划中的扫描行数评估策略

3. 几个“异常”的rows_examined


第四节:索引和MVCC

1. 主键索引上的MVCC

2. 二级索引索引上的MVCC

3. SQL 案例分析

第十单元 《综合面试题&解析(二)》

1. innodb_thread_concurrency用完会发生什么?

2. 非双1时的io消耗计算和数据安全性评估

3. 各种常见ID的单调性和连续性

4. rows_examined很小的慢查询都时什么原因?

5. sync_binlog/binlog_group_commit... 怎么配合减少主备延迟

第11单元《分表》
  1. 为什么要分表

  2. 怎么选择分表字段

  3. 跨分表基本语句的算法

  4. 要不要使用分区表

  5. 其他透明分表方案和对比

  6. 怎么判断分表效果

  7. N个表拆成2N个表怎么做

第12单元《水平分库和分布式数据库》
  1. 为什么要分库

  2. 不分库的方案以及应用场景 

  3. 水平分库有哪些技术方向

  4.  架构区别

  5.  适用场景

  6.  发展趋势

  7. 哪些主流产品支持分布式事务,各自优势是什么

  8. 多点写入需求和架构思路


DBA札记
dba 数据库 知识科普 踩坑指南 经验分享 原理解读
 最新文章