MySQL 5.7 semi-sync 1024 bug 修复

ACK Receiver线程

MySQL 5.7.17修复了一个bug,之前也有同学在IMG群中反馈过,最近新团队的同学也提到了这个问题,故拿出来给大家分享下。

MySQL 5.7引入了一个独立的Ack_receiver线程,用来接收slave从机返回的ACK请求。这将之前的dump线程的发送和接收工作分为了两个线程来处理,因此半同步复制得到了极大的性能提升。这也是MySQL 5.7在发布时号称的Faster Semi-sync Replication。同学们可以体会下:

MySQL 5.7 semi-sync 1024 bug 修复-MySQL社区 Inside MySQL Group

select机制的缺陷

ACK Receiver线程采用了select机制来监听slave返回结果:

fds= read_fds;
/* select requires max fd + 1 for the first argument */

ret= select(max_fd+1, &fds, NULL, NULL, &tv);

然而select机制监控的文件句柄只能是1~1024,当超过1024时,用户在MySQL的错误日志中或许会收到类似如下的报错,更有甚者会导致MySQL发生宕机:

Semi-sync master failed on net_flush() before waiting for slave reply

MySQL 5.7.17版本开始,使用poll机制来替换原来的select机制,从而可以规避上面的问题:


#ifdef HAVE_POLL
Poll_socket_listener listener(m_slaves);
#else
Select_socket_listener listener(m_slaves);
#endif //HAVE_POLL
...
ret= listener.listen_on_sockets();

...

如果有小伙伴也遇到了这个问题,那就赶快升级到最新的MySQL 5.7.18吧。

最后给我的好基友北乔峰做个广告,扫码下方二维码,加入势活 | 聪明的技术人都在看的公众帐号:

MySQL 5.7 semi-sync 1024 bug 修复-MySQL社区 Inside MySQL Group

长期坚持原创真的很不容易,多次想放弃。坚持是一种信仰,专注是一种态度!点赞和转发是对作者最好的褒奖哟~~~

BTW:IMG | MySQL技术沙龙 | 南京站 由于一些外部不可控的原因,时间改为9月2日啦,地点依然是南京威斯汀酒店。如果因为时间问题导致无法出席需要退票的同学,请直接微信我哦,82946772

发表评论

坐等沙发
相关文章
滚蛋吧,MySQL主从复制延迟
滚蛋吧,MySQL主从复制延迟
MySQL 8.0.3性能大杀器 —— CATS
MySQL 8.0.3性能大杀器 —— CATS
2017年MySQL数据库技术嘉年华 —— 有态度的技术大会
2017年MySQL数据库技术嘉年华 —— 有态度…
IMG社区MySQL技术沙龙南京站圆满结束
IMG社区MySQL技术沙龙南京站圆满结束
改朝换代:MySQL Group Replication
改朝换代:MySQL Group Replication
数据库行业的朋友圈内幕,不知道就没法混了
数据库行业的朋友圈内幕,不知道就没法…
Oracle MySQL ACE. Author of Inside MySQL and MySQL Core Series. Great at MySQL performance tuning、troubleshooting、systems availability and scalability、capacity planning, etc.

一触即发,2017年,数据库世界的诸神之战