我应该增加MySQL群集中的MaxBufferedEpochs - (断开连接节点,因为它已超过MaxBufferedEpochs)

时间:2014-03-25 12:27:25

标签: mysql mysql-cluster

我正在使用MySQL集群来处理大数据流的并行处理,这有时需要大连接(数百万行)以及一次更新/删除/插入多行(1000)。它似乎在大多数时候都非常舒适地处理这个问题。

但是我偶尔会遇到一个问题,这个问题似乎是由SQL节点上允许的缓冲时期数量最大化导致节点断开连接引起的。我似乎无法找到将此错误与错误时执行的查询类型相关联的模式。

然后我从mysql

获得以下异常
SQLSTATE[HY000]: General error: 1297 Got temporary error 4010 'Node failure caused abort of transaction' from NDBCLUSTER

然后来自后续查询的数百个错误

SQLSTATE[HY000]: General error: 1296 Got error 157 'Unknown error code' from NDBCLUSTER

MySQL Cluster日志报告以下

INFO     -- Node 7: Disconnecting lagging nodes '0000000000000000000000000000000000000000000000000000000001000000',
WARNING  -- Node 7: Disconnecting node 24 because it has exceeded MaxBufferedEpochs (150 > 150), epoch 1758675/1
INFO     -- Node 7: Communication to Node 24 closed
INFO     -- Node 4: Communication to Node 24 closed
ALERT    -- Node 7: Node 24 Disconnected
...

根据MySQL文档"默认值100足以满足大多数正常操作"。我将MaxBufferedEpochs的值增加到150,但这没有帮助。

我见过人们使用MaxBufferedEpochs(10000)的数字配置非常高,但这看起来非常高。

任何人都可以解释为什么我可能会收到这个错误,是否可以将这个值增加到这么多的数量级是可以接受的?此外,还有什么我可以/应该改变以阻止这种情况发生吗?

1 个答案:

答案 0 :(得分:3)

您是否增加了锁定等待超时值?如果您长时间运行插入/更新/选择并且您已经增加了锁定等待超时,则epoch缓冲区可以在等待这些缓冲区退出时填满。您应该减小该值并尝试优化查询以不超过锁定等待超时。