Как вычислять запрос, который доступа к системам просмотра в Oracle?

dba.stackexchange https://dba.stackexchange.com/questions/18782

Вопрос

Для запроса, который возвращается, если есть какие -либо активные транзакции в текущем сеансе,

  SELECT COUNT(*) 
  FROM 
  v$transaction t
  INNER JOIN v$session s ON (t.ses_addr = s.saddr )      
  INNER JOIN v$mystat m  ON  (s.sid = m.sid )    
  WHERE ROWNUM = 1;

EXPLAIN показывает 0 стоимости. Однако это не кажется правдой. Периодически запуск этого запроса в среде с высокой загрузкой заставляет сервер тратить почти все свои ресурсы.

Как правильный способ оценить влияние таких запросов (я считаю, что такая же проблема возникает не только для этого конкретного запроса, а все, что включает в себя системные взгляды)?

Спасибо.

Это было полезно?

Решение

Некоторые (все?) Динамический V$ Виды основаны не на словарных таблицах, а на структурах памяти, поэтому статистика традиции не собирается, и, следовательно, оптимизатор не может вычислить стоимость запросов на эти представления.

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

В частности, для вашего запроса, похоже, вы хотите определить, невозможно ли ваш текущий сеанс. Альтернативные запросы описаны в следующем, поэтому вопросы:

Можете ли вы попробовать запросы в этих вопросах и рассказать нам, какой из них наиболее эффективен (в вашей среде с высокой нагрузкой)?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с dba.stackexchange
scroll top