我正在使用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)的数字配置非常高,但这看起来非常高。
任何人都可以解释为什么我可能会收到这个错误,是否可以将这个值增加到这么多的数量级是可以接受的?此外,还有什么我可以/应该改变以阻止这种情况发生吗?
答案 0 :(得分:3)
您是否增加了锁定等待超时值?如果您长时间运行插入/更新/选择并且您已经增加了锁定等待超时,则epoch缓冲区可以在等待这些缓冲区退出时填满。您应该减小该值并尝试优化查询以不超过锁定等待超时。