我正在使用 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) 的配置非常高,但这似乎非常高。
任何人都可以解释为什么我可能会收到这个错误,以及将这个值增加这么多数量级是否可以接受?另外,为了阻止这种情况发生,我还可以/应该改变什么吗?