SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 14.06.2011 22:27:24

dimonrus66
Участник
Зарегистрирован: 14.06.2011
Сообщений: 5

Вопрос по Innodb

Начитался о преимуществах Innodb перед MyISAM и решил попробовать ее в деле. Сконвертировал в Innodb одну из таблиц и обнаружил такой интересный момент - очень долго выполняется запрос UPDATE. Обновляю в таблице всего одну строку, при этом время выполнения запроса составляет от 40 до 80 мс, а иногда даже 150мс - 1.5сек!!! и очень редко бывает всего 4-5мс. В таблице всего 10 строк. Очень интересно, с чем связан такой долгий UPDATE и в чем тогда преимущество InnoDB перед MyISAM?

кстати, все настройки innodb стоят дефолтные.

Неактивен

 

#2 14.06.2011 22:51:43

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: Вопрос по Innodb

Странные у вас числа получаются. Приведите структуру таблицы и запрос апдейт. Сколько времени он выполняется на MyISAM? Какая ОС?

Неактивен

 

#3 15.06.2011 00:02:39

dimonrus66
Участник
Зарегистрирован: 14.06.2011
Сообщений: 5

Re: Вопрос по Innodb

Ubuntu 10.04 32bit. на MyISAM выполняется в среднем за 3мс. Запрос не скажу, т.к. выполняю его через ActiveRecord в Yii-фреймворке.

структура таблицы:
http://habrastorage.org/storage/c4d9b227/ea00cb14/5330bec6/796809bb.gif

Неактивен

 

#4 15.06.2011 01:05:25

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: Вопрос по Innodb

Аналогичный INSERT выполняется быстро? Какое железо? Нагружен ли сервер в это время? Какая производительность дисков?

Неактивен

 

#5 15.06.2011 13:25:51

dimonrus66
Участник
Зарегистрирован: 14.06.2011
Сообщений: 5

Re: Вопрос по Innodb

У меня виртуальный сервер в облаке у Селектела.

Попробовал сделать 10 инсертов (каждый отдельной транзакцией). Время(в сек):
0.129
0.0051
0.0026
0.0285
0.0025
0.0021
0.0176
0.0162
0.0457
0.0688

Неактивен

 

#6 15.06.2011 14:42:12

dimonrus66
Участник
Зарегистрирован: 14.06.2011
Сообщений: 5

Re: Вопрос по Innodb

А вот время 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

Неактивен

 

#7 15.06.2011 23:46:44

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: Вопрос по Innodb

Это может быть связано с работой дисковой системы в используемом облаке. То есть это не особенность просто Innodb, а Innodb+дисковая система.

Неактивен

 

#8 17.06.2011 02:18:04

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Вопрос по Innodb

Тупой вопрос — а памяти Вы InnoDB добавили? Или оставили 8 мегабайт по
умолчанию?

Неактивен

 

#9 18.06.2011 07:44:51

dimonrus66
Участник
Зарегистрирован: 14.06.2011
Сообщений: 5

Re: Вопрос по Innodb

paulus написал:

Тупой вопрос — а памяти Вы InnoDB добавили? Или оставили 8 мегабайт по
умолчанию?

Нет, написал же, что с настройками памяти не игрался. Пробовал менять только innodb_flush_log_at_trx_commit. А есть ли смысл менять настройки памяти если  общий размер всех таблиц Innodb составляет 80Кб?

Неактивен

 

#10 18.06.2011 19:12:38

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Вопрос по Innodb

Попробуйте поставить памяти таки побольше (например, 64M) и flush_log в ноль?

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson