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 8.0.3性能大杀器 —— CATS
MySQL 8.0.3性能大杀器 —— CATS
2017年MySQL数据库技术嘉年华 —— 有态度的技术大会
2017年MySQL数据库技术嘉年华 —— 有态度…
IMG社区MySQL技术沙龙南京站圆满结束
IMG社区MySQL技术沙龙南京站圆满结束
改朝换代:MySQL Group Replication
改朝换代:MySQL Group Replication
数据库行业的朋友圈内幕,不知道就没法混了
数据库行业的朋友圈内幕,不知道就没法…
Inside MySQL Group社区启用新LOGO
Inside MySQL Group社区启用新LOGO
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年,数据库世界的诸神之战