我正在尝试将一个 4 亿行的 Innodb 表转换为 tokudb 引擎。当我从 "alter table ... engine=TokuDB"
开始时,事情一开始运行得非常快,(使用 SHOW PROCESSLIST)我看到它每 10 秒读取大约 100 万行。但是一旦我达到大约 19-20 百万行,它就会开始减慢读取速度并且更像是每隔几秒读取 10k 行。
是否有任何 mysql 或 tokudb 变量会影响 ALTER TABLE
to tokudb 的工作速度?我尝试了 tmp_table_size
和其他一些方法,但似乎无法越过这个障碍。
有什么想法吗?
最佳答案
我的解决方案是导出“到输出文件”并导入“加载数据到文件”
这对我来说快了几个数量级(1.1 亿条记录)。每次我修改大型 tokudb 数据库(更改表)时,它都需要很长时间(~30k/秒)。 完全导出和导入更快(~500k/秒) 将 alter table 时间从几小时减少到几分钟。
从 innodb 转换或更改 native 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_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 并且非常开心。
希望这可以在实验时帮助其他人。对于原始提问者来说显然已经很晚了。 唯一存在的回应对我来说根本没有建设性。 (问题是)
关于mysql - 加速tokudb "alter table ... engine=TokuDB”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12771932/