Я пытаюсь лучше понять скорость вставки и шаблоны производительности в mysql для пользовательского продукта. У меня есть две таблицы, к которым я продолжаю добавлять новые строки. Две таблицы определены следующим образом:
CREATE TABLE events (
added_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
id BINARY(16) NOT NULL,
body MEDIUMBLOB,
UNIQUE KEY (id)) ENGINE InnoDB;
CREATE TABLE index_fpid (
fpid VARCHAR(255) NOT NULL,
event_id BINARY(16) NOT NULL UNIQUE,
PRIMARY KEY (fpid, event_id)) ENGINE InnoDB;
И я продолжаю вставлять новые объекты в обе таблицы (для каждого нового объекта, Я вставляю соответствующую информацию в обе таблицы за одну транзакцию). Сначала я получаю около 600 вставок в секунду, но после ~ 30000 строк я получаю значительное замедление (около 200 вставок в секунду), а затем более медленное, но все же заметное замедление.
Я вижу это как таблица растет, число ожидания ввода-вывода становится все выше и выше. Моей первой мыслью была память, занятая индексом, но это делается на виртуальной машине, имеющей 768 МБ и предназначенной только для этой задачи (2/3 памяти не используются). Кроме того, мне трудно видеть, что 30000 строк занимают столько памяти, тем более только индексы (в любом случае весь каталог данных mysql <100 МБ). Чтобы подтвердить это, я выделил для виртуальной машины очень мало памяти (64 Мб), и картина замедления почти идентична (т.е. замедление появляется после того же количества вставок), поэтому я подозреваю некоторые проблемы с конфигурацией,
[РЕДАКТИРОВАТЬ]
Большое спасибо Эрику Холмбергу, он отлично справился. Вот графики после исправления innodb_buffer_pool_size до разумного значения: