Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Не работает DBMS_XPLAN.DISPLAY_CURSOR / 15 сообщений из 15, страница 1 из 1
25.01.2013, 17:39
    #38125120
Игорь4325
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работает DBMS_XPLAN.DISPLAY_CURSOR
Не могу разобраться, подскажите что к чему

Запрос
Код: plsql
1.
SELECT 20, t.* FROM table(DBMS_XPLAN.DISPLAY_CURSOR(null,null,'ALLSTATS LAST')) t



Далее смотрим sql_id у него 2zptv97w67nn5:

Код: plsql
1.
2.
SELECT s.sql_id, s.child_number, s.SQL_TEXT FROM v$sql s
WHERE sql_text LIKE 'SELECT 20, t.* FROM table(DBMS_%'



Код: plsql
1.
select * from table(DBMS_XPLAN.DISPLAY_CURSOR('2zptv97w67nn5',null,'ALL'))



Возвращает пусто, почему?

Из документации

http://docs.oracle.com/cd/E14072_01/appdev.112/e10577/d_xplan.htm You can also use the table function DISPLAY_CURSOR to display the execution plan for any loaded cursor stored in the cursor cache.

Код: plsql
1.
2.
select * from v$sql_plan
where sql_id = '2zptv97w67nn5'



План содержит.

oracle 11.2.0.1
...
Рейтинг: 0 / 0
25.01.2013, 17:44
    #38125129
Игорь4325
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работает DBMS_XPLAN.DISPLAY_CURSOR
Ах да, простые запросы работают, а этот почему-то нет, баг или я чего-то недогоняю?
...
Рейтинг: 0 / 0
28.01.2013, 16:05
    #38127490
usolcew
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работает DBMS_XPLAN.DISPLAY_CURSOR
Игорь4325,

более того:)

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
11.2.0.1.ORCL112@SCOTT SQL> select /* DBMS_XPLAN */ sysdate from dual;

SYSDATE
---------
28-JAN-13

1 row selected.

SQL> select sql_id, child_number, substr(sql_text,1,100) from v$sql where sql_text like 'select /* DBMS_XPLAN */ sysdate from dual%';

SQL_ID        CHILD_NUMBER SUBSTR(SQL_TEXT,1,100)
------------- ------------ ----------------------------------------------------------------------------------------------------
6p0v5putxtqt8            0 select /* DBMS_XPLAN */ sysdate from dual

1 row selected.

SQL> select * from table(DBMS_XPLAN.DISPLAY_CURSOR('6p0v5putxtqt8',null,'ALL'));

no rows selected

SQL> select operation from v$sql_plan where sql_id = '6p0v5putxtqt8';

OPERATION
------------------------------
SELECT STATEMENT
FAST DUAL



смотрите SQL трейс - там простой фильтр:

Код: plsql
1.
select /* EXEC_FROM_DBMS_XPLAN */ case when upper(sql_text) like '%DBMS_XPLAN%' then 0 else 1 end case, SQL_ID, child_number from v$sql where SQL_ID ='6p0v5putxtqt8'
...
Рейтинг: 0 / 0
03.06.2013, 11:15
    #38283327
Paranoiac
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работает DBMS_XPLAN.DISPLAY_CURSOR
Нужна помощь!
Я уже признаю, что у меня руки из одного места растут, да и видимо тугодум, но поясните, что не так я делаю есть запрос
Код: plsql
1.
2.
3.
4.
5.
6.
SELECT /*+ ORDERED */
SUM(DECODE(A3.C_DT,1,(-A1.C_SUMMA),A1.C_SUMMA)) C_SUMMA,
MIN(A1.C_VALUTA) C_VALUTA FROM Z#TAKE_IN_DEBT A3, Z#VID_OPER_DOG A2,
Z#FACT_OPER A1 WHERE A1.COLLECTION_ID=2056613371 AND A1.C_OPER=A2.ID
AND A2.C_TAKE_DEBT=A3.COLLECTION_ID AND (A3.C_DEBT = 1984141 AND
(A1.C_DATE < to_date('06/02/2013 00:00:00','mm/dd/yyyy hh24:mi:ss')+1))


мне нужно получить на него A-ROWS и E-ROWS и все остальную статистику IO,делаю:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
SQL> SELECT /*+ gather_plan_statistics */ SUM(DECODE(A3.C_DT,1,(-A1.C_SUMMA),A1.C_SUMMA)) C_SUMMA, MIN(A1.C_VALUTA) C_VALUTA
  2  FROM Z#TAKE_IN_DEBT A3, Z#VID_OPER_DOG A2, Z#FACT_OPER A1
  3  WHERE A1.COLLECTION_ID=2056613371 AND A1.C_OPER=A2.ID AND A2.C_TAKE_DEBT=A3.COLLECTION_ID AND (A3.C_DEBT = 1984141 AND (A1.C_DATE < to_date('06/02/2013 00:00:00','mm/dd/yyyy hh24:mi:ss')+1))
  4  ;
 
   C_SUMMA   C_VALUTA
---------- ----------
   -977.25      43353


получаю:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SQL> select * from table(dbms_xplan.display_cursor(null,null,'iostats last'));
 
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
SQL_ID  9m7787camwh4m, child number 2
begin :id := sys.dbms_transaction.local_transaction_id; end;
NOTE: cannot fetch plan for SQL_ID: 9m7787camwh4m, CHILD_NUMBER: 2
      Please verify value of SQL_ID and CHILD_NUMBER;
      It could also be that the plan is no longer in cursor cache (check v$sql_p
 
8 rows selected


почему???
начинаю искать по тексту в v$sql,нахожу этот запрос( sql_id у этого запроса само собой отличен от этого же запроса с хинтом ordered)
делаю
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
SQL> select * from table(dbms_xplan.display_cursor('60u5823t3nvcf',0,'iostats last'));
 
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
SQL_ID  60u5823t3nvcf, child number 0
-------------------------------------
 SELECT /*+ gather_plan_statistics */
SUM(DECODE(A3.C_DT,1,(-A1.C_SUMMA),A1.C_SUMMA)) C_SUMMA,
MIN(A1.C_VALUTA) C_VALUTA FROM Z#TAKE_IN_DEBT A3, Z#VID_OPER_DOG A2,
Z#FACT_OPER A1 WHERE A1.COLLECTION_ID=2056613371 AND A1.C_OPER=A2.ID
AND A2.C_TAKE_DEBT=A3.COLLECTION_ID AND (A3.C_DEBT = 1984141 AND
(A1.C_DATE < to_date('06/02/2013 00:00:00','mm/dd/yyyy hh24:mi:ss')+1))
Plan hash value: 798328220
--------------------------------------------------------------------------------
| Id  | Operation                     | Name                          | Starts |
--------------------------------------------------------------------------------
|   0 | SELECT STATEMENT              |                               |      1 |
|   1 |  SORT AGGREGATE               |                               |      1 |
|   2 |   NESTED LOOPS                |                               |      1 |
|   3 |    NESTED LOOPS               |                               |      1 |
|   4 |     NESTED LOOPS              |                               |      1 |
|*  5 |      INDEX RANGE SCAN         | IDX_Z#TAKE_IN_DEBT_DBT_COL_DT |      1 |
 
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
|*  6 |      INDEX RANGE SCAN         | IDX_Z#VID_OPER_DOG_DEBT_ID    |      6 |
|*  7 |     INDEX RANGE SCAN          | IDX_Z#FACT_OPER_CALC          |      6 |
|   8 |    TABLE ACCESS BY INDEX ROWID| Z#FACT_OPER                   |      1 |
--------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
   5 - access("A3"."C_DEBT"=1984141)
   6 - access("A2"."C_TAKE_DEBT"="A3"."COLLECTION_ID")
   7 - access("A1"."COLLECTION_ID"=2056613371 AND "A1"."C_OPER"="A2"."ID" AND "A
              00:00:00', 'syyyy-mm-dd hh24:mi:ss'))
       filter("A1"."C_OPER"="A2"."ID")
 
34 rows selected


где??почему нет этих данных ввыводе,почему не рабоет с null,null, а только с прямым указанием на sql_id и дочерний курсор?
нужно ли оставлять хинт ordered?
заранее благодарен всем ответившим!
...
Рейтинг: 0 / 0
03.06.2013, 11:21
    #38283337
usolcew
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работает DBMS_XPLAN.DISPLAY_CURSOR
Paranoiac,

случаем не с AUTOTRACE запрос выполняете?
посмотрите что за запрос Oracle пытается вытащить по SQL_ID 9m7787camwh4m, child number 2
...
Рейтинг: 0 / 0
03.06.2013, 11:39
    #38283370
A.
A.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работает DBMS_XPLAN.DISPLAY_CURSOR
Paranoiacгде??почему нет этих данных ввыводе,почему не рабоет с null,null, а только с прямым указанием на sql_id и дочерний курсор?
нужно ли оставлять хинт ordered?

Потому что PL/SQL Deverloper выполняет sys.dbms_transaction.local_transaction_id; после твоего запроса.
display_cursor(null,null), в свою очередь, берет последний выполненный запрос в сессии. Делай тоже самое в SQL+, там не будет такой проблемы.
Хинт ordered влияет на порядок обработки таблиц и не имеет отношения к этой теме.
...
Рейтинг: 0 / 0
03.06.2013, 11:41
    #38283376
Paranoiac
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работает DBMS_XPLAN.DISPLAY_CURSOR
usolcew,
нет, автотрейс не включен
begin :id := sys.dbms_transaction.local_transaction_id; end;
я почему он вообще вызывается
...
Рейтинг: 0 / 0
03.06.2013, 11:42
    #38283379
Paranoiac
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работает DBMS_XPLAN.DISPLAY_CURSOR
A.,

а что это такое sys.dbms_transaction.local_transaction_id и зачем он его юзает?
...
Рейтинг: 0 / 0
03.06.2013, 11:45
    #38283391
Paranoiac
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работает DBMS_XPLAN.DISPLAY_CURSOR
Код: plsql
1.
This function returns the local (to instance) unique identifier for the current transaction


это вообще зачем делается?
...
Рейтинг: 0 / 0
03.06.2013, 11:51
    #38283407
Paranoiac
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работает DBMS_XPLAN.DISPLAY_CURSOR
A.,
а вообще спасибо большое,прояснил!!))
...
Рейтинг: 0 / 0
03.06.2013, 12:03
    #38283431
Paranoiac
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работает DBMS_XPLAN.DISPLAY_CURSOR
ах да, чуть не забыл,хинт gather_plan_statistics,конечно, хорош, но что если запрос долгоиграющий и ждать его выполнения нет никакой возможности?...пробовал установить statistics_level на all и делать explain plan, не помогло...кто-нибудь может объяснить почему?
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
31.07.2019, 15:55
    #39843558
Melkomyagkii_newbi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работает DBMS_XPLAN.DISPLAY_CURSOR
Paranoiacах да, чуть не забыл,хинт gather_plan_statistics,конечно, хорош, но что если запрос долгоиграющий и ждать его выполнения нет никакой возможности?...пробовал установить statistics_level на all и делать explain plan, не помогло...кто-нибудь может объяснить почему?

сорри за некромантию, но в гугле это первая тема с sql.ru про мою проблему. Заодно отвечу на этот вопрос - можно попробовать так:
Код: sql
1.
select dbms_sqltune.report_sql_monitor(sql_id => '34jfjj7sa0vwb', type => 'TEXT', report_level => 'ALL') as report from dual;

если там ничего нет = то хинт monitor поможет, но зачастую долгоиграющие запросы и так мониторятся.

А у меня проблема, что хоть запрос и выполняется около минуты, dbms_xplan.display_cursor возвращает:
автор22 ----------------------------------------------------------------------------------------------------------
23 | Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time |
24 ----------------------------------------------------------------------------------------------------------
25 | 0 | SELECT STATEMENT | | 1 | | 0 |00:00:00.01 |
26 | 1 | SORT AGGREGATE | | 0 | 1 | 0 |00:00:00.01 |
....................................................

т.е врет что ничего не вернулось и про время. Это баг?
...
Рейтинг: 0 / 0
31.07.2019, 16:27
    #39843580
Melkomyagkii_newbi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работает DBMS_XPLAN.DISPLAY_CURSOR
версия - 12.2.0.1.0
...
Рейтинг: 0 / 0
31.07.2019, 16:48
    #39843590
SeaGate
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работает DBMS_XPLAN.DISPLAY_CURSOR
Melkomyagkii_newbiт.е врет что ничего не вернулось и про время. Это баг?

PL/SQL функции приводят к некорректным A-time.
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
SQL> select /*+ gather_plan_statistics*/'x'--burn_cpu()
  2    from big
  3   where rownum <= 10
  4     and burn_cpu(id)=0;

'
-
x
x
x
x
x
x
x
x
x
x

Elapsed: 00:00:10.25
SQL>
SQL> select * from table(dbms_xplan.display_cursor(format=> 'allstats last'));

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
SQL_ID  azmk9tv93jjn4, child number 0
-------------------------------------
select /*+ gather_plan_statistics*/'x'--burn_cpu()   from big  where
rownum <= 10    and burn_cpu(id)=0

Plan hash value: 1743335423

--------------------------------------------------------------------------------------
| Id  | Operation           | Name | Starts | E-Rows | A-Rows |   A-Time   | Buffers |
--------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT    |      |      1 |        |     10 |00:00:00.13 |      23 |
|*  1 |  COUNT STOPKEY      |      |      1 |        |     10 |00:00:00.13 |      23 |
|   2 |   PARTITION HASH ALL|      |      1 |     10 |     10 |00:00:00.13 |      23 |
|*  3 |    TABLE ACCESS FULL| BIG  |      1 |     10 |     10 |00:00:00.13 |      23 |
--------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   1 - filter(ROWNUM<=10)
   3 - filter("BURN_CPU"("ID")=0)


Причем, в случае "чистого" PL/SQL Это еще можно отследить по V$SQLSTATS.PLSQL_EXEC_TIME, в случаях вызова SQL из PL/SQL уже не удастся (что правильно, см: https://jonathanlewis.wordpress.com/2019/03/21/lost-time/)
A-Rows неверный не попадался. Какой format в dbms_xplan.display_cursor? параллельные запросы требуют all, с учетом того, что это будет кумулятивная статистика. Что в v$sql_plan_statistics/v$sql_plan_statistics_all?
Правильный ли child_cursor подаётся в dbms_xplan.display_cursor?
...
Рейтинг: 0 / 0
01.08.2019, 15:02
    #39844135
Melkomyagkii_newbi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работает DBMS_XPLAN.DISPLAY_CURSOR
SeaGate,

спасибо, запрос с использованием пользовательских функций. Адаптивный план один, чайлдов не было. Формат allstats +outline. Вьюхи если еще обратятся посмотрим..
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Не работает DBMS_XPLAN.DISPLAY_CURSOR / 15 сообщений из 15, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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