Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Непонятный блок в tkprof select text from view$ where rowid=:1 / 3 сообщений из 3, страница 1 из 1
18.02.2017, 12:38
    #39407085
Непонятный блок в tkprof select text from view$ where rowid=:1
Всем привет!
Хотел на своем примере визуализировать отличия запросов "с" и "без" переменных привязки. Написал это:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
DECLARE

data_var all_objects.object_name%type;
BEGIN

FOR I IN  1..100
  LOOP
    EXECUTE IMMEDIATE 'SELECT OBJECT_NAME FROM DBA_OBJECTS WHERE OBJECT_ID='||I ; 
  END LOOP;
  
END;
/



Сделал трассировку, пропустил через tkprof. Да действительно в этом случае было большое количество PARSE, чего я и ожидал, однако, в summary количество парсов вместо ожидаемых мною ~100 - ровно 300. Стал искать в чем причина и увидел в отчете сл. блок:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
SQL ID: grwydz59pu6mc
Plan Hash: 3684871272
select text 
from
 view$ where rowid=:1


call     count       cpu    elapsed       disk      query    current        rows
------- ------  -------- ---------- ---------- ---------- ----------  ----------
Parse      200      0.00       0.00          0          0          0           0
Execute    200      0.03       0.00          0          0          0           0
Fetch      200      0.00       0.00          0        400          0         200
------- ------  -------- ---------- ---------- ---------- ----------  ----------
total      600      0.03       0.01          0        400          0         200

Misses in library cache during parse: 0
Optimizer mode: CHOOSE
Parsing user id: SYS   (recursive depth: 2)

Rows     Row Source Operation
-------  ---------------------------------------------------
      1  TABLE ACCESS BY USER ROWID VIEW$ (cr=1 pr=0 pw=0 time=0 us cost=1 size=15 card=1)

********************************************************************************



Какая операция происходит в это время и что это значит? При запуске схожего цикла, но уже с использованием бинд-переменных, такой запрос присутствует тоже, однако вклад в summary он практически не вносит.

Большое спасибо!
...
Рейтинг: 0 / 0
18.02.2017, 14:22
    #39407125
Вячеслав Любомудров
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Непонятный блок в tkprof select text from view$ where rowid=:1
ALL_OBJECTS -- это VIEW, при разборе надо вытащить его определение
В новых версиях (с появлением Edition) оно еще и вызывает представление (_CURRENT_EDITION_OBJ), для него тоже надо вытащить определение.
Поэтому на каждый запрос из ALL_OBJECTS при разборе приходится два раза обращаться к VIEW$

Вот еще по теме: select text from view$ where rowid=:1
И наш дорогой Миллсап: Optimizing Oracle Performance: A Practitioner's Guide to Optimizing Response
...
Рейтинг: 0 / 0
19.02.2017, 12:40
    #39407405
Непонятный блок в tkprof select text from view$ where rowid=:1
Большое спасибо!
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Непонятный блок в tkprof select text from view$ where rowid=:1 / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]