SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 25.10.2011 18:06:22

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

Разный результат profile для одного запроса на двух серверах.

Помогите разобраться с такой аномалью:
Есть достаточно сложный запрос. На первом сервере (менее мощном, диски SATA, програмный RAID1) он выполняется примерно за 2 секунды максимум. На втором, новом, более мощном (SAS диски в аппартном RAID10) он же на этих же базах выполняется более 6 секунд. Смотрю profile на втором, наибольшее время это "Sending data" 5,5 сек. (уже стоит limit 2) при этом еще создается временная таблица. На первом сервере в profile нет упоминания временной таблицы и sending data 0.0005960. my.cnf копировал с первого на второй. Отличия только железе, файловой системе, путям к базам, и версии: на первом версия 5.1.57, на втором (новом) 5.1.58.
Если провожу тесты sysbench для mysql, то второй сервер выигрывает в несколько раз.

Неактивен

 

#2 25.10.2011 18:55:30

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

Re: Разный результат profile для одного запроса на двух серверах.

Нужно проверить сначала зависимость от версии - где-нибудь на одном сервере поставить обе версии mysql и проверить.

Неактивен

 

#3 26.10.2011 09:05:53

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

Re: Разный результат profile для одного запроса на двух серверах.

Сначала на новом сервере не обновил порты и поставил 5.1.56, потом заметил глюк, заметил разность версий, обновил порты и переставил MySQL, стало 5.1.58. Есть еще теория, что на старом сервере MySQL был скомпилирован с какими то опциями. Не подскажете как можно посмотреть эти опции?

Вот еще отличия (только отличия) в explain на двух разных серверах:
На старом (где быстро работает):
1    PRIMARY    contractor    const    PRIMARY,cst_id    PRIMARY    4    const    1    Using index
1    PRIMARY    stock_managers    eq_ref    PRIMARY    PRIMARY    4    aXXX.customers.cst_stm_id    1    Using where
1    PRIMARY    documents    range    PRIMARY,dcm_cst_id,dcm_contractor_cst_id,dcm_registered,dcm_datetime,dcm_id    dcm_datetime    4        7986    Using where


На новом (где тормозит):
1    PRIMARY    contractor    const    PRIMARY,cst_id    PRIMARY    4    const    1    Using index; Using temporary; Using filesort
1    PRIMARY    documents    range    PRIMARY,dcm_cst_id,dcm_contractor_cst_id,dcm_registered,dcm_datetime,dcm_id    dcm_datetime    4        7938    Using where; Using join buffer
1    PRIMARY    stock_managers    ALL    PRIMARY                23

Отредактированно vova-c (26.10.2011 11:05:28)

Неактивен

 

#4 26.10.2011 14:11:20

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

Re: Разный результат profile для одного запроса на двух серверах.

Может чудо, может нет. Обновил базу на новом со старого (старый сервак рабочий, онлайн). И тормоза пропали. Т.е. получается, что за некоторое время пользователем над базой были произведены действия, которые изменили profile и explain одного и того же запроса. По количеству строк в таблицах изменения в десятки штук (т.е. в пределах пары процентов).

Неактивен

 

#5 26.10.2011 14:20:36

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

Re: Разный результат profile для одного запроса на двух серверах.

Видно, что изменился порядок JOIN. Может быть изменилась статистика, на основании которой оптимизатор выбирает план исполнения запроса. Попробуйте использовать OPTIMIZE TABLE для обновления статистики индексов, а также STRAIGHT_JOIN для фиксации порядка JOIN. Убедитесь, что индексы идентичны в двух базах.

Неактивен

 

Board footer

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