Задавайте вопросы, мы ответим
Вы не зашли.
Страниц: 1
Есть несколько среверов с FreeBSD 8.2 и 9.0 на одном из 8.2 стоит Mysql 5.1.55 и запрос (большая портянка с кучей join) на нем выполняется примерно за 4 секунды. На другом, более производительном сервере с точно таким же Mysql и тем же самым my.cnf этот запрос выполняется в 2 раза дольше, план у него немного другой. Единственное различие - в железе, версии ОС и файловой системе.
Вопрос. Может ли оптимизатор mysql строить различные планы в зависимости от железа?
Неактивен
Данные в таблицах одни и те же (количество строк)? Сборка MySQL одинаковая?
Неактивен
На "быстром" сервере рабочий проект, с него периодически беру дампы и ставлю на новый сервер. Сборка одинаковая.
Даже скажу больше: копировал на новый сервер бинарные файлы mysql со старого (mysqld + lib). Пробовал на другом старом сервере со схожим железом (разница только в версии ОС). Все равно планы разные.
Сейчас ставлю jail на старый сервер, в нем подниму mysql и посмотрю (то есть железо и ядро ОС будет не просто такое же и именно это же самое).
Еще пробовал percona на новом сервере: план точно такой же как у "медленного" mysql и в целом запрос тоже медленнее выполнялся. Хотя percona была в 1,5 раза быстрее mysql установленной на этом же сервере.
Отредактированно vova-c (06.09.2012 09:23:31)
Неактивен
Вобщем поднял jail на старом "быстром" сервере. Практически полностью туда скопировал родительскую систему. Все равно план строится другой и запрос медленно выполняется. Я в шоке.
Неактивен
Похоже ситуация проясняется. После перезапуска mysql на старом сервере на нем стало так же медленно как и на всех остальных.
Вывод: план и скорость работы разогретого пару суток mysql отличается от свежезапущенного/ненагруженного.
Неактивен
Попробуйте сделать OPTIMIZE TABLE на таблицы - пересчитается статистика индексов. Это может изменить план выполнения (правда не всегда на более быстрый).
Если вы уже знаете правильный план и знаете, что MySQL его не угадывает, сделайте SELECT STRAIGHT_JOIN (далее то же, что в запросе). В этом случае JOIN будет выполняться в порядке следования таблиц в запросе. Также USE INDEX может помочь.
Неактивен
OPTIMIZE - не помогал.
SELECT STRAIGHT_JOIN - помог на одном конкретном запросе (на котором я тестировал), для запроса с другими параметрами стало хуже.
Но мысль понятна, спасибо.
Неактивен
Страниц: 1