加速tokudb“alter table ... engine = TokuDB”

时间:2012-10-07 19:09:33

标签: mysql tokudb

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

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

有什么想法吗?

2 个答案:

答案 0 :(得分:4)

对我来说,这个解决方案是导出“进入outfile”并导入“load data infile”

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

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

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并非常快乐。

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

答案 1 :(得分:3)

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

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