Разное время ответа для одного и того же оператора SQL в Oracle - PullRequest
0 голосов
/ 21 ноября 2018

Я выполняю простой оператор выбора в моей базе данных (подключенный с удаленного компьютера с помощью замазки).Я подключился к SQLPLUS из замазки и выполнил оператор select.Но каждый раз получая разные ответы, я запускаю запрос.Вот мои наблюдения.

1) Включен след (10046).«elapsed_time» в файле трассировки отличается для каждого выполнения запроса.

2) существует огромная разница в истекшем времени, которое отображается на консоли и находится в файле трассировки ...Из шпаклевки прошедшее время показывает ок.2-3 секундыПринимая во внимание, что истекшее время, зарегистрированное в трассировке, показывает истекшее время как 1 сек ... Какая разница между истекшим временем в консоли замазки и журналом трассировки?

Вывод на консоль Putty:


select * from WWSH_TEST.T01DATA_LINK

489043 выбранных строк.

Elapsed: 00: 02:57,16

Вывод файла трассировки:


выбор * из WWSH_TEST.T01DATA_LINK

call      count      cpu    elapsed     disk    query current    rows
----    -------  -------  --------- -------- -------- -------  ------
Parse         1     0.00       0.00        0        0       0       0 
Execute       1     0.00       0.00        0        0       0       0 
Fetch     32604     0.38       2.32    10706    42576       0  489043

На консоли замазки истекшее время отображается как 2,57 с.тогда как из файла трассировки истекшее время составляет 2,32. Почему мы видим эту разницу?

Более того, когда я выполняю один и тот же оператор SQL несколько раз, я могу видеть различное истекшее время в файлах трассировки (в пределах отОт 2,3 до 2,5 с). Что может быть причиной такой разницы во времени отклика, когда в базе данных вообще нет изменений.

Версия базы данных: 11.2.0.3.0

1 Ответ

0 голосов
/ 26 ноября 2018

Похоже, что разница во времени - это «обработка клиента» - в основном это время, затрачиваемое sqlplus на форматирование вывода.Кроме того, похоже, что ваш размер массива равен 15. Попробуйте запустить с большим размером массива, например 512 или 1024.

Механизм установки размера массива будет варьироваться от клиента к клиенту.В sqlplus:

set arraysize 1024

Время выборки не включает сетевое время, но если вы используете трассировку 8-го уровня

alter session set events '10046 trace name context forever, level 8';

, это даст вам события ожидания.Нужно искать сообщение SQL * Net от клиента, в основном это время, в течение которого база данных ожидает, чтобы ее попросили сделать что-то, например, получить следующий набор строк.

...