【问题标题】:Galera: Cannot write to database when indexing large dataGalera:索引大数据时无法写入数据库
【发布时间】:2019-01-02 07:32:03
【问题描述】:

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

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

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

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

谢谢

【问题讨论】:

    标签: mysql database-indexes galera


    【解决方案1】:

    我认为你错过了一步。

    1. (一次性)创建表NewData,架构为Data,但没有索引。
    2. 插入NewData
    3. 创建表 `Empty(再次类似于 Data,但没有任何索引)
    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
    • 交换表,以便定期为该表(以新名称)建立索引,然后用于替换活动表(始终被视为Data)。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-07
      • 2022-11-23
      • 1970-01-01
      • 2017-12-01
      • 1970-01-01
      • 2020-04-03
      • 2010-09-05
      相关资源
      最近更新 更多