Chinaunix首页 | 论坛 | 博客
  • 博客访问: 454376
  • 博文数量: 481
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 1040
  • 用 户 组: 普通用户
  • 注册时间: 2013-01-06 14:09
文章分类

全部博文(481)

文章存档

2013年(483)

我的朋友

分类: Mysql/postgreSQL

2013-04-17 16:05:42

    在操作mysql cluster的时候,尤其是涉及到数据更新,比如大批量的insert语句、利用ndb_restore还原数据库的时候,经常会出现Temporary error: 1218: Send Buffers overloaded in NDB kernel的错误。出现这个错误是因为SendBufferMemory的使用已经超过了一定的比值,默认是0.8.
   搜索网上的一些解决办法无非是加大SendBufferMemory的值以及TotalSendBufferMemory的值,查看到官网的mysql cluster的论坛说是那个东西和mysql的日志有关系,建议彻底关闭log。这个解决办法的却很让人郁闷。通过我不停的实验,发现这个和你的网路情况有很大的关系,我的环境是因为有一个节点的网络是100M的,其他的都是1000M,当我把那个节点的带宽调整到1000M时,那个问题再没出现过。对此,我分析可能由于ndb是网络数据库,当网络情况不好的时候,会导致发送内容堆积在SendBufferMemory,从而导致1218错误的发生。
    如果你的mysql cluster经常出现这样的错误,请检查你的mysql cluster的网络环境,以及用ethtool查看每个节点上的带宽。

    如果还不能解决这个问题,请临时的暂停日志记录,比如在配置文件中注释掉log-bin=mysql-bin,然后重启mysqld节点,这个可以临时解决这个问题,希望这篇文章对大家有帮助!


备注:经过本人的反复实践,发现这个参数和mysql的二进制日志关系很密切,所以在导入大量数据的时候,吧log-bin=mysql-bin注释,能回避这个错误!
阅读(278) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~