два вопроса о скорости. Откуда такое время?

29 ноября 2008 в 22:09

Перевёл сайт на Друпал, возникают вопросы.
Посмотрел время загрузки страниц в Devel.
Выделяется выполнение sess_vrite

Почему этот запрос может быть настолько дольше других?
Что делать?
Подскажите.

Сразу ещё один вопрос.
Часто встречаются рекомендации перевести некоторые таблицы в InnoDB.
А какие таблицы лучше перевести а какие оставить как есть?

Сергей.

Комментарии

Риску предположить что у Вас таблица сессий переполнилась большим кол-вом записей. ЛИБО она просто повреждена. Восполсьзуйтесь каким нибудь инструментом администрированя БД и проверьте это.

29 ноября 2008 в 22:49

Очистил таблицу (предварительно проэкспериментировав на Денвере и сделав резервную копию)
Вроде стало немного лучше, но всё равно слишком много.
На денвере такого нет.
Посмотрел состояние MySQL на хостинге.
Вот некоторые из строк которые выделены красным цветом:
Innodb_buffer_pool_reads 8,451 Количество последовательных запросов на чтение, которые InnoDB не смог выполнить из буферного пула и использовал постраничное чтение.

Innodb_row_lock_time_avg 2,948 Среднее время ожидания блокировки строк (в миллисекундах).

Innodb_row_lock_time_max 29 k Максимальное время ожидания блокировки строк (в миллисекундах).

Innodb_row_lock_waits 32 Общее количество ожиданий блокировки строк.

Handler_read_rnd 226 M Количество запросов, на чтение строки, основанных на ее позиции. Большое значение переменной может быть обусловлено частым выполнением запросов использующих сортировку результата, выполнением большого числа запросов требующих полного сканирования таблиц, наличием объединений не использующих индексы надлежащим образом.

Handler_read_rnd_next 12 G Количество запросов на чтение следующей строки из файла данных. Данное значение будет высоким, при частом сканировании таблиц. Обычно это означает, что таблицы не проиндексированы надлежащим образом или запросы не используют преимущества индексов.

Slow_launch_threads 37 Количество потоков, на создание которых потребовалось более чем slow_launch_time секунд.

Select_full_join 287 k Количество запросов-объединений, выполненных без использования индексов. Если значение переменной не равно 0, рекомендуется проверить индексы таблиц.

Select_range_check 1,873 Количество запросов-объединений, выполненных с использованием поиска по диапазону для выборки строк из вторичной таблицы. Если значение переменной не равно 0, рекомендуется проверить индексы таблиц.

Только начал читать книго про PHP, и кажется пора браться за MySQL!

Может кто подскажет в каком направлении искать?

Переделать назад InnnoDB MISAM?

( сайт небольшой и пока вроде работает)

Сергей.

30 ноября 2008 в 11:32

Если нет понимания механизма работы InnoDB, то лучше использовать предлагаемый по умолчанию движок MyISAM.

30 ноября 2008 в 17:51

axel wrote:
Если нет понимания механизма работы InnoDB, то лучше использовать предлагаемый по умолчанию движок MyISAM.

Да, похоже что так.

30 ноября 2008 в 18:19

Разница между InnoDB и MyISAM в том как блокируются записи. Первый использует блокировку на уровне записи, второй на ровне таблицы. То есть во втором случае, пока таблица заблокирована НИКТО не может произветси чтение запись из таблицы.

Выбор между этими двумя параметрами должен быть продиктован нагруженностью проекта и обьемом таблицы.
Если у Вас проект с большим колл-вом посетителей которые оставляют много комментариев или иного другого контента то в серьез стоит задуматься о переходе на InnoDB.

В ином случае, использовать myisam. В общем случае выборка из этого типа таблиц осуществляется быстрее.

ПЕрвым звоночком о том что Вам пришло время менять тип таблицы являются
такие параметры как
SHOW STATUS LIKE 'Tible%'
Table_locks_immediate
Table_locks_waited

Первый параметр - это параметр сколько блокировок было выполнено немедленно. Второй параметр, это кол во запросов которые ждали своей очереди. Если Table_locks_waited велико(смотрите отношение к Table_locks_immediate) и у Вас есть претензии к производительности - возможно пришло время менять тип таблицы.
если второй параметр

30 ноября 2008 в 18:50

спасибо, уже становится понятнее.
Пока сделал как было (перевел две таблицы назад в MyISAM)
И почему-то всё заработало быстро.
Може быть первоначально была какая-то ошибка?
Посещаемость сайта пока небольшая: 300-500 чел/ в сутки.
А там видно будет.

спасибо всем, Сергей.

30 ноября 2008 в 19:08