Я пытаюсь понять производительность запроса, который я написал в Oracle. В настоящее время у меня есть доступ только к SQLDeveloper и его таймеру выполнения. Я могу запустить SHOW PLAN, но не могу использовать функцию автоматической трассировки.
Написанный мною запрос выполняется примерно за 1,8 секунды, когда я нажимаю «выполнить запрос» (F9) в SQLDeveloper. Я знаю, что по умолчанию выполняется выборка только первых пятидесяти строк, но могу ли я хотя бы быть уверен, что 1,8 секунды составляют общее время выполнения плюс время доставки первых 50 строк моему клиенту?
Когда я помещаю этот запрос в хранимую процедуру (возвращая результаты через OUT REF CURSOR) и пытаюсь использовать его из внешнего приложения (службы отчетов SQL Server), выполнение запроса занимает более одной минуты. Я получаю аналогичную производительность, когда нажимаю «запустить скрипт» (F5) в SQLDeveloper. Кажется, что разница здесь заключается в том, что в этих двух сценариях Oracle должен передавать все строки назад, а не первые 50. Это заставляет меня думать, что между клиентским ПК и экземпляром Oracle существуют некоторые проблемы с сетевым подключением.
Мой запрос возвращает только около 8000 строк, поэтому эта производительность удивительна. Чтобы попытаться доказать мою теорию о латентности выше, я запустил такой код в SQLDeveloper, как этот:
declare
tmp sys_refcursor;
begin
my_proc(null, null, null, tmp);
end;
... И это продолжается около двух секунд. Опять же, часы выполнения SQLDeveloper точно указывают время выполнения запроса? Или я что-то упустил, и возможно ли, что на самом деле мой запрос нуждается в настройке?
Может кто-нибудь предложить мне какое-либо понимание этого на основе ограниченных инструментов, которые у меня есть? Или я должен попытаться привлечь администратора базы данных для дальнейшего анализа?