MySQL的slave为什么不独立出一个ack线程?
MySQL 5.7.4之后半同步得到极大增强,我们测试比5.5的半同步性能提升了差不多100%!这得益于MySQL 5.7.4之后的半同步独立出一个ack线程来替代dump thread做ack应答,这样主机发送binlog和接受slave ack回应可以并行化,详细解释可以参考这篇和这篇,以下是简单描述图:
5.6之前
文章图片
5.7之后
文章图片
【MySQL的slave为什么不独立出一个ack线程?】今天来自Oracle的Ivan Ma(马楚成)在介绍5.7新特性时,一个开发同事就针对半同步增强提出了以下问题:
既然master做了dump thread和ack thread分离的优化,那为什么slave不也这样仿效将receive线程和ack线程独立这样做进一步提升性能呢?我一开始的想法是:master后面可能挂多个slave,压力较大,MySQL开发人员精力有限,优先将master如此优化效果更明显,后续再将slave优化。不过这解释实在心里没底...
再一想不禁哑然失笑:slave接受完主机送过来的binlog再返回ack应答这是半同步规定的行为呀!半同步就是为了解决异步复制情形下事务在主机提交完成而slave不一定收到此事务binlog而提出的:主机的事务就是要等待slave接受完binlog返回个ack应答然后才能提交完成; 如果slave的receiver线程和ack线程独立运行,可能receiver线程还没接受完主机事务的一个binlog而ack返回接受成功,主机收到ack应答就提交事务,但这样此时slave其实缺少这个事务,这种情形就不是半同步了呀!
最后,这位同事能提这么独辟蹊径的问题说明热爱独立思考,而不像我在内的大多数人只是了解、记住概念知识,值得学习!
推荐阅读
- 热闹中的孤独
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- 放屁有这三个特征的,请注意啦!这说明你的身体毒素太多
- 一个人的旅行,三亚
- 布丽吉特,人生绝对的赢家
- 慢慢的美丽
- 尽力
- 一个小故事,我的思考。
- 家乡的那条小河
- 《真与假的困惑》???|《真与假的困惑》??? ——致良知是一种伟大的力量