【发布时间】:2021-09-23 17:34:12
【问题描述】:
我们在系统中创建了一个 3 节点 galera 集群,然后从现有的单节点独立 mariadb 中移动了我们现有的数据库/表。然后,当我们在这个 3 节点集群上启动我们的应用程序时,它运行良好,可以更新少量记录,但之后我们的更新被无限期触发(锁定),然后我们无法对表进行任何写入或更新。我们不断面对这个问题,我们多次尝试再次重建我们的集群,但同样的问题一次又一次地发生。请帮助为这个问题提供一些方向。 在这种特殊情况下,我(应用程序)只是一个接一个地对记录运行更新命令。它一次更新的记录总数约为 250 条(一个接一个)。表中的总记录为 40 万条。此特定表没有任何主键。更新此 java 应用程序中使用的查询示例 -
"update dost_master_prod set a2d_api_request = ?,
a2d_api_response = ?, a2d_api_status = ?, a2d_api_description = ?, d2r_api_request = ?,
d2r_api_response = ?, d2r_api_status = ?, d2r_api_description = ?, updated_date_time = ?,
update_description = ?
where initiator_agent = ? and report_date = ?;"
以这种方式通过应用程序连接到集群 - jdbc:mariadb:sequential。
错误日志 -
SHOW ENGINE INNODB STATUS
------------
TRANSACTIONS
------------
Trx id counter 11316748
Purge done for trx's n:o < 11316747 undo n:o < 0 state: running
History list length 29
LIST OF TRANSACTIONS FOR EACH SESSION:
---TRANSACTION 421357846471208, not started
0 lock struct(s), heap size 1128, 0 row lock(s)
---TRANSACTION 421357846466944, not started
0 lock struct(s), heap size 1128, 0 row lock(s)
---TRANSACTION 11316747, ACTIVE 1785 sec
mysql tables in use 1, locked 1
51495 lock struct(s), heap size 5726328, 3641448 row lock(s), undo log entries 1
MySQL thread id 9627, OS thread handle 139882031507200, query id 5693745 injiffyan01.india.airtel.itm 10.92.228.55 root Commit
update dost_master_prod set a2d_api_request = '{
\"amount\" : \"3823.75\",
\"currency\" : \"XXX\",
\"subType\" : \"commission_otf\",
\"type\" : \"adjustment\",
\"requestDate\" : \"2021-05-13T11:15:44.011+05:30\",
\"debitParty\" : [ {
\"key\" : \"accountid\",
\"value\" : \"994\"
} ],
\"creditParty\" : [ {
\"key\" : \"accountid\",
\"value\" : \"09944890425\"
} ],
\"metadata\" : [ {
\"key\" : \"slab_next\",
\"value\" : \"Slab for next OTF payout is 61-80 GA\"
}, {
\"key\" : \"slab_achieved\",
\"value\" : \"41-60 GA\"
}, {
\"key\" : \"de
---TRANSACTION 421357846475472, not started
0 lock struct(s), heap size 1128, 0 row lock(s)
---TRANSACTION 421357846462680, not started
0 lock struct(s), heap size 1128, 0 row lock(s)
--------
问题 1) 这个问题是因为我们的表中没有主键吗? 问题 2) Galera 集群的限制是什么?将 10 多个高影响应用程序从单节点 mariadb 移动到 3 节点 galera 集群是否可行?如果是,需要采取哪些预防措施? 问题 3) 为什么由于一张表(在一个数据库上)问题导致整个集群被击中/挂起/锁定? 问题 4) 我们应该使用顺序、复制或负载平衡哪种模式?
【问题讨论】:
标签: java mysql mariadb replication galera