gpt4 book ai didi

mysql - 为什么 TokuDB 和 InnoDB 插入比 MyISAM 慢

转载 作者:行者123 更新时间:2023-11-29 04:00:57 25 4
gpt4 key购买 nike

我准备了以下 SQL 语句来比较 MyISAM、InnoDB 和 TokuDB 的性能行为(INSERT 执行了 100000 次):

MyISAM:

CREATE TABLE `testtable_myisam` (`id` bigint(20) NOT NULL AUTO_INCREMENT, `value1` INT DEFAULT NULL, `value2` INT DEFAULT NULL, PRIMARY KEY (`id`), KEY `index1` (`value1`)) ENGINE=MyISAM DEFAULT CHARSET=utf8;

INSERT INTO `testtable_myisam` (`value1`, `value2`) VALUES (FLOOR(RAND() * 1000), FLOOR(RAND() * 1000));

InnoDB:

CREATE TABLE `testtable_innodb` (`id` bigint(20) NOT NULL AUTO_INCREMENT, `value1` INT DEFAULT NULL, `value2` INT DEFAULT NULL, PRIMARY KEY (`id`), KEY `index1` (`value1`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `testtable_innodb` (`value1`, `value2`) VALUES (FLOOR(RAND() * 1000), FLOOR(RAND() * 1000));

托库数据库:

CREATE TABLE `testtable_tokudb` (`id` bigint(20) NOT NULL AUTO_INCREMENT, `value1` INT DEFAULT NULL, `value2` INT DEFAULT NULL, PRIMARY KEY (`id`), KEY `index1` (`value1`)) ENGINE=TokuDB DEFAULT CHARSET=utf8;

INSERT INTO `testtable_tokudb` (`value1`, `value2`) VALUES (FLOOR(RAND() * 1000), FLOOR(RAND() * 1000));

一开始InnoDB的INSERT性能比MyISAM慢了将近50倍,TokuDB比MyISAM慢了40倍。

然后我弄清楚InnoDB 上的“innodb-flush-log-at-trx-commit=2”设置,使其INSERT 行为与MyISAM 相似。

问题是,我应该在TokuDB上做什么?我敢打赌 TokuDB 的 INSERT 性能不佳也是由于某些设置不当造成的,但我无法找出原因。

------------ 更新------------

感谢tmcallaghan的评论,我修改了我的设置为“tokudb_commit_sync=OFF”,现在TokuDB在小数据集上的插入率似乎有意义(一旦我弄清楚以下问题,我将在大数据集上执行它们):

但是,与 MyISAM 和 InnoDB 相比,TokuDB 的选择性能仍然与以下 SQL 相比(其中 ? 被我的模拟器替换为不同的 Int):

SELECT id, value1, value2 FROM testtable_myisam WHERE value1=?; 
SELECT id, value1, value2 FROM testtable_innodb WHERE value1=?;
SELECT id, value1, value2 FROM testtable_tokudb WHERE value1=?;

在百万数据集上,MyISAM 和 InnoDB 分别花费 10 和 15 秒的每 10k SELECT 语句,但 TokuDB 需要大约 40 秒。

我是否遗漏了一些其他设置?

提前致谢!

最佳答案

这听起来不像是一个非常有趣的测试(100,000 行并不多,而且您的插入不是并发的),但这是您正在寻找的设置。

发出“set tokudb_commit_sync=0;”将在提交操作时关闭 fsync()。请注意,此模式下没有持久性保证。

正如我之前提到的,TokuDB 的优势是索引比 RAM 大得多的数据,而这个测试不是。

关于mysql - 为什么 TokuDB 和 InnoDB 插入比 MyISAM 慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21863823/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com