![]() |
Задавайте вопросы, мы ответим
Вы не зашли.
Всем привет!
Попытался искать ответ в вебе, но не нашел: при выполнении хранимой процедуры в консольном клиенте MySQL последний выводит в результате две статистики:
637 rows in set (0.85 sec)
Query OK, 0 rows affected (8.39 sec)
В чем разница между этими двумя временными показателями? Первый - реальное время работы процедуры, второе - время вывода результатов процедуры клиентом? Где про это почитать?
У меня, как можно заметить, второй показатель в 10 раз больше первого, пытаюсь понять, где что просело...
Отредактированно FiMko (24.03.2012 18:49:55)
Неактивен
Строчки относятся к двум запросам, выполняемым внутри процедуры.
Неактивен
rgbeast написал:
Строчки относятся к двум запросам, выполняемым внутри процедуры.
Хм... похоже, что Query OK, X rows affected (X sec) все же относится к самой процедуре:
Отредактированно FiMko (24.03.2012 19:52:37)
Неактивен
А что еще есть в процедуре, кроме запроса? Попробуйте профилирование: http://webew.ru/articles/2732.webew
Неактивен
rgbeast написал:
А что еще есть в процедуре, кроме запроса? Попробуйте профилирование: http://webew.ru/articles/2732.webew
Спасибо, сейчас буду смотреть, в процедуре убрал решительно все кроме "проблемного запроса", многие замечают, что использование переменных может отрицательно влиять на производительность хранимых процедур, мне не помогло. Сам запрос, к сожалению, привести не могу - очень комплексный, понадобится выкладывание всей схемы базы данных и прочее и прочее. Но в нем только несколько JOIN с подзапросами, не более.
А как можно использовать профилирование применительно к процедурам? Выводит для всей процедуры за раз
Отредактированно FiMko (24.03.2012 21:12:44)
Неактивен
Да, процедуры профилировать не очень полезно - видно только время выполнения отдельных запросов в процедуре.
Может быть тратится время на передачу данных. Куда девается результат SELECT?
Неактивен
rgbeast написал:
Да, процедуры профилировать не очень полезно - видно только время выполнения отдельных запросов в процедуре.
Может быть тратится время на передачу данных. Куда девается результат SELECT?
Да, тоже первое, что пришло на ум - передача данных, но подозрительно это очень, в 10 раз падает. Результат SELECT просто выводит из хранимой процедуры полученное множество. В сети то там, то здесь всплывают подобные нарекания - запрос работает быстро сам по себе и поразительно медленно в процедуре. В MSSQL человек решил установив ANSI_NULLS в ON, подозреваю, что в MySQL тоже к-н проблемы с конфигурацией или что-то вроде, не с передачей данных.
Отредактированно FiMko (24.03.2012 21:13:26)
Неактивен
В MySQL практически нет параметров, конфигурирующих поведение процедур.
Неактивен
Собственно, о чем я говорю - комплексный запрос, проблема воспроизводится на тривиальнейшем примере:
Отредактированно FiMko (24.03.2012 21:46:10)
Неактивен
Значит у вас нет проблемы - просто медленно работает терминал и консольный клиент.
Неактивен
rgbeast написал:
Значит у вас нет проблемы - просто медленно работает терминал и консольный клиент.
Да, похоже... перебдел я. rgbeast, большое спасибо!
Неактивен