2013-11-29 4 views
1

можно определить время выполнения SELECT без передача данных по сети?Реальное время выполнения запроса без сетевой передачи в Oracle

Я пытаюсь оптимизировать наши запросы на удаленном сервере, который действителен примерно в 1000 милях от меня, и для получения небольшого количества данных требуется несколько минут, чтобы добраться сюда.

SQL Developer сообщает мне время выполнения с включенным временем сетевого трасс. Такая же ситуация с 'set timing on'.

И я действительно смущен результатом от SELECT * FROM v$sql(area). Результаты этого варианта все те же, даже при изменении выполненных запросов. Документация Oracle говорит об столбце ELAPSED_TIME, в котором он включает разбор/выполнение/выборку времени, а также то, что эти результаты каким-то образом накапливаются.

Итак, возникает вопрос: есть ли простой способ получить реальное время выполнения запроса на сервере? Без времени передачи сети, независимо от того, был ли кеширован запрос или нет. Нет средних, никаких оценок. Просто время бетон одно выполнение запроса.

Thx заранее

+0

И я не имею в виду расходы по плану из EXPLAIN PLAN – Kousalik

+0

Подключитесь к серверу БД (SSH), откройте sqlplus и выполните запрос. –

+0

Или создайте процедуру PL/SQL, введите свой выбор и выполните процедуру. Таким образом вы передадите минимальные данные через сеть. Вы можете даже вызвать задание для запуска процедуры. –

ответ

0

Вы можете использовать

SELECT COUNT(*) FROM (SELECT * FROM MY_LARGE_TABLE WHERE ...) 

Ну, вы по-прежнему передавать один единственный номер по сети, но это должно быть незначительным.

+0

Я думаю, что этот подход заслуживает внимания, потому что мы понятия не имеем, какая оптимизация будет использоваться сервером, потому что в этом случае он фактически будет не нужно принимать таблицы. Он может рассчитывать только на доступ к индексам или статистике или независимо от того, что делает Oracle. – Kousalik

+0

Вы правы, Oracle может оптимизировать запрос. Тогда я также предлагаю выполнить запрос внутри процедуры, как было предложено выше. –

3

Выполнение запросов Oracle работает как шаблон дизайна производителя-потребителя. Если сетевое соединение «застряло», то процесс сеанса Oracle блокируется ОС. Вы должны выполнять запросы непосредственно на сервере БД (либо из sqlplus, либо через PL/SQL).

Предложение: забудьте о времени как показателя для оптимизации - посмотрите на получение буфера и на чтение диска, это покажет вам, сколько страниц памяти пришлось обрабатывать при оценке запроса. Эти показатели являются инвариантными (независимыми) к текущей нагрузке сервера БД.

Если сетевые круговые поездки имеют значительные накладные расходы, попробуйте изменить интерфейс. Используя коллекции, вложенные таблицы или сложные типы, вы можете уменьшить количество ожиданий сети.

+0

Thx, но причина, почему я пытаюсь решить эту проблему, немного глубже. Это всего лишь часть профилирования всего серверного приложения со многими слоями, поэтому мы теперь устраняем возможные причины наших проблем с производительностью. – Kousalik

Смежные вопросы