1

我正在使用 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 集群日志报告以下内容

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) 的配置非常高,但这似乎非常高。

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

4

1 回答 1

3

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

于 2014-04-07T10:46:26.630 回答