Я тестирую производительность базы данных с объемной записью, вставляет.
Обе системы идентичны кроме механизма устройства хранения данных
**Database 1000 4000 12000**
MySQL_InnoDB 60.95330976 218.2572161 262.1174723
MySQL_MyISAM 88.55827134 307.503075 684.8142441
Метрика здесь является пропускной способностью, определенной как операции/секунда.
Как Вы видите при вставке 1 000 записей, оба очень похожи, снова в 4 000.
Не уверено, почему MyISAM пронзает этот высоко по сравнению с InnoDB в 12 000 рекордных вставок. Это могло произойти из-за размера буфера? Мне установили значения по умолчанию на уровне 8 МБ, и я решил, что и 1 000 записей и 4 000 записей в том буфере, но 120 000 записей превышают размер буфера 8 МБ. Это могло быть причиной экспоненциального повышения пропускной способности?
Я больше интересуюсь тем, почему MyISAM имеет этот экспоненциальный скачок в операциях/секунда в 12 000, вставляет, когда InnoDB, кажется, намного более линеен.
С помощью innodb вы можете заполнять журнал транзакций ( innodb_log_size
). При вставке InnoDB сначала записывает все в журнал транзакций. Попав в журнал, транзакции применяются к самой базе данных. Так что, если сервер выйдет из строя в середине транзакции, он может воспроизвести журнал (повторно применить транзакции), чтобы данные были согласованы.
На самом деле это означает, что все данные дважды записываются на диск.
Если ваши вставки не помещаются в журнал, вы должны подождать, пока транзакции из журнала не будут сброшены в базу данных. Это может быть причиной такого большого скачка производительности.
(Да, и обратите внимание на размер журнала. Если вы сделаете его слишком большим, восстановление после сбоя сервера может занять много времени)