Задавайте вопросы, мы ответим
Вы не зашли.
Начитался о преимуществах Innodb перед MyISAM и решил попробовать ее в деле. Сконвертировал в Innodb одну из таблиц и обнаружил такой интересный момент - очень долго выполняется запрос UPDATE. Обновляю в таблице всего одну строку, при этом время выполнения запроса составляет от 40 до 80 мс, а иногда даже 150мс - 1.5сек!!! и очень редко бывает всего 4-5мс. В таблице всего 10 строк. Очень интересно, с чем связан такой долгий UPDATE и в чем тогда преимущество InnoDB перед MyISAM?
кстати, все настройки innodb стоят дефолтные.
Неактивен
Странные у вас числа получаются. Приведите структуру таблицы и запрос апдейт. Сколько времени он выполняется на MyISAM? Какая ОС?
Неактивен
Ubuntu 10.04 32bit. на MyISAM выполняется в среднем за 3мс. Запрос не скажу, т.к. выполняю его через ActiveRecord в Yii-фреймворке.
структура таблицы:
Неактивен
Аналогичный INSERT выполняется быстро? Какое железо? Нагружен ли сервер в это время? Какая производительность дисков?
Неактивен
У меня виртуальный сервер в облаке у Селектела.
Попробовал сделать 10 инсертов (каждый отдельной транзакцией). Время(в сек):
0.129
0.0051
0.0026
0.0285
0.0025
0.0021
0.0176
0.0162
0.0457
0.0688
Неактивен
А вот время 10 транзакций. За каждую транзакцию вставляется по 10 строк. Время в секундах:
0.0321
0.0092
0.0395
0.3266
0.0128
0.0253
0.0195
0.0667
0.0278
0.0262
Параметр innodb_flush_log_at_trx_commit равен 1. Если я правильно понимаю, то в этом случае после каждого коммита данные пишутся на диск. Попробовал изменить значение innodb_flush_log_at_trx_commit на 2. В этом случае вроде как данные пишутся на диск каждые несколько секунд, но не при каждом коммите. Результаты ниже:
0.0079
0.0256
0.0081
0.0083
0.0072
0.24211
0.0068
0.0071
0.0074
0.0079
0.0077
Неактивен
Это может быть связано с работой дисковой системы в используемом облаке. То есть это не особенность просто Innodb, а Innodb+дисковая система.
Неактивен
Тупой вопрос — а памяти Вы InnoDB добавили? Или оставили 8 мегабайт по
умолчанию?
Неактивен
paulus написал:
Тупой вопрос — а памяти Вы InnoDB добавили? Или оставили 8 мегабайт по
умолчанию?
Нет, написал же, что с настройками памяти не игрался. Пробовал менять только innodb_flush_log_at_trx_commit. А есть ли смысл менять настройки памяти если общий размер всех таблиц Innodb составляет 80Кб?
Неактивен
Попробуйте поставить памяти таки побольше (например, 64M) и flush_log в ноль?
Неактивен