TokuDB和InnoDB插入很慢我已經準備好下面的SQL語句來比較的MyISAM,InnoDB的,和TokuDB(INSERT爲100000次執行)的性能行爲:爲什麼相比MyISAM
的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));
TokuDB:
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性能也是由一些不合適的設置引起的,但我無法弄清楚原因。
--------- --------- UPDATE
由於tmcallaghan的評論,我已經修改我的設置爲 「tokudb_commit_sync = OFF」,現在插入TokuDB率在小數據集上似乎是有意義的(一旦我找出以下問題,我將在大數據集上執行它們):
但是,與MyISAM和InnoDB相比,TokuDB的選擇性能仍然是有線的,被我的模擬器替換爲不同的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=?;
在一百萬個數據集中,每個10k SELECT語句單獨由MyISAM和InnoDB花費10和15秒,但TokuDB需要大約40秒。
我是否錯過其他一些設置?
在此先感謝!
Offtopic。不是一個編程問題。這是更多的數據庫配置/調整。請嘗試使用DBA站點。 –
set unique_checks = off; ?? – Hackerman