MySQL PXC集群多个节点同时大量并发update同一行
一、生成测试数据
二、在不同节点测试可能的死锁情况
在node1、node2同时批量执行更新最后一条记录,采用Secure CRT的"Send Commands to All Sessions"操作技巧同时发起操作,同时观察两个节点的日志信息。
node1的日志信息99行,如下:
node2日志信息139行,与node1类似,此处忽略。
分析所有日志信息,node1 5个报错,5个Victim thread;node2 7个报错,7个Victim thread。
可见,同时批量更新同一行数据有可能导致冲突的发生,总有一部分失败的情况,但不会造成集群异常。
理论上如果没有冲突的发生,更新后a值应该是200以上,但是实际上最后的结果是142:
三、结论
可见PXC集群应对这种同时对同一行数据的大批量更新,是有固定策略的,部分失败在所难免,可以从应用实现方面解决这个问题,如提前显式锁定、单线程顺序执行、变量标识等。
另外笔者测试了在同一节点同时批量更新的情况,结果与不同节点是完全一样的,这也印证了对于PXC集群的节点使用,是可以采用负载均衡机制连接不同节点的。当然负载均衡方式对于PXC集群意义不大,因为它本身是一个多主集群,所有的修改操作都是多节点并发执行的。

浙公网安备 33010602011771号