【问题标题】:Speed up tokudb "alter table ... engine=TokuDB”加速 tokudb “alter table ... engine=TokuDB”
【发布时间】:2013-06-24 08:37:46
【问题描述】:

我正在尝试将 4 亿行的 Innodb 表转换为 tokudb 引擎。当我从"alter table ... engine=TokuDB" 开始时,事情一开始运行得非常快,(使用 SHOW PROCESSLIST)我看到它每 10 秒读取大约 100 万行。但是一旦我达到大约 19-2000 万行,它就会开始减慢读取速度,更像是每隔几秒就有 10k 行。

是否有任何 mysql 或 tokudb 变量会影响 ALTER TABLE 到 tokudb 工作的速度?我尝试了tmp_table_size 和其他一些,但似乎无法克服这个障碍。

有什么想法吗?

【问题讨论】:

    标签: mysql tokudb


    【解决方案1】:

    对我来说解决方案是导出“到outfile”并导入“load data infile”

    这对我来说快了几个数量级(1.1 亿条记录)。每次我修改大型 tokudb 数据库(更改表)时,都需要很长时间(~30k/sec)。 完全导出和导入速度更快(~500k/sec) 将更改表时间从几小时缩短到几分钟。

    从 innodb 转换或更改本机 tokudb(任何更改表)时都是如此。

    select a.*,calcfields from table1 a into outfile 'temp.txt';
    create table table2 .....<br>
    load data infile 'temp.txt' into table table2 (field1,field2,...);
    

    ps:用row_format=tokudb_lzmatokudb_uncompressed 尝试创建表)。您可以快速尝试 3 种方法(您需要执行操作系统级别的目录 ls 来查看大小)。我发现离线索引也有帮助。

    set tokudb_create_index_online=off;
    create clustering index field1 on table2(field1); (much faster)
    

    当您了解何时使用多个集群索引时,它们会大有不同。

    我正在使用 GUI 工具来更改表以更改索引(每次等待数小时) 手工操作让事情变得更有效率(我花了几天时间通过 GUI 无处可去,在 30 分钟内完成)

    使用 5.5.30-tokudb-7.0.1-MariaDB 并且非常开心。

    希望这可以在实验时对其他人有所帮助。对于原始提问者来说显然已经很晚了。 唯一现有的回应对我来说根本没有建设性。 (问题是)

    【讨论】:

    • 仅供参考:查看您的第一个答案后,请考虑改进答案的格式。谢谢和欢迎!
    【解决方案2】:

    这里是重要的变量,请确保在开始操作之前全局设置它们或在执行存储引擎更改的会话中本地设置它们:

    • tokudb_load_save_space :默认关闭,除非您的磁盘空间不足,否则应该不理会。​​li>
    • tokudb_cache_size :如果取消设置,TokuDB 将为其自己的缓存机制分配 50% 的 RAM,我们通常建议不要使用此设置。当您在现有服务器上运行时,您需要确保不会在 TokuDB、InnoDB 和 MyISAM 之间过度使用内存。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-12
      • 2014-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多