【问题标题】:Want to improve innodb insertion performance想提高innodb插入性能
【发布时间】:2021-08-01 12:18:48
【问题描述】:

我有 24 GB 内存、centos 7 操作系统、mariadb 10.3 版本数据库和 1TB ssd linux 服务器,我正在运行我的 cpp 脚本和 mariacpp 连接器来在表中插入数据,我有大约 50000 个表并且只想在来自这 50000 个表的 5000 个表,但是当我使用 cpp 线程和 mariacpp 连接器运行我的脚本时,我只能得到 50 次插入/秒。这是非常低的,所以我想提高 InnoDb 插入性能。所以请建议我任何配置和任何其他方式。 我当前的 InnoDB 配置:

Innodb_read_io_threads=64;
innodb_write_io_threads=64  ;
innodb_buffer_pool_size=16G;
innodb_buffer_pool_load_at_startup=ON;
innodb_log_file_size = 1G ;
innodb_log_files_in_group=10;
innodb_file_per_table=1;
innodb_log_buffer_size=1G;
innodb_flush_method=O_DIRECT;
innodb_flush_log_at_trx_commit=2;
skip-innodb_doublewrite ;
innodb_io_capacity = 2000;
innodb_io_capacity_max = 3000;
innodb_flush_sync=1;

我尝试了许多与事物相关的变量,但没有改进,我使用 Alter 表查询将所有表从 MyISAM 更改为 InnoDB。

【问题讨论】:

    标签: c++ performance mariadb innodb insertion


    【解决方案1】:
    innodb_log_buffer_size=1G
    

    这可能是危险的高。将其降低到 RAM 的 1%。

    拥有 50K 表通常是一种糟糕的架构设计模式;请解释一下你在做什么。

    有多种方法可以快速完成INSERTs

    • LOAD DATA INFILE -- 但前提是您已经将数据保存在 CSV 文件中。
    • 批处理 INSERT -- INSERT INTO t (...) VALUES (1,2), (3,4), ... -- 一次超过 1000 行,您会陷入“收益递减和其他低效问题。
    • 将多个INSERTs 放入一个事务中。这也存在收益递减和效率低下的问题。

    您雇用了哪些人? (然后我们可以进一步批评。)

    请为其中一张桌子提供SHOW CREATE TABLE。可能有什么会有所帮助的线索。 (一个例子:很多不必要的索引。)

    描述您的磁盘子系统——HDD vs SSD;袭击;等等

    【讨论】:

      猜你喜欢
      • 2018-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-05
      • 1970-01-01
      • 1970-01-01
      • 2021-08-31
      • 1970-01-01
      相关资源
      最近更新 更多