mysql - 加速tokudb "alter table ... engine=TokuDB”

标签 mysql tokudb

我正在尝试将一个 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_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 并且非常开心。

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

关于mysql - 加速tokudb "alter table ... engine=TokuDB”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12771932/

相关文章:

python - 使用多个线程对超过 3 亿行的 Mysql 表执行 Select 查询(未命中索引)?

c# - 多开闭还是单开闭?

php - 在 3 个日期范围内搜索记录

php 包括不在主机服务器上工作但在本地(xampp)服务器上工作

MySql 存储过程循环游标 - 语法错误

mysql - 从 MySQL 切换到 MariaDB

mysql - 改进mysql加载数据

Mysql不返回数据但数据有

mysql - 如何使用 tokudb 每秒执行超过 50.000 次插入?