Oracle Database 10g VIEW производительность - PullRequest
0 голосов
/ 18 февраля 2009

У меня есть представление в одной из баз данных Oracle, выполнение которой занимает слишком много времени. Когда оператор выполняется, он не останавливается.

Есть ли в любом случае, что мы можем проверить производительность этого представления или как мы можем проверить, "зависает" ли сеанс оператора?

Спасибо, N2EE

UPDATE

Я понял, что проблема связана с базовым запросом в представлении. Спасибо Эдвину за исправление автоматической трассировки.

Ответы [ 5 ]

5 голосов
/ 18 февраля 2009

Скорее всего, ваш запрос выполняется очень медленно.

Вы можете увидеть, как выполняется запрос в базе данных, используя план объяснения.

Если у вас есть SQL * Plus, вы можете сделать это очень просто с помощью следующего оператора:

set autotrace traceonly

Затем введите запрос, и вы получите статистику по вашему запросу, например:

SQL> set autotrace traceonly
SQL>  select * from o_drops;

4461 rows selected.


Execution Plan
----------------------------------------------------------
Plan hash value: 3820245448

-----------------------------------------------------------------------------
| Id  | Operation         | Name    | Rows  | Bytes | Cost (%CPU)| Time     |
-----------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |         |  4287 |   280K|    11  (10)| 00:00:01 |
|   1 |  TABLE ACCESS FULL| O_DROPS |  4287 |   280K|    11  (10)| 00:00:01 |
-----------------------------------------------------------------------------


Statistics
----------------------------------------------------------
          1  recursive calls
          0  db block gets
        333  consistent gets
         48  physical reads
          0  redo size
     337057  bytes sent via SQL*Net to client
       2316  bytes received via SQL*Net from client
        299  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
       4461  rows processed

Если один из ресурсов очень велик, он может переписать запрос и / или добавить индексы к таблица, которую вы используете.

1 голос
/ 18 февраля 2009

Вы говорите о создании или замене существующего представления (т. Е. О выполнении оператора CREATE OR REPLACE VIEW ...) или о выборе из представления.

В первом случае, вероятно, что какой-то сеанс заблокировал его. Например, если кто-то обновляет или удаляет через представление, вы не сможете заменить его. В зависимости от вашей версии вы можете увидеть блокировщик, проверив столбец «BLOCKING_SESSION» в v $ session.

В последнем случае это не медленное представление, а запрос. Вид в значительной степени не имеет значения. Проверьте план объяснения (желательно с использованием DBMS_XPLAN.DISPLAY_CURSOR с sql_id из v $ sql) и посмотрите, что он задумал. v $ session_longops может дать указатель.

1 голос
/ 18 февраля 2009

Вам нужно взглянуть на производительность запроса, который составляет представление. Лучший способ сделать это - составить план объяснения для оператора SQL, используемого представлением. Это будет указывать, выполняет ли он полное сканирование таблицы или какое-то другое поведение, не оптимальное. Настройте запрос, и ваше представление должно работать намного лучше.

0 голосов
/ 28 ноября 2009

Создание отчета AWR на основе идентификаторов снимков

Существует два сценария sql для создания отчета AWR. 1. awrrpt.sql Если у нас только одна база данных Oracle, запустите сценарий awrrpt.sql sql.

  1. awrrpti.sql Если у нас более одного экземпляра Oracle (например, RAC), запустите сценарий awrrpti.sql, чтобы мы могли создать конкретный экземпляр для создания отчета awr.

Расположение скрипта sql для отчета AWR $ ORACLE_HOME / RDBMS / админ

0 голосов
/ 18 февраля 2009

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

...