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