Снижение скорости вставки по мере роста таблицы в mysql

Я пытаюсь лучше понять скорость вставки и шаблоны производительности в 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 до разумного значения: alt text

7
задан David Cournapeau 30 September 2010 в 05:18
поделиться