3

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

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

有任何想法吗?

4

2 回答 2

4

对我来说,解决方案是导出“到 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,...);

row_format=tokudb_lzmaps:用或)尝试创建表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 并且非常开心。

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

于 2013-06-24T00:09:35.383 回答
3

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

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