mysql - Galera:索引大数据时无法写入数据库

标签 mysql database-indexes galera

我正在使用具有 3 个节点的 Galera 集群。我目前遇到以下问题。我想将超过 5 亿条记录写入数据库,例如表数据。以下是步骤:

  • 创建表 NewData,将模式作为数据但没有索引。
  • 将 5 亿条记录写入此表。 (使用多线程写入,每个线程会写入一堆记录)。
  • 完成后,为该表分配索引。
  • 将 Data 重命名为 OldData,并将 NewData 重命名为 Data。

我目前遇到的问题是索引短语,其他服务无法写入/读取数据。在我增加innodb_buffer_pool_size后其他节点可以读取数据但仍然不能写入。

我已经配置好写入作业在与其他 api 不同的节点上写入,但问题仍然相同。我认为如果一个节点的工作负载非常高,其他节点应该仍能正常运行。请告诉我为什么以及如何解决这个问题。

谢谢

最佳答案

我想你错过了一步。

  1. (一次性)创建表 NewData,其架构为 Data 但没有索引。
  2. 插入 NewData
  3. 创建表“空”(同样类似于数据但没有任何索引)
  4. RENAME TABLE NewData TO ToIndex,Empty TO NewData; -- 现在可以继续摄取了。
  5. ALTER TABLE ToIndex ADD INDEX ...
  6. RENAME TABLE Data TO Old, ToIndex TO Data;

关键是要进行两件事:

  • 不断写入未索引的 NewData
  • 交换表以便定期为该表(以新名称)编制索引,然后用于替换事件表(始终被视为数据)。

这不是完全相同的情况,但有一些相似之处:http://mysql.rjweb.org/doc.php/staging_table

关于mysql - Galera:索引大数据时无法写入数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54002735/

相关文章:

sql-server - 一周大约有 7000 万次插入。我应该在我的列上使用什么索引?

mysql - Galera 集群中提交后的节点状态是什么

mysql - 我需要从 MSSQL 在 MYSQL 中创建一个表并插入/更新数据

mysql - Django 模型 ID 被 GenericForeignKey 的 ID 覆盖

mysql - 为什么 MySQL 不允许 M = D 的 DECIMAL(M,D) ?

MySQL查询分组和统计结果

postgresql - 可延迟的、不区分大小写的唯一约束

mysql - 在 SQL 语句中添加附加项会导致性能下降

cluster-computing - 错误 1047 (08S01) : WSREP has not yet prepared node for application use when I create database or use database

mysql - percona mysql xtradb集群启动不正常,节点重启不起作用