Назад | Перейти на главную страницу

Пик пропускной способности MyISAM при вставке 12000 записей

Я тестирую производительность базы данных с массовыми вставками записей.

Обе системы идентичны, за исключением механизма хранения.

**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 сначала записывает все в журнал транзакций. Попав в журнал, транзакции применяются к самой базе данных. Так что, если сервер выйдет из строя в середине транзакции, он может воспроизвести журнал (повторно применить транзакции), чтобы данные были согласованы.

Фактически это означает, что все данные дважды записываются на диск.

Если ваши вставки не помещаются в журнал, вам придется подождать, пока транзакции из журнала не будут сброшены в базу данных. Это может быть причиной такого резкого скачка производительности.

(Да, и обратите внимание на размер журнала. Если вы сделаете его слишком большим, восстановление после сбоя сервера может занять много времени)