SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 05.09.2012 22:27:17

vova-c
Участник
Зарегистрирован: 26.09.2011
Сообщений: 18

Разный EXPLAIN для одного запроса на разных серверах

Есть несколько среверов с FreeBSD 8.2 и 9.0 на одном из 8.2 стоит Mysql 5.1.55 и запрос (большая портянка с кучей join) на нем выполняется примерно за 4 секунды. На другом, более производительном сервере с точно таким же Mysql и тем же самым my.cnf этот запрос выполняется в 2 раза дольше, план у него немного другой. Единственное различие - в железе, версии ОС и файловой системе.

Вопрос. Может ли оптимизатор mysql строить различные планы в зависимости от железа?

Неактивен

 

#2 06.09.2012 08:06:39

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

Re: Разный EXPLAIN для одного запроса на разных серверах

Данные в таблицах одни и те же (количество строк)? Сборка MySQL одинаковая?

Неактивен

 

#3 06.09.2012 09:19:14

vova-c
Участник
Зарегистрирован: 26.09.2011
Сообщений: 18

Re: Разный EXPLAIN для одного запроса на разных серверах

На "быстром" сервере рабочий проект, с него периодически беру дампы и ставлю на новый сервер. Сборка одинаковая.
Даже скажу больше: копировал на новый сервер бинарные файлы mysql со старого (mysqld + lib). Пробовал на другом старом сервере со схожим железом (разница только в версии ОС). Все равно планы разные.
Сейчас ставлю jail на старый сервер, в нем подниму mysql и посмотрю (то есть железо и ядро ОС будет не просто такое же и именно это же самое).

Еще пробовал percona на новом сервере: план точно такой же как у "медленного" mysql и в целом запрос тоже медленнее выполнялся. Хотя percona была в 1,5 раза быстрее mysql установленной на этом же сервере.

Отредактированно vova-c (06.09.2012 09:23:31)

Неактивен

 

#4 06.09.2012 12:02:08

vova-c
Участник
Зарегистрирован: 26.09.2011
Сообщений: 18

Re: Разный EXPLAIN для одного запроса на разных серверах

Вобщем поднял  jail на старом "быстром" сервере. Практически полностью туда скопировал родительскую систему. Все равно план строится другой и запрос медленно выполняется. Я в шоке.

Неактивен

 

#5 06.09.2012 15:49:00

vova-c
Участник
Зарегистрирован: 26.09.2011
Сообщений: 18

Re: Разный EXPLAIN для одного запроса на разных серверах

Похоже ситуация проясняется. После перезапуска mysql на старом сервере на нем стало так же медленно как и на всех остальных.
Вывод: план и скорость работы разогретого пару суток mysql отличается от свежезапущенного/ненагруженного.

Неактивен

 

#6 06.09.2012 18:29:09

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

Re: Разный EXPLAIN для одного запроса на разных серверах

Попробуйте сделать OPTIMIZE TABLE на таблицы - пересчитается статистика индексов. Это может изменить план выполнения (правда не всегда на более быстрый).

Если вы уже знаете правильный план и знаете, что MySQL его не угадывает, сделайте SELECT STRAIGHT_JOIN (далее то же, что в запросе). В этом случае JOIN будет выполняться в порядке следования таблиц в запросе. Также USE INDEX может помочь.

Неактивен

 

#7 07.09.2012 15:53:42

vova-c
Участник
Зарегистрирован: 26.09.2011
Сообщений: 18

Re: Разный EXPLAIN для одного запроса на разных серверах

OPTIMIZE - не помогал.
SELECT STRAIGHT_JOIN - помог на одном конкретном запросе (на котором я тестировал), для запроса с другими параметрами стало хуже.
Но мысль понятна, спасибо.

Неактивен

 

Board footer

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