首页 > 解决方案 > 将数据导入 MariaDB 10.3 的性能问题

问题描述

我正在尝试在 MariaDB 10.3 中对一些大型 InnoDB 表进行分区。对于每个表,将数据插入这些表需要几个小时。这似乎太慢了。

这些表最初是在 MySQL 5.5 中构建的,最近升级到 MariaDB 10.3。此升级过程没有报告错误或警告。

这些表平均包含大约 2400 万行,每个表大约有 600 Mb 的数据。

对这些表进行分区遵循以下过程:

  1. 制作一个按范围分区的目标表的空副本(在日期时间列上),其中包含两个分区,一个用于保存早于定义日期的数据,另一个分区用于保存小于 MAXVALUE 的数据。
  2. 在这个空表中创建 100 个每周分区。
  3. 通过 select 语句将数据插入到该表中:

    INSERT INTO new_table SELECT * from originalTable;

我使用的 MariaDB 版本是 10.3.9

全局变量是默认值,除了:

autocommit = OFF
global_max_allowed_packet = 1073741824
innodb_buffer_pool_size = 10737418240
innodb_doublewrite = OFF

这是在具有 65GB 内存和 40 个 3G 内核的 CentOS 版本 7.2.1511 上运行的。

我在网上看到导入 300Mb 需要几分钟,但我什至无法接近那个速度。我的表现似乎非常错误,但我无法确定问题。非常感谢我如何加快速度的任何想法?

标签: importmariadbpartitioning

解决方案


你为什么想要PARTITION很多桌子?与明显的智慧相反,分区并没有提供任何内在的性能优势。

你尝试过ALTER TABLE .. ADD PARTITION ....吗?这可能比 using 更快INSERT .. SELECT,尽管我怀疑底层操作可能是相同的。

OriginalTable有 2400 万(左右)行,对吗?(这将是一笔交易。)

你提到了很多核心;您是否尝试使用多个用户?

如果有几个这样的表,你最终会得到数百个分区。每个分区实际上是一个单独的“表”,因此需要table_open_cache增加等值。

分区表上的索引通常需要不同于非分区表上的索引。你有考虑到这一点吗?


推荐阅读