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

mysql INNODB вставляет очень медленно

Схема базы данных выглядит следующим образом.

 CREATE  TABLE  `items` (  
 `id` mediumint( 8  )  unsigned NOT  NULL  AUTO_INCREMENT ,
 `name` varchar( 45  )  NOT  NULL ,
 `main_type` tinyint( 4  )  NOT  NULL ,
 `rarity` tinyint( 4  )  NOT  NULL ,
 `stack_size` smallint( 6  )  NOT  NULL ,
 `sub_type` tinyint( 4  )  NOT  NULL ,
 `cost` mediumint( 8  )  unsigned NOT  NULL ,
 `ilvl` smallint( 6  )  unsigned NOT  NULL DEFAULT  '0',
 `flavor_text` varchar( 250  )  NOT  NULL ,
 `rlvl` tinyint( 3  )  unsigned NOT  NULL ,
 `final` tinyint( 4  )  NOT  NULL DEFAULT  '0',
 PRIMARY  KEY (  `id`  )  ) ENGINE  = InnoDB  DEFAULT CHARSET  = ascii;

Теперь выполнение вставки в эту таблицу занимает 0,22 секунды. Я не знаю, почему вставка одной строки занимает так много времени. Чтение действительно очень быстрое, около 0,005 секунды. Используя пример конфигурации отсюда dev mysql innodb в среднем от ~ 0,002 до ~ 0,005 секунды. Для меня нет смысла делать одну вставку более чем в 100 раз больше времени. Мой компьютер выглядит следующим образом. ОС: Debian Sid x86-x64, Mysql 5.1, ОЗУ: 4 ГБ ddr2, двухъядерный процессор 2,0 ГГц, жесткий диск 7200 об / мин, 32 МБ, кэш 640 ГБ.

Почему для SELECT * FROM требуется почти в 100 раз больше времени items; vs INSERT INTO items ...; никогда не будет иметь для меня никакого смысла. Это все еще небольшая таблица, всего 70 строк, и это длилось так долго, даже когда в ней было 0 строк.

Изменить: также в этой таблице есть несколько других таблиц, связанных с собой через идентификатор. Есть несколько из них, которые связаны с ним и делают on update = cascade; on delete = cascade ;. Я считаю, что это самая большая проблема. Если это так, я, вероятно, смогу войти и изменить его и выполнить индивидуальное удаление различных мелочей, когда они будут удалены. Скорость вставки кажется ~ 0,2 секунды, если я вставляю только items или я также делаю это на другой таблице, у которой есть ссылка внешнего ключа на основную.

Что ж, я предполагаю, что ваш InnoDB, вероятно, сломан. Вы можете проверить, нет ли

  • триггеры, которые будут выполнять медленную операцию при вставке
  • процессы, которые блокируют таблицу
  • внешние ключи / ограничения, указывающие на эту таблицу

Лучший способ полностью проверить базу данных на предмет того, что может вызвать такие проблемы, - это прочитать дамп схемы с помощью команды mysqldump.