我在使用 galeracluser 时遇到了障碍,我有一个问题。
我正在使用 MariaDB 10.5.13 版本和 Galera Cluster。我面临的问题是所有节点由于查询而变慢,导致连接超时。
场景如下:
创建表 item_temp AS SELECT COUNT(*) FROM item WHERE item_status = 1;
UPDATE item SET item_status = 3;
我怀疑是更新查询导致了问题,但我不确定为什么所有节点都变慢了。这是我的假设:
创建查询可能仍在进程列表中,导致所有写入事务被阻止,这可能会产生影响。 或者,更新查询可能已立即应用并同时复制到其他节点,从而导致许多节点更新并影响服务器。 任何有关所有节点速度变慢的原因的见解将不胜感激。
我想知道为什么不仅发生更新查询的节点变慢了,其他节点也变慢了
当 Galera 被修复以使
CREATE TABLE .. SELECT
工作时 (MDEV-7673),这会将集群置于 TOI 模式以便复制此语句。这个实现仍然存在。
因此建议 1,使用
CREATE TABLE
,然后使用 INSERT INTO .. SELECT
,特别是如果您有一个大型查询最终聚合为一个小型结果集。这个小结果集将在非 TOI 模式下快速复制。
3./4。由于 TOI 模式的结果,如(5.图像所示)中的进程列表所示,正在执行
CREATE TABLE .. SELECT
。缺乏数据库连接是现有的 UPDATE/INSERT
等待 TOI 结束的查询正在消耗所有连接。
5.
TOI 模式
CREATE TABLE ... SELECT
运行一个多小时很奇怪。即使是 2M 行,我也期望更快。您是否配置了更大的 innodb 缓冲池大小以匹配您的实例大小?这是一个行大小特别大的表吗?
6.
除非某些事情确实停滞,否则重新启动通常是一个错误。回滚可能会很长。
预计不会出现
UPDATE item SET item_status = 3;
,因为没有集群的认证结果,该事务从未提交。由于服务器关闭,这被认为是中止的事务,因此在重新启动时从撤消日志中回滚。