基于MySQL 8做分布式数据库,有哪些坑
如果无法正常显示,请先停止浏览器的去广告插件。
1. 基于MySQL 8 做分布式数据库,
有哪些坑?
2. 0
1
3. 基于MySQL的分布式数据库的限定条件
兼容MySQL语法和行为
2
1
采用shared—nothing架构
3
6
可扩展
基于MySQL做计算和存储
5
4
高可靠
事务满足ACID特性
4. 0
2
5. 基于MySQL做分布式数据库的优点
生态环境好
生态环境好
开发成本低
开发成本低
易使用,学习成本低
支持用户更多复杂特性
6. 0
3
7. 基于MySQL做分布式数据库,相比单机,有哪些特点?
时延大
需要更高并发才能追上单机 01 02 网络路径长
高可用要求高 03 04 网络IO超越存储IO
成为最主要的瓶颈
8. 0
4
9. MySQL 8 有哪些坑?
Coarse-grained latch 锁调度机制不合理
高可用机制不完善
默认字符集不同导致
的性能大坑
执行计划只考虑
单机
支持分布式事务的XA
代码存在大量bug
部分场景下
比5.7性能还差
10. Latch粒度和锁调度机制决定了MySQL并发能力
11. MySQL并发能力
12.
13.
14. 主要原因是 MySQL trx_sys所用的latch粒度太粗,
影响了读提交的并发扩展性
15. 官方MySQL读提交 vs 官方MySQL可重复读
16.
17. 通过trx_sys的latch拆分+ Read view优化来解决RC扩展性问题
18. MySQL灵异现象
19.
20. 针对读提交,高并发下MySQL设置 双1读写综合性能 往往更好
21.
22. 性能优化在复杂软件面前,往往是 追求一种平衡
23. 不同字符集 带来的性能差异
24.
25. MySQL XA机制 是实现分布式事务的基础
26. MySQL XA有哪些坑?
在刷xa prepare
binlog之前没有写
入xid到undo
切主后
hang死问题
节点被杀,且一阶
段提交出现了
error,没有回滚
整个事务
涉及到
MGR xa replay的
并行回放问题
XA prepare bug
related to crash
recover
克隆(clone)
后相关的重复XID
问题
XA一阶段提交崩
溃导致丢数据问题
crash safe
相关问题
xa commit
xa prepare
27. MySQL Group Replication 高可用机制不完善
28. MGR完善
需要重新设计
采用没有
认证数据
库的fast
工作模式
根据孟子
算法博士
论文改变
mgr里面
的paxos
算法
设计新的
流控算法
需要大量改造
为多主设
计新的认
证数据库
数据结构
增加地理
标签机制
relay log
batching
入盘机制
xcom
cache内
存分配静
态化机制
改进协程
调度机制
需要修复大量bug
为multi—
master实
现完备的
OCC并发
控制算法
一致性读
写各种同
步问题
纠正多主
模式下的
工作流程
recoveri
ng状态
下异常导
致的数据
索乱问题
各种视图
问题
29. MGR改造样例
30.
31. 单主新设计思路
Relay log批量入盘,
规避内存oom问题
1
1
规避流控
从库规避双1设置,
快速回放,DML幂等恢复机制
2
单主新设计
思路
无需采用认证数据库
采用Fast mode模式
2
切主走串行模式
32. MySQL执行计划只考虑 单机
33. 分布式数据库,往往 网络是主要瓶颈
34. MySQL NDB 都无法利用 网络 来优化执行计划
35. MySQL 8对5.7的性能改造目前 并不总是很成功
36.
37.
38. 根源在于MySQL 8.0.25的 trx_sys所用的latch粒度太粗
39. 最新版本在 trx_sys latch 进行了的一些简易拆分
40.
41.
42.
43.
44. MySQL 5.7.39 vs MySQL 8.0.30
45.
46.
47. trx_sys所利用的latch仍然可以进一步拆分,但 难度越来越大
48. 调度机制在MySQL 8多个地方仍然有 巨大的优化空间
49.
50. 困难是暂时的,前途是光明的
51.