我正在尝试将4亿行Innodb表转换为tokudb引擎。当我从"alter table ... engine=TokuDB"
开始时,事情在开始时运行得非常快,(使用SHOW PROCESSLIST)我看到它每10秒读取大约100万行。但是一旦我达到大约19到2000万行,它就会开始减慢读取速度,并且每隔几秒就更像是10k行。
是否存在影响ALTER TABLE
tokudb工作速度的mysql或tokudb变量?我尝试了tmp_table_size
和其他一些但似乎无法克服这个障碍。
有什么想法吗?
答案 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_lzma
或tokudb_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)
以下是重要的变量,确保它们在开始操作之前全局设置,或者在执行存储引擎更改的会话中本地设置: