Жаба для оракула висит на этом запросе: выберите sql_text из V $ sqltext_with_newlines где address = (выберите DECODE - PullRequest
2 голосов
/ 14 июля 2011

Зачем это?

select sql_text
from V$sqltext_with_newlines where
address = (select DECODE(RAWTOHEX(sql_address), '00', prev_sql_addr, sql_address
)
 from   V$session
 where username = :uname
 and sid = :snum)
ORDER BY piece

Я просто знаю, что он создан жабой и создает очень мощную производственную среду

Некоторые участники сеанса за столом показали это:

COUNT(0) EVENT
---------- ----------------------------------------------------------------
         1 smon timer
         1 db file parallel read
         1 pmon timer
         1 read by other session
         1 SQL*Net message to client
         1 PL/SQL lock timer
         2 SQL*Net break/reset to client
         2 PX Deq Credit: send blkd
         7 db file scattered read
         8 db file sequential read
        12 jobq slave wait
        14 PX Deq: Execution Msg
        30 rdbms ipc message
       333 SQL*Net message from client
       450 latch: library cache

1 Ответ

2 голосов
/ 14 июля 2011

Это выглядит как очень простой запрос, я бы удивился, если он действительно вызывает проблемы.Представления словаря данных часто используют десятки таблиц, но план выполнения для этого запроса имеет только 9 шагов в моей системе, и запрос выполняется очень быстро.Даже если оптимизатор полностью ошибся в плане, используемые таблицы не очень большие, поэтому не следует слишком медленно работать.

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

select elapsed_time/1000000 elapsed_seconds, cpu_time/1000000 cpu_seconds
    ,user_io_wait_time/1000000 user_io_wait_seconds, buffer_gets
    ,executions, v$sql.*
from v$sql
where lower(sql_text) like lower('%DECODE(RAWTOHEX(sql_address)%');

Ваш запрос, похоже, возвращает текущий выполняющийся оператор, хотя я не уверен точно, что использует TOADэто для.Может быть, это часть браузера сеанса или что-то?TOAD и все подобные инструменты запросов запускают много подобных запросов в фоновом режиме.Я никогда не видел, чтобы они сбивали сервер.Хотя с TOAD вполне возможно, что есть какая-то ошибка, из-за которой пользовательский интерфейс зависает и кажется, что он действительно усердно работает над запросом.

...