Database Reference
In-Depth Information
SQL> alter session set session_cached_cursors=0;
Session wurde geändert.
SQL> declare
2 stmt varchar2(2000):='alter session set "_smm_px_max_size"=';
3 m number;
4 begin
5
6 for i in 1..1025 loop
7 execute immediate stmt || to_char(100000 + i,'999999999');
8 select 1 into m from dual;
9 end loop;
10 end;
11 /
PL/SQL-Prozedur erfolgreich abgeschlossen.
SQL> select sql_id, sql_text from v$sql where force_matching_signature=10559245208183986822
and rownum <= 1;
SQL_ID
-------------
SQL_TEXT
------------------------------------------------------------
bunvx480ynf57
SELECT 1 FROM DUAL
SQL> select address, sql_id, is_obsolete, count(*), min(child_number),max(child_number) from
v$sql where force_matching_signature=10559245208183986822 group by address, sql_id,
is_obsolete order by is_obsolete desc, address;
ADDRESS SQL_ID IS_OBSOLETE COUNT(*) MIN(CHILD_NUMBER) MAX(CHILD_NUMBER)
---------------- ------------- ----------- ---------- ----------------- -----------------
000007FF413FCDD8 bunvx480ynf57 N 1025 0 1024
Mehrere Cursor für den Select aus der Tabelle DUAL werden in einem PL/SQL-Block pro-
duziert. Dafür werden die Parameterwerte _ smm _ px _ max _ size in einem Zyklus dort ver-
ändert. Da dieser Parameter für den Optimizer relevant ist, wird ein neuer Cursor für jede
Parametereinstellung erzeugt. Auf dieser Art und Weise kann man 1025 Cursor produ-
zieren, die bei der Suche nach einem Cursor für gemeinsame Nutzung gebraucht werden
können. Wenn wir jetzt 1026 Cursor für den Select in dem PL/SQL-Block erzeugen, be-
kommen alle Cursor den Wert 'Y' in der Spalte IS_OBSOLETE der View V$SQL.
Search WWH ::




Custom Search