zErmak
@zErmak
Ничего необычного

Почему процедура, в которой запрос выполняется дольше, чем «голый» запрос?

Столкнулся с проблемой: один и тот же запрос выполняется за разное время, если его запихнуть в процедуру и если его выполнить вне процедуры.

Возьмем для примера запрос вида SELECT 1;
Выполним его в клиенте, например в dbForge, как текст - 0мс
Выполним как Процедура - 200мс
Не верим клиенту? Ок, попробуем стандартную утилиту. Результат вы видите)
fba16101da1a4f77bd0cf554100bf274.jpg

Пробовал выполнять непосредственно на сервере - там отлично: и запрос, и процедура отрабатывают за 0 мс.
Читал по теме - были догадки насчет кодировки. Кодировку базы менял - результат не меняется.

Самое интересное, что есть процедуры, которые делают куда более сложные запросы и выполняются за 3-4мс на клиенте! Так что дело едва ли в соединении!

ОС FreeBSD
Mysql version 5.6.25

UPD: Итак, опытным путём выяснилось, что развернув бэкап базы с идентичными конфигами на Debian данная проблема магическим образом исчезает. Может быть есть знатоки FreeBSD, которые знают какие-то тонкости работы MySQL на данной ОС?

UPD2: Что выяснилось еще: если из консоли клиентом коннектиться к localhost - все отрабатывает быстро, но если подключиться к этому же серверу, но по внешнему ip (192.168.0.27) - даже вызывая из консоли на стороне сервера хранимые процедуры выполняются за 100мс!
  • Вопрос задан
  • 344 просмотра
Решения вопроса 1
zErmak
@zErmak Автор вопроса
Ничего необычного
Проблема решилась.

Методом тыка и переборкой выяснилось, что если сервер работает на FreeBSD, а параметр bind-address в my.cnf не указан, то возникает описанная выше ситуация. Ежели указать bind-address - все работает быстро, и процедура также отрабатывает за 1мс. При этом, на Ubuntu server или debian при отсутствии данного параметра сей баг не наблюдается.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы