Oracle mechanics

24.03.2013

flashback cursor

Filed under: bugs,heuristics,Oracle,shared pool — Игорь Усольцев @ 23:42
Tags: , ,

При рассмотрении AWR незначительно нагруженной системы была замечена потенциально неприятная вещь:

SQL ordered by Sharable Memory

Sharable Mem (b)   Executions   % Total   SQL Id
   1,107,305,151      435,718      8.59   3ncb946nuqnch
     246,287,584          500      1.91   0y84vjmqf0qc2

— дочерние курсоры первого запроса в сумме превосходят 1GB!

SQL ordered by Parse Calls

    Total Parse Calls: 123,171
    Captured SQL account for 203.7% of Total

Parse Calls   Executions   % Total Parses   SQL Id
    170,283      170,112           138.25   57547pzgf9pv0
     25,836      435,718            20.98   3ncb946nuqnch

— первый запрос 57547pzgf9pv0 парсится при каждом выполнении, второй 3ncb946nuqnch разбирается не так часто (что судя по нижеприведённым тестам не совсем обычно), но уже занимает в shared pool > 1GB

Все три вышеуказанные запросы — типа SELECT … FROM … AS OF SCN, при этом количество версий курсора впечатляет:

11.2.0.3@ SQL> select dbms_lob.substr(reason, dbms_lob.instr(reason,'') - dbms_lob.instr(reason,'') - 8, dbms_lob.instr(reason,'') + 8) as "REASON", count(*)
  from v$sql_shared_cursor
 where sql_id = '&&1'
 group by dbms_lob.substr(reason, dbms_lob.instr(reason,'') - dbms_lob.instr(reason,'') - 8, dbms_lob.instr(reason,'') + 8)
  5   order by count(*) desc
  6  ;
Enter value for 1: 57547pzgf9pv0

REASON                                                                           COUNT(*)
-------------------------------------------------------------------------------- --------
Flashback cursor(1)                                                                205423

Для таких flashback запросов есть Bug 10123661 : CURSOR SHARING OF «AS OF SCN» CURSORS, неисправленный до 11.2 включительно, со статусом 1 — Extremely desirable feature

Из комментариев другого Bug 6010070 : RECURSIVE INSERTS FROM MATERIALIZED VIEW ARE NOT SHARED:

The shared cursor code purposefully does not share cursors using flashback constructs (such as AS OF SNAPSHOT / AS OF SCN etc..)

— можно предположить, что многочисленные версии Flashback cursor — ожидаемое запрограммированное поведение, что проверяется простым тестом:

11.2.0.3.ORCL112@SCOTT SQL> var scn number;
SQL> select dbms_flashback.get_system_change_number scn from dual;

       SCN
----------
  30020260

SQL> exec :scn := 30020260;

PL/SQL procedure successfully completed.

SQL> select distinct sysdate  from emp as of scn :scn;

SYSDATE
---------
24-MAR-13

1 row selected.

SQL> /

1 row selected.

SQL> /

1 row selected.

SQL> /

1 row selected.

SQL> SELECT * FROM TABLE(dbms_xplan.display_cursor());

PLAN_TABLE_OUTPUT
-----------------------------------------------------------------------------
SQL_ID  du7fj13un9prg, child number 3
-------------------------------------
select distinct sysdate  from emp as of scn :scn

Plan hash value: 4053311859

---------------------------------------------------------------------
| Id  | Operation          | Name   | Rows  | Cost (%CPU)| Time     |
---------------------------------------------------------------------
|   0 | SELECT STATEMENT   |        |       |     2 (100)|          |
|   1 |  SORT UNIQUE NOSORT|        |    14 |     2  (50)| 00:00:01 | -- ожидается 14 строк
|   2 |   INDEX FULL SCAN  | PK_EMP |    14 |     1   (0)| 00:00:01 |
---------------------------------------------------------------------

SQL> @flashback_cu du7fj13un9prg

 INST CHILD_NUMBER IS_OBSOLETE FLASHBACK_CURSOR IS_SHAREABLE REASON
----- ------------ ----------- ---------------- ------------ ---------------------------------------
    1            0 N           N                Y            21 |Flashback cursor(1) |
    1            1 N           Y                Y            21 |Flashback cursor(1) |
    1            2 N           Y                Y            21 |Flashback cursor(1) |
    1            3 N           Y                Y            21 |Flashback cursor(1) |
    1            4 N           Y                Y            16 |Statistics Row Source mismatch(0) |

— для последнего курсора к FLASHBACK_CURSOR добавляется ещё одна причина — Cardinality Feedback, но это — другая история, связанная с неточным планом выполнения

Мой коллега Максим Филатов, совместно с которым мы рассматривали проблему, добился от техподдержки Oracle подтверждения:

«Bug 10350789 : «AS OF SCN»/FLASHBACK CURSORS NOT SHARED

probable in future versions it will be included.

Development only says that

«This is the current behavior of flashback cursors. The issue is that if you use a SCN that pre-dates the existence of an index and then if you pick a plan using that index, it will be bad to have shared the cursor.»

— т.е. поведение Oracle в этом месте фиксированное на случай изменений объектов (статистики, etc.), что и подтверждает трейс непервого выполнения flashback курсора:

PARSING IN CURSOR #400587288 len=48 dep=0 uid=83 oct=3 lid=83 tim=3283599485482 hv=4114929391 ad='7ff0a1ab5f8' sqlid='du7fj13un9prg'
select distinct sysdate  from emp as of scn :scn
END OF STMT
PARSE #400587288:c=0,e=27047,p=0,cr=0,cu=0,mis=1,r=0,dep=0,og=1,plh=0,tim=3283599485480        -- Plan Hash Value сразу устанавливается в 0, запуская hard parse / создание нового дочернего курсора
EXEC #400587288:c=0,e=2112,p=0,cr=0,cu=0,mis=1,r=0,dep=0,og=1,plh=4053311859,tim=3283599488468 -- , который и создаётся с plh=4053311859 к моменту выполнения

При нагрузочном тестировании проблема проявилась достаточно ярко:

Top 5 Timed Foreground Events

Event                         Waits  Time(s)  Avg wait (ms)  % DB time  Wait Class
library cache lock          235,433   12,506             53      77.83  Concurrency -- конкуренция за объекты Shared Pool использовала все ресурсы (ЦПУ)
cursor: pin S wait on X     139,530    1,695             12      10.55  Concurrency
library cache: mutex X      164,716      616              4       3.84  Concurrency
kksfbc child completion      10,333      517             50       3.22  Other       -- Kompilation Layer function to Find the Bounded Cursor, таймаут 50 мс
cursor: mutex S             341,820      465              1       2.89  Concurrency

Time Model Statistics

Statistic Name                              Time (s)  % of DB Time
sql execute elapsed time                   16,060.10         99.95
parse time elapsed                         16,004.79         99.61 --   99% DB Time - на парсинг
DB CPU                                        128.74          0.80
hard parse (sharing criteria) elapsed time     21.98          0.14 -- , при этом формально считается, что hard parse не выполняется
hard parse elapsed time                        20.14          0.13 -- , несмотря на генерацию множества новых child cursor
...

SQL ordered by Elapsed Time

Elapsed Time (s)  Executions   Elapsed Time per Exec (s)   %Total  %CPU   %IO  SQL Id
       61,921.00      32,442                       1.91    385.37  0.61  0.00  57547pzgf9pv0 -- известный часторазбираемый запрос
...

SQL ordered by Sharable Memory

Sharable Mem (b)  Executions   % Total  SQL Id
     434,358,838      32,442     8.09  57547pzgf9pv0
     298,176,959      34,178     5.55  3ncb946nuqnch
...

SQL ordered by Parse Calls

Parse Calls  Executions   % Total Parses  SQL Id
     32,217      32,442          327.41  57547pzgf9pv0
         60         116            0.61  76cckj4yysvua
...

Mutex Sleep Summary                                    -- типичный набор при high version count

    ordered by number of sleeps desc

Mutex Type      Location                      Sleeps   Wait Time (ms)
--------------- ----------------------------- -------- --------------
hash table      kkshhcins [KKSHBKLOC3]         483,220              0 -- compilation of shared cursors: Hash table Cursor INSert ?
Cursor Pin      kkslce [KKSCHLPIN2]            437,068              0 -- Library Cache Extension / Pinning ?
hash table      kkshGetNextChild [KKSHBKLOC1]  259,427              0
Cursor Parent   kkscsPruneChild [KKSPRTLOC35]  174,274              0

Flashback запросы — отличная возможность недорогого доступа к недавним историческим данным. К сожалению, в силу реализации пока не приспособлена для использования в нагруженных OLTP системах

UPD При многократном использовании Flashback запросов в одной сессии из PL/SQL кода для решения описанной проблемы имеет смысл пробовать и использовать метод, предложенный Саяном Малакшиновым

7 комментариев »

  1. Игорь, спасибо за информацию, а то я сам несколько раз советовал as of, правда в моих случаях это были редкие запросы. Теперь буду предупреждать о возможных проблемах. Кстати, если я не ошибаюсь Тимур Ахмадеев именно об этом спрашивал Тома Кайта на AsmTom’e в декабре

    комментарий от Sayan Malakshinov — 25.03.2013 @ 10:15 | Ответить

    • Да, вспомнил и проверил сейчас: как Том и показывал, в случае если курсор кэширован, то повторное выполнение с scn переданным через бинд переменную не форсирует создание нового чайлда:
      сделал 2 теста: с _close_cached_open_cursors = true и второй раз с false:

      drop table xt1 purge;
      create table xt1 as select 0 a from dual;
      exec dbms_lock.sleep(3);
      alter system flush shared_pool;
      --alter session set "_close_cached_open_cursors"=true;
      alter session set "_close_cached_open_cursors"=false;
      alter session set "_optimizer_use_feedback"=false;
      set serverout on
      
      declare
         type t_scn_list is table of number index by pls_integer;
         v_scn_list t_scn_list;
          
         cursor c(p_scn int) is 
            select/*+findme*/ a from xt1 as of scn p_scn;
         procedure p(p_scn int) is
         begin
            dbms_output.put_line('SCN: '||p_scn);
            for r in c(p_scn) loop
               dbms_output.put_line('   a = '||r.a);
            end loop;
         end;
      begin
         v_scn_list(0):=dbms_flashback.get_system_change_number;
      
         update xt1 set a=1;commit;
         v_scn_list(1):=dbms_flashback.get_system_change_number;
         p(v_scn_list(1));
         
         update xt1 set a=2;commit;
         v_scn_list(2):=dbms_flashback.get_system_change_number;
         p(v_scn_list(2));
         
         update xt1 set a=3;commit;
         v_scn_list(3):=dbms_flashback.get_system_change_number;
         p(v_scn_list(3));
      end;
      /
      /
      /
      col sql_id new_val _sqlid
      col sql_text format a100
      select sql_id,child_number,invalidations,open_versions,executions,sql_text
      from v$sql s 
      where s.sql_text like 'SELECT/*+findme%' and sql_text not like '%v$sql%';
      @sql_shared &_sqlid
      

      Результат для true:

      SQL_ID        CHILD_NUMBER INVALIDATIONS OPEN_VERSIONS EXECUTIONS SQL_TEXT
      ------------- ------------ ------------- ------------- ---------- ----------------------------------------------------------------------------------------------------
      3jxfa6sjz11c3            0             0             0          1 SELECT/*+findme*/ A FROM XT1 AS OF SCN :B1
      3jxfa6sjz11c3            1             0             0          1 SELECT/*+findme*/ A FROM XT1 AS OF SCN :B1
      3jxfa6sjz11c3            2             0             0          1 SELECT/*+findme*/ A FROM XT1 AS OF SCN :B1
      3jxfa6sjz11c3            3             0             0          1 SELECT/*+findme*/ A FROM XT1 AS OF SCN :B1
      3jxfa6sjz11c3            4             0             0          1 SELECT/*+findme*/ A FROM XT1 AS OF SCN :B1
      3jxfa6sjz11c3            5             0             0          1 SELECT/*+findme*/ A FROM XT1 AS OF SCN :B1
      3jxfa6sjz11c3            6             0             0          1 SELECT/*+findme*/ A FROM XT1 AS OF SCN :B1
      3jxfa6sjz11c3            7             0             0          1 SELECT/*+findme*/ A FROM XT1 AS OF SCN :B1
      3jxfa6sjz11c3            8             0             1          1 SELECT/*+findme*/ A FROM XT1 AS OF SCN :B1
      
      9 rows selected.
      
      Elapsed: 00:00:00.20
      
         N SQL_ID        ADDRESS          CHILD_ADDRESS    CHILD_NUMBER REASONS                                                                          REASON
      ---- ------------- ---------------- ---------------- ------------ -------------------------------------------------------------------------------- --------------------------------------------------
         1 3jxfa6sjz11c3 00000003D1C9FF40 000000043B5C02E0            0 FLASHBACK_CURSOR=N                                                               <ChildNode><ChildNumber>0</ChildNumber><ID>21</ID>
                                                                                                                                                         <reason>Flashback cursor(1)</reason><size>3x4</siz
                                                                                                                                                         e><Flashback_cursor>0</Flashback_cursor><As_of_cur
                                                                                                                                                         sor>1</As_of_cursor><Flashback_session>0</Flashbac
                                                                                                                                                         k_session></ChildNode>
      
         2 3jxfa6sjz11c3 00000003D1C9FF40 00000003D1F42880            1 FLASHBACK_CURSOR=Y                                                               <ChildNode><ChildNumber>1</ChildNumber><ID>21</ID>
                                                                                                                                                         <reason>Flashback cursor(1)</reason><size>3x4</siz
                                                                                                                                                         e><Flashback_cursor>0</Flashback_cursor><As_of_cur
                                                                                                                                                         sor>1</As_of_cursor><Flashback_session>0</Flashbac
                                                                                                                                                         k_session></ChildNode>
      
         3 3jxfa6sjz11c3 00000003D1C9FF40 000000043B9856F8            2 FLASHBACK_CURSOR=Y                                                               <ChildNode><ChildNumber>2</ChildNumber><ID>21</ID>
                                                                                                                                                         <reason>Flashback cursor(1)</reason><size>3x4</siz
                                                                                                                                                         e><Flashback_cursor>0</Flashback_cursor><As_of_cur
                                                                                                                                                         sor>1</As_of_cursor><Flashback_session>0</Flashbac
                                                                                                                                                         k_session></ChildNode>
      
         4 3jxfa6sjz11c3 00000003D1C9FF40 000000041D886DB8            3 FLASHBACK_CURSOR=Y                                                               <ChildNode><ChildNumber>3</ChildNumber><ID>21</ID>
                                                                                                                                                         <reason>Flashback cursor(1)</reason><size>3x4</siz
                                                                                                                                                         e><Flashback_cursor>0</Flashback_cursor><As_of_cur
                                                                                                                                                         sor>1</As_of_cursor><Flashback_session>0</Flashbac
                                                                                                                                                         k_session></ChildNode>
      
         5 3jxfa6sjz11c3 00000003D1C9FF40 000000041DB647E8            4 FLASHBACK_CURSOR=Y                                                               <ChildNode><ChildNumber>4</ChildNumber><ID>21</ID>
                                                                                                                                                         <reason>Flashback cursor(1)</reason><size>3x4</siz
                                                                                                                                                         e><Flashback_cursor>0</Flashback_cursor><As_of_cur
                                                                                                                                                         sor>1</As_of_cursor><Flashback_session>0</Flashbac
                                                                                                                                                         k_session></ChildNode>
      
         6 3jxfa6sjz11c3 00000003D1C9FF40 000000043B0D5420            5 FLASHBACK_CURSOR=Y                                                               <ChildNode><ChildNumber>5</ChildNumber><ID>21</ID>
                                                                                                                                                         <reason>Flashback cursor(1)</reason><size>3x4</siz
                                                                                                                                                         e><Flashback_cursor>0</Flashback_cursor><As_of_cur
                                                                                                                                                         sor>1</As_of_cursor><Flashback_session>0</Flashbac
                                                                                                                                                         k_session></ChildNode>
      
         7 3jxfa6sjz11c3 00000003D1C9FF40 000000043BCD1FD8            6 FLASHBACK_CURSOR=Y                                                               <ChildNode><ChildNumber>6</ChildNumber><ID>21</ID>
                                                                                                                                                         <reason>Flashback cursor(1)</reason><size>3x4</siz
                                                                                                                                                         e><Flashback_cursor>0</Flashback_cursor><As_of_cur
                                                                                                                                                         sor>1</As_of_cursor><Flashback_session>0</Flashbac
                                                                                                                                                         k_session></ChildNode>
      
         8 3jxfa6sjz11c3 00000003D1C9FF40 000000043B294960            7 FLASHBACK_CURSOR=Y                                                               <ChildNode><ChildNumber>7</ChildNumber><ID>21</ID>
                                                                                                                                                         <reason>Flashback cursor(1)</reason><size>3x4</siz
                                                                                                                                                         e><Flashback_cursor>0</Flashback_cursor><As_of_cur
                                                                                                                                                         sor>1</As_of_cursor><Flashback_session>0</Flashbac
                                                                                                                                                         k_session></ChildNode>
      
         9 3jxfa6sjz11c3 00000003D1C9FF40 000000041D95F2D0            8 FLASHBACK_CURSOR=Y
      
      9 rows selected.
      
      Elapsed: 00:00:01.84
      

      Для false:

      SQL_ID        CHILD_NUMBER INVALIDATIONS OPEN_VERSIONS EXECUTIONS SQL_TEXT
      ------------- ------------ ------------- ------------- ---------- ----------------------------------------------------------------------------------------------------
      3jxfa6sjz11c3            0             0             1          3 SELECT/*+findme*/ A FROM XT1 AS OF SCN :B1
      3jxfa6sjz11c3            1             0             1          3 SELECT/*+findme*/ A FROM XT1 AS OF SCN :B1
      3jxfa6sjz11c3            2             0             1          3 SELECT/*+findme*/ A FROM XT1 AS OF SCN :B1
      
      Elapsed: 00:00:00.17
      
         N SQL_ID        ADDRESS          CHILD_ADDRESS    CHILD_NUMBER REASONS                                                                          REASON
      ---- ------------- ---------------- ---------------- ------------ -------------------------------------------------------------------------------- --------------------------------------------------
         1 3jxfa6sjz11c3 000000041DA234E8 000000041DD0EB38            0 FLASHBACK_CURSOR=N                                                               <ChildNode><ChildNumber>0</ChildNumber><ID>21</ID>
                                                                                                                                                         <reason>Flashback cursor(1)</reason><size>3x4</siz
                                                                                                                                                         e><Flashback_cursor>0</Flashback_cursor><As_of_cur
                                                                                                                                                         sor>1</As_of_cursor><Flashback_session>0</Flashbac
                                                                                                                                                         k_session></ChildNode>
      
         2 3jxfa6sjz11c3 000000041DA234E8 000000041D88FCA8            1 FLASHBACK_CURSOR=Y                                                               <ChildNode><ChildNumber>1</ChildNumber><ID>21</ID>
                                                                                                                                                         <reason>Flashback cursor(1)</reason><size>3x4</siz
                                                                                                                                                         e><Flashback_cursor>0</Flashback_cursor><As_of_cur
                                                                                                                                                         sor>1</As_of_cursor><Flashback_session>0</Flashbac
                                                                                                                                                         k_session></ChildNode>
      
         3 3jxfa6sjz11c3 000000041DA234E8 000000043B974DB0            2 FLASHBACK_CURSOR=Y
      
      Elapsed: 00:00:00.96
      

      комментарий от Sayan Malakshinov — 25.03.2013 @ 11:01 | Ответить

      • Спасибо, Саян, за полезный кейс

        Насколько я понимаю, всё работает точно так как и должно:
        * если курсор после каждого commit закрывается («_close_cached_open_cursors»=true), то при каждом выполнении порождается новый flashback курсор и количество таких дочерних flashback курсоров = количеству выполнений курсора
        * если же курсор после commit остаётся открытым — во время выполнения PL/SQL блока используется один child ( при «_close_cached_open_cursors»=false, по умолчанию), то количество дочерних flashback курсоров = количеству вызовов PL/SQL блока

        комментарий от Igor Usoltsev — 25.03.2013 @ 23:16 | Ответить

        • Да, Игорь, все верно. У меня на этот счет есть пара предложений по снижению негативного влияния, если возможно изменить код:
          1. в случае, если в сессиях запросы выполняется по несколько раз, то можно курсор этот задекларировать в специально созданном для этого пакете и за»keep»ить его в шаред пуле, тогда можно использовать его повторно(если, конечно, не вылетит по ограничению session_cached_cursors, хотя в этом случае можно подумать о вариантах, чтобы его не закрывать до следующей необходимости и только тогда переоткрывать).

          Этот пример я выложил тут: http://orasql.org/?attachment_id=241
          Использовать файлы нужно в порядке:
          1.1. fb_start — создает пакет и делает keep. часть этого скрипта:

          create package pkg_fb_cursors as
            cursor c(p_scn int) is 
                select/*+ opt_param('_optimizer_use_feedback' 'false') findme */ a from xt1 as of scn p_scn;
          end;
          /
          -- загружаем в library cache
          exec if 1=0 then open pkg_fb_cursors.c(0); end if;
          -- делаем ему keep
          exec sys.dbms_shared_pool.keep(user||'.PKG_FB_CURSORS','p');
          

          1.2. fb_use_cursor — использует этот курсор 3 раза по 3 раза. Можно его вызывать в разных сессиях. Количество чайлдов будет равно кол-ву сессий.
          1.3. fb_show_childs — показывает какие чайлды этого запроса появились с причинами порождения
          1.4. fb_finish — просто удаляет все за собой с делает unkeep.

          2. В случае, если в сессии запрос выполняется всего один раз, то не закрывать его уже не получится, поэтому его лучше выкинуть из пула с помощью dbms_shared_pool.purge. Это мы можем сделать с помощью pipelined функции, в которой в цикле будем пайпать результат, а после цикла сделать dbms_shared_pool.purge. А на тот случай, если запрос будет прервать клиентом до конца выполнения, сделать обработку исключения NO_DATA_NEEDED в этой функции в котором тоже делать purge.
          В идеале было бы сделать такое и в первом варианте перед дисконнектом или после последнего выполнения запроса.

          комментарий от Sayan Malakshinov — 26.03.2013 @ 13:16 | Ответить

          • Спасибо, Саян, первое предложение, отлично работает тестах и может оказаться очень полезным для сокращения генерации / экономии памяти — записываю кейс на память:

            SQL> create table xt1 as select 0 a from dual
              2  /
            
            Table created.
            
            SQL> create or replace package pkg_fb_cursors as
              2    cursor c(p_scn int) is
              3        select/*+ opt_param('_optimizer_use_feedback' 'false') findme */ a from xt1 as of scn p_scn;
              4  end;
              5  /
            
            Package created.
            
            SQL> exec if 1=0 then open pkg_fb_cursors.c(0); end if;
            
            PL/SQL procedure successfully completed.
            
            SQL> exec sys.dbms_shared_pool.keep(user||'.PKG_FB_CURSORS','p');
            
            PL/SQL procedure successfully completed.
            
            SQL> set serverout on;
            SQL> declare
              2     type t_scn_list is table of number index by pls_integer;
              3     v_scn_list t_scn_list;
              4     procedure p(p_scn int) is
              5     begin
              6        dbms_output.put_line('SCN: '||p_scn);
              7        -- курсор из пакета:
              8        for r in pkg_fb_cursors.c(p_scn) loop
              9           dbms_output.put_line('   a = '||r.a);
             10        end loop;
             11     end;
             12  begin
             13     v_scn_list(0):=dbms_flashback.get_system_change_number;
             14     update xt1 set a=a+1;commit;
             15     v_scn_list(1):=dbms_flashback.get_system_change_number;
             16     update xt1 set a=a+1;commit;
             17     v_scn_list(2):=dbms_flashback.get_system_change_number;
             18     update xt1 set a=a+1;commit;
             19     v_scn_list(3):=dbms_flashback.get_system_change_number;
             20     for i in 1..3 loop
             21        p(v_scn_list(i));
             22     end loop;
             23  end;
             24  /
            
            PL/SQL procedure successfully completed.
            
            SQL> /
            
            PL/SQL procedure successfully completed.
            
            SQL> /
            
            PL/SQL procedure successfully completed.
            
            SQL> @xt\fb_show_childs
            
            SQL_ID        CHILD_NUMBER INVALIDATIONS OPEN_VERSIONS EXECUTIONS SQL_TEXT
            ------------- ------------ ------------- ------------- ---------- -----------------------------------------------------------------------------------------
            3tq45x6c4zkj2            0             0             1          9 SELECT/*+ opt_param('_optimizer_use_feedback' 'false') findme */ A FROM XT1 AS OF SCN :B1
            
            1 row selected.
            
            old  14:                passing '&_sqlid' as SQLID
            new  14:                passing '3tq45x6c4zkj2' as SQLID
            
            no rows selected
            
            SQL> @shared_cu 3tq45x6c4zkj2
            
             INST     EXECS PLAN_HASH_VALUE  CHILD BIND_SENSE BIND_AWARE SHAREABLE  USE_FEEDBACK_STATS OPTIMIZER_STATS  BIND_EQ_FAILURE  REASON1
            ----- --------- --------------- ------ ---------- ---------- ---------- ------------------ ---------------- ---------------- -------
                1         9      3937045242      0 N          N          Y          N                  N             N

            комментарий от Igor Usoltsev — 01.04.2013 @ 00:49 | Ответить

    • Да, спрашивал. Что было дальше и общался ли Том с саппортом я не знаю.

      Игорь, спасибо за номер бага 10123661, оказывается он уже давно этот заведен, жаль без обновлений статуса по ER.
      Вопрос: AWR репорт получен на 11.2.0.3 (по поведению child cursors больше походит на 11.2.0.2)?

      комментарий от Timur Akhmadeev — 25.03.2013 @ 11:30 | Ответить

      • да, 11.2.0.3
        максимальный child_number и , соответственно, максимальное кол-во версий в SQL ordered by Version Count в AWR не превосходит значения _cursor_obsolete_threshold.
        Общее же кол-во дочерних курсоров (по child address, включая obsolete) наблюдалось большое

        комментарий от Igor Usoltsev — 25.03.2013 @ 14:40 | Ответить


RSS feed for comments on this post. TrackBack URI

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s

Создайте бесплатный сайт или блог на WordPress.com.

%d такие блоггеры, как: