我使用的galera集群有3个节点。我目前遇到以下问题。我想将超过5亿条记录写入数据库,例如表数据。具体步骤如下:
创建表newdata,使用schema作为数据,但不使用索引。
将5亿条记录写入这个表(使用多个线程进行写入,每个线程将写入一堆记录)。
完成后,为该表指定索引。
将数据重命名为olddata,将newdata重命名为data。
我目前的问题是在索引短语,其他服务不能写/读数据。在我增加之后 innodb_buffer_pool_size
其他节点可以读取数据,但仍然不能写入。
我已经进行了配置,这样写的作业可以在不同的节点上写入,而不是在其他api上,但问题仍然是一样的。我认为,如果一个节点的工作负载非常高,那么另一个节点的行为应该仍然正常。请告诉我为什么以及如何解决这个问题。
谢谢
1条答案
按热度按时间dtcbnfnu1#
我想你错过了一步。
(一次性)创建表
NewData
架构为Data
但没有索引。插入
NewData
.创建表
empty(同样类似于数据,但没有任何索引)
RENAME TABLE NewData TO ToIndex, Empty TO NewData;--现在可以继续摄入了。 ALTER TABLE ToIndex ADD INDEX ...
RENAME TABLE Data TO Old, ToIndex TO Data;关键是要有两件事: 不停地给没有索引的人写信
NewData. 交换表,以便周期性地对该表(使用新名称)进行索引,然后用于替换活动表(通常被视为
Data` ).这种情况并不完全相同,但有一些相似之处:http://mysql.rjweb.org/doc.php/staging_table