You are on page 1of 20

Library cache

HASH

SQL select * from employeesupdate employees set sal=sal+10


26 SQL
C
Library cache

Bucket Hash Bucket HASH


HASH Hash Bucket

Handles
Library cache SQL

1.
2.
3.
4.
5. SELECT
1 MSQL1.SQL
Plus*SQL SQL
Plus*SQL
SQL

1. ++
2.
3.

Oracle
V$SYSSTAT Oracle

-1-

V$sysstatV$sesstatV$mystatV$statname
DESC
2
3
V$SQL V$SQLAREA
3 V$SQL V$SQLAREA
PL/SQL SQL
Executions HASH_VALUE
set timing on

4
MSQL7.SQL
--
declare
msql varchar2(500);
mcur number;
mstat number;
jg varchar2(4000);
cg number;
begin
mcur:=dbms_sql.open_cursor; --
msql:='select myid from t4 where myid=:x';
for i in 1..5000 loop
dbms_sql.parse(mcur,'select myid from t4 where myid=:x',dbms_sql.native);
dbms_sql.bind_variable(mcur,':x',i);
dbms_sql.define_column(mcur,1,jg,4000);
mstat:=dbms_sql.execute(mcur);
cg:=dbms_sql.fetch_rows(mcur);
dbms_sql.column_value(mcur,1,jg);
dbms_output.put_line(':'||jg);
end loop;
dbms_sql.close_cursor(mcur);
end;
/
MSQL6.SQL
--
declare
msql varchar2(500);
mcur number;
mstat number;
jg varchar2(4000);
cg number;
begin
mcur:=dbms_sql.open_cursor;
for i in 1..1 loop
msql:='select myid from t1 where myid='||to_char(i);
dbms_sql.parse(mcur,'select myid from t1 where myid='||to_char(i),dbms_sql.native);
dbms_sql.define_column(mcur,1,jg,4000);
mstat:=dbms_sql.execute(mcur);
-2-

cg:=dbms_sql.fetch_rows(mcur);
dbms_sql.column_value(mcur,1,jg);
dbms_output.put_line(':'||jg);
end loop;
dbms_sql.close_cursor(mcur);
end;
/
5
5000 Set timing on

declare
type rc is ref cursor;
l_cur rc;
begin
for i in 1..5000 loop
open l_cur for 'select myid from t1 where myid='||i;
close l_cur;
end loop;
for i in 1..5000 loop
open l_cur for 'select myid from t2 where myid='||i;
close l_cur;
end loop;
end;
/

declare
type rc is ref cursor;
l_cur rc;
begin
for i in 1..5000 loop
open l_cur for 'select myid from t1 where myid=:x' using i;
close l_cur;
end loop;
end;
/
6
MSQL8.SQL
--
--create or replace procedure my_cursor is
declare
cursor aa1(mm in number) is select id from t1 where myid=mm;
mx number;
begin
for i in 1..1000 loop
open aa1(i);
fetch aa1 into mx;
dbms_output.put_line(':'||mx);
close aa1;
end loop;
-3-

end;
/
DDL
DDL
DDL

ORACLE
1
2
3

HASH HASH

HASH


Library cache
Library cache SQL
V$librarycache Library cache SQL

Library cache
1.
SQL and PL/SQL objects
tables, indexes, and so on
2.
LIBRARY
Library cache
Library cache
Library cache

1000

1001

A1
A2
1000

1001

A1

B1
B1
-4-

A2


Heap
malloc

Hash BucketObject Handles 0 0Heap


0 0 Library cache
V$DB_OBJECT_CACHE X$kglob
7 Grant
KGLHDLMD,KGLHDPMD,KGLHDLDC,KGLHDIVC,KGLHDEXC,KGLHDLKC,KGLOBPC0
grant select on t1 to jj;
x$kgldpV$OBJECT_DEPENDENCY
3 0

V$object_dependency from_address,from_hash V$SQLV$SQLAREA


-5-

Gets Pins
V$Librarycache
GETS
GETHITS
GETHITRATIO
PINS
PINHITS
PINHITRATIO
RELOADS
INVALIDATIONS
8
select * from v$librarycache where namespace='SQL AREA'; GETS PINS
X$KGLOB
1.
GETHITRATIO
PINHITRATIO

2. ReloadsInvalidations
Library cache PIN LOCK
Library cache lock Library cache pin
1. Library cache lock Library cache pin
Library cache
Lock Pin 0
Locks Locks

Lock Pin Pinning


Pin Pin
Lock
Share(s) :
Exclusive(x) :
Null(n) :
Null
Null SQL DDL
breakable parse lock

Null
Pin
Pin
9 Lock
Pin
Pin
Share (s) :
Exclusive (x) :
Pinned Share Exclusive
Share Pin Exclusive Pin Pin
Break
lock/pin
1). DDL Exclusive() Lock Pin(
)
:,,,
-6-

2). null lock shared pin():,


,
:,

10
DDLcreate table big_table_2 as select * from big_table
DDL X$KGLOB Big_table LOCK PIN DESC

create or replace procedure my_cursor is


msql varchar2(500);
mcur number;
begin
mcur:=dbms_sql.open_cursor;
msql:='select myid from t4 where myid=:x';
dbms_sql.parse(mcur,'select myid from t4 where myid=:x',dbms_sql.native);
dbms_lock.sleep(300);
dbms_sql.close_cursor(mcur);
end;
/
X$KGLOB MY_CURSOR AA LOCK PIN
Library cache LOCK PIN
V$ Library cache lock X$kgllk Library cache pins
X$kglpn X$kglob Lock Pin
11 SQL x$kgllk x$kglpn
X$kglob Lock Pin X$kglob

SQL SQL
SQL
SQL Library cace

SQL
SQL
SQL PGA
PGA
PGA Oracle
Oracle PGA PGA 0.5M
PGA
12 PGA
Show_pga.sql
SUBSTR(NAME,1,30)
SID VALUE
--------------------------------------------------------------------- ---------session uga memory
12 76960
session uga memory max
12 76960
session pga memory
12 220460
session pga memory max
12 220460

UGA PGA
pga session pga memory PGA
session pga memory max PGA PGA
-7-


SQL
persistent area
run-time area

1). persistent area


bind information
SQL

persistent area
2).
cancel
SCN

run time area sort


select name from mytable order by name;Oracle
SQL parse()
buffer cache block mytable block disk buffer cache
query buffer cache mytable
PGA run-time area mytable sort()

Sort-based operators (order by, group-by, rollup, window function)


Hash-join
Bitmap merge
Bitmap create
PGA 4 Work area
SQL SQL

SQL SQL SQL


SQL SQL SQL

Oracle SQL SQL SQL SQL


SQL SQL SQL shared SQL area
SQL SQL
SQL SQL
TOM
SQL DLL
SQL DLL

SQLDLL SQL
TOM SQL UGA

SQL DLL SQL


SQL SQL
SQL SQL
SQL SQL
SQL SQL

Select * from table;

-8-

1. Buffer cache Table Buffer cache Buffer cache


PGA
PGA
Oracle OS
Oracle Buffer cache
Table Buffer cache PGA
2. Buffer cache Oracle
3. 2 Buffer cache 1

declare
cursor aa1 is select id from t1 where myid<=10;
mx number;
begin
open aa1; ------>
dbms_output.put_line(' 1:'||aa1%rowcount); ----> Oracle
---- 0
for i in 1..10 loop
fetch aa1 into mx; ---- Buffer ---cache Buffer cache ---Buffer cache buffer cache ------ mx ---
dbms_output.put_line(':'||mx);
end loop;
dbms_output.put_line(' 2:'||aa1%rowcount); ---- 10 rowcount
---- 10
close aa1;
end;
/
Oracle

Oracle rowcount N Oracle


N rowcount 0

1. T4_1 Buffer cache

scott@MYTWO> select dbms_rowid.rowid_block_number(rowid) RID,min(rownum),max(rownum)


from t4_1 group by dbms_rowid.rowid_block_number(rowid);
RID MIN(ROWNUM) MAX(ROWNUM)
---------- ----------- ----------31508
1
38 -----> 1 38 31508
31509
39
75 -----> 39 75 31509
31510
76
112 ----->
31511
113
150
31512
151
187
31513
188
225
31514
226
262

2. T4_1 Buffer cache


-9-

sys@MYTWO> select count(*) from x$bh where obj=7487;


COUNT(*)
---------1
T4_1 Buffer cache
delete big_table where rownum<=240000;
3. PL/SQL
declare
cursor aa1 is select id from t4_1;
mx number;
begin
open aa1;
for i in 1..75 loop
fetch aa1 into mx;
dbms_output.put_line(':'||mx);
end loop;
dbms_output.put_line(':'||aa1%rowcount);
close aa1;
end;
/
T4_1 2000 64 Aa1 75 1
X$BH Oracle
4. X$BH
sys@MYTWO> select count(*) from x$bh where obj=7487;
COUNT(*)
---------14
T4_1 64 Buffer cache
Oracle
75 14
db_file_multiblock_read_count Library cache Library cache
16 Oracle
16 Buffer cache 16 14

sys@MYTWO> select EXTENT_ID,FILE_ID,BLOCK_ID from dba_extents where segment_name='T4_1';


EXTENT_ID FILE_ID BLOCK_ID
---------- ---------- ---------0
5 31505
1
5 31521
2
5 31537
3
5 31553
sys@MYTWO> select FILE#,dbablk,state from x$bh where obj=7487;
FILE# DBABLK STATE
---------- ---------- ---------5 31507
1
5 31508
1
: : :
: : :
5 31520
1
- 10 -

14
T4_1 0 31505 31520 Buffer cache 31507 31520

Oracle buffer

Oracle
scott@MYTWO> set autotrace traceonly;
scott@MYTWO> select * from aa_1;

Execution Plan
---------------------------------------------------------0 SELECT STATEMENT Optimizer=CHOOSE
1 0 TABLE ACCESS (FULL) OF 'AA_1'
Statistics
---------------------------------------------------------0 recursive calls
0 db block gets
3 consistent gets
0 physical reads
0 redo size
215 bytes sent via SQL*Net to client
372 bytes received via SQL*Net from client
1 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
0 rows processed
select * from aa_1
3 Oracle Buffer cache
Oracle
Oracle Oracle Oracle
Buffer cache

A cursor is a handle or name for a private SQL area.


SQL

SQL SQL
SQL
SQL

SQL
Library cache
1
V$open_cursor Oracle X$KGLLK
Library cache
10 V$open_cursor X$KGLLK
v$fixed_view_definition Oracle V$
V$OPEN_CURSOR
select view_definition from v$fixed_view_definition where view_name='V$OPEN_CURSOR';
V$OPEN_CURSOR X$KGLLK
- 11 -

V$OPEN_CURSOR X$KGLLK Oracle


LOCK 1
ORA-01000: OPEN_CURSOR
1. Library cache LRU
11 SQL SHOW_SQL
1000 SHOW_SQL SQL
SQL SQL*Plus

2. SHOW PARAMETER Open_cursors


12 ORA-01000 V$OPEN_CURSORSX$KGLLK X$KGLOB

DDL LOCK 0 LOCK


1
PIN 2 LOCK PIN 0
LOCK 1
PIN 2
13 V$OPEN_CURSORSX$KGLLK X$KGLOB
*

1. T4_1 Buffer cache


sys@MYTWO> select FILE#,dbablk,state from x$bh where obj=7487;

2.
alter session set events '10046 trace name context forever,level 12';
declare
cursor aa1 is select id from t4_1;
mx number;
begin
open aa1;
close aa1;
end;
/
alter session set events '10046 trace name context off';
3. T4_1 Buffer cache
sys@MYTWO> select FILE#,dbablk,state from x$bh where obj=7487;
FILE# DBABLK STATE
---------- ---------- ---------5 31507
1
select id from t4_1 31507 Buffer cache

PARSING IN CURSOR #2 len=19 dep=1 uid=30 oct=3 lid=30 tim=2494060919187 hv=2346570808 ad='79e0c314'
SELECT id from t4_1
END OF STMT
PARSE #2:c=0,e=41730,p=2,cr=41,cu=0,mis=1,r=0,dep=1,og=4,tim=2494060919178
BINDS #2:
EXEC #2:c=0,e=55,p=0,cr=0,cu=0,mis=0,r=0,dep=1,og=4,tim=2494060919307
SELECT id from t4_1
WAIT #1: nam='db file sequential read' ela= 9560 p1=5 p2=31507 p3=1
P1=5 p2=31507 5 31507 t4_1
- 12 -

Library cache LOCKPIN

Oracle v$event_name 9i
361 library cache lock library cache pin

V$system_eventv$session_eventv$session_wait v$session_event SID SID

library cache lock


library cache pin 3
library cache lock library cache pin

14
create or replace procedure my_cursor is
mx number;
begin
dbms_output.put_line(Start);
dbms_lock.sleep(30);
dbms_output.put_line(End);
end;
/
grant execute on my_cursor to jj;
V$SESSION_WAIT
SID: session
EVENT: session
WAIT_TIME: session () 0 session session

SEQ#: session
P1, P2, P3:
P1TEXT, P2TEXT, P3TEXT: p1,p2,p3

1.State
(1)WaitingSESSION
(2)Waited unknown time timed_statistics falseWait short time

(3)Waited knnow time session waiting


2.Wait_time
(1)>0(10ms)
(2)=0session
(3)=-1 1
(4)=-2
3.Wait_time Second_in_wait state :
(1) state Waiting wait_time Second_in_wait ()
(2) state Wait unknow time wait_time Second_in_wait
(3) state Wait short time wait_time Second_in_wait
(4) state Waiting known time wait_time ()Second_in_wait

V$SESSION_EVENT
- 13 -

SIDsession
EVENTsession
TOTAL_WAITS session
TIME_WAITED session ()
AVERAGE_WAIT session ()
TOTAL_TIMEOUTS
V$system_event V$session_event SID
V$system_event V$session_event
TIME_WAITED_MICRO TOTAL_WAITS
1TOTAL_TIMEOUTS 1
TOTAL_WAITS TOTAL_TIMEOUTS
TOTAL_WAITS TOTAL_TIMEOUTS

+1

+1

+1

+1

V$session_wait Oracle
V$session_event
TIME_WAITED_MICRO
SEQ# STATE WAITING
SECONDS_IN_WAIT SEQ# 1
SECONDS_IN_WAIT Oracle
Library cache Lock Library cache pin
1. Library cache Lock Library cache pin
2.

MSQL6.SQL 5000
SHOW_WAIT.SQL library cache pin latch free
Latch free library cache latch Library cache Library cache
Latch Latch Latch
Library cache pin NULL Oracle

CURSOR_SPACE_FOR_TIME SESSION_CACHED_CURSORS
1. CURSOR_SPACE_FOR_TIME
SQL SQL

SQL Pinned SQL


SQL SQL
TRUE
TRUE SQL

15 CURSOR_SPACE_FOR_TIME
CURSOR_SPACE_FOR_TIME
- 14 -

1. 1
1. alter system set cursor_space_for_time=false scope=spfile;
2. shutdown immediate; --
3. Startup;
2. 2
select * from aa_1;
3. 1
select kglhdadr,kglhdpar,kglhdlmd,kglhdpmd,kglobhs0,kglobhs6,
kglobhs0+kglobhs1+kglobhs2+kglobhs3+kglobhs4+kglobhs5+kglobhs6 MEM
from x$kglob where kglnaobj like 'select * from aa_1';
KGLHDADR KGLHDPAR KGLHDLMD KGLHDPMD KGLOBHS0 KGLOBHS6 MEM
-------- -------- ---------- ---------- ---------- ---------- ----------------- -------- ---------- ---------- ---------- ---------- -------79EBC2A4
79EBC820
1
0
1920
2208
4128
79EBC820
79EBC820
1
0
1436
0
1436
PIN
4. 3
select namespace, gets, gethits, pins, pinhits from v$librarycache where namespace = 'SQL AREA';
sys@MYTWO> select namespace, gets, gethits, pins, pinhits from v$librarycache where namespace = 'SQL AREA';
NAMESPACE
GETS GETHITS PINS PINHITS
--------------- ---------- ---------- ---------- ------------------------- ---------- ---------- ---------- ---------SQL AREA
399
307
1901
1695
5. 2
Select * from aa_1;
6. 3
sys@MYTWO> select namespace, gets, gethits, pins, pinhits from v$librarycache where namespace = 'SQL AREA';
NAMESPACE
GETS GETHITS PINS PINHITS
--------------- ---------- ---------- ---------- ------------------------- ---------- ---------- ---------- ---------SQL AREA
401
309
1907
1701
456 2 select * from aa_1 GETS 1PINS 3

6 4 GETSGETHITS 2PINSPINHITS 6
select namespace, gets, gethits, pins, pinhits from v$librarycache where namespace = 'SQL AREA'
GETS PINS select * from aa_1 GETS PINS
7. 4
@msql6 -- 3000 3000
8. 1
select kglhdadr,kglhdpar,kglhdlmd,kglhdpmd,kglobhs0,kglobhs6,
kglobhs0+kglobhs1+kglobhs2+kglobhs3+kglobhs4+kglobhs5+kglobhs6 MEM
from x$kglob where kglnaobj like 'select * from aa_1';
KGLHDADR KGLHDPAR KGLHDLMD KGLHDPMD KGLOBHS0 KGLOBHS6 MEM
-------- -------- ---------- ---------- ---------- ---------- ------------------ -------- ---------- ---------- ---------- ---------- ---------79EBC2A4
79EBC820
1
0
1920
0
1920
79EBC820
79EBC820
1
0
1436
0
1436
LOCK 1 6
- 15 -


3000 3000 Library cache

CURSOR_SPACE_FOR_TIME FALSE

v$librarycacheGETS GETHITS
5PINS 19 PINHITS 18PIN 6
v$sesstat 2
1 5
CURSOR_SPACE_FOR_TIME
1. 1
1. alter system set cursor_space_for_time=true scope=spfile;
2. shutdown immediate; --
3. Startup;
2. 2
select * from aa_1;
3. 1
select kglhdadr,kglhdpar,kglhdlmd,kglhdpmd,kglobhs0,kglobhs6,
kglobhs0+kglobhs1+kglobhs2+kglobhs3+kglobhs4+kglobhs5+kglobhs6 MEM
from x$kglob where kglnaobj like 'select * from aa_1';
KGLHDADR KGLHDPAR KGLHDLMD KGLHDPMD KGLOBHS0 KGLOBHS6 MEM
-------- -------- ---------- ---------- ---------- ---------- ------------------ -------- ---------- ---------- ---------- ---------- -------79E019D8 79E01EF4
1
2 <----
1632
1948
3580
79E01EF4 79E01EF4
1
0
1436
0
1436
PIN
4. 3
select namespace, gets, gethits, pins, pinhits from v$librarycache where namespace = 'SQL AREA';
sys@MYTWO> select namespace, gets, gethits, pins, pinhits from v$librarycache where namespace = 'SQL AREA';
NAMESPACE
GETS GETHITS PINS PINHITS
--------------- ---------- ---------- ---------- ------------------------- ---------- ---------- ---------- ---------SQL AREA
457
359
1487
1268
5. 2
Select * from aa_1;
6. 3
sys@MYTWO> select namespace, gets, gethits, pins, pinhits from v$librarycache where namespace = 'SQL AREA';
NAMESPACE
GETS GETHITS PINS PINHITS
--------------- ---------- ---------- ---------- ------------------------- ---------- ---------- ---------- ---------SQL AREA
459
361
1491
1272
456 CURSOR_SPACE_FOR_TIME TRUE 2 select * from aa_1
GETS 1PINS 2

PINS 2 PIN Oracle PIN


7. 4
@msql6 -- 3000 3000
8. 1
3
- 16 -

CURSOR_SPACE_FOR_TIME Oracle

v$librarycache 456
v$sesstat 2 0 1
15
2. SESSION_CACHED_CURSORS
3 PGA Oracle LRU

SESSION SYSTEM
1.
SQL 1 3
V$SQL.executions
16
1. A session_cached_cursors
alter session set session_cached_cursors=10;
2. Session_cached_cursors SQL
select * from t4_1 where id=2;

sys@MYTWO> select substr(sql_text,1,30),executions from v$sql where sql_text like 'select * from t4_1 where %';
SUBSTR(SQL_TEXT,1,30)
EXECUTIONS
------------------------------------------------------------ ---------select * from t4_1 where id=2
2
3. A
select * from t4_1 where id=2;

sys@MYTWO> select substr(sql_text,1,30),executions from v$sql where sql_text like 'select * from t4_1 where %';
SUBSTR(SQL_TEXT,1,30)
EXECUTIONS
------------------------------------------------------------ ---------select * from t4_1 where id=2
3

select a.statistic#,b.name,a.value from v$sesstat a,v$statname b


where b.name like 'session cursor%' and a.statistic#=b.statistic# and sid=10;
STATISTIC# NAME
VALUE
---------- ---------------------------------------------------------------- ---------205 session cursor cache hits
0 -------->
206 session cursor cache count
0 -------->
A
3

SQL*PLUS A
select * from aa_1;

STATISTIC# NAME
VALUE
---------- ---------------------------------------------------------------- ---------205 session cursor cache hits
0
206 session cursor cache count
1
16
2.
LOCK PIN 0
- 17 -

LOCK NULL
sys@MYTWO> select kglhdadr,kglhdpar,kglhdlmd,kglhdpmd,kglobhs0,kglobhs6,
kglobhs0+kglobhs1+kglobhs2+kglobhs3+kglobhs4+kglobhs5+kglobhs6 MEM
from x$kglob where kglnaobj like 'select * from t4_1 where id=2%';
KGLHDADR KGLHDPAR KGLHDLMD KGLHDPMD KGLOBHS0 KGLOBHS6
MEM
-------- -------- ---------- ---------- ---------- ---------- ---------79DB8FA8 79DBA3C4
1
0
1920
6380
8300
79DBA3C4 79DBA3C4
1
0
1243
0
1243
v$open_cursor Oracle
NULL NULL
Oracle
Oracle LRU
3.
softer parse

PGA
Library cache HASH
V$LIBRARCACHE
17 V$LIBRARCACHE
1. B
select namespace, gets, gethits, pins, pinhits from v$librarycache where namespace = 'SQL AREA' ;
sys@MYTWO> select namespace, gets, gethits, pins, pinhits from v$librarycache where namespace = 'SQL AREA' ;
NAMESPACE
GETS GETHITS
PINS PINHITS
--------------- ---------- ---------- ---------- ---------SQL AREA
4856
2715 10662
6292

sys@MYTWO> select namespace, gets, gethits, pins, pinhits from v$librarycache where namespace = 'SQL AREA' ;
NAMESPACE
GETS GETHITS
PINS PINHITS
--------------- ---------- ---------- ---------- ---------SQL AREA
4859
2715 10662
6292
sys@MYTWO> select namespace, gets, gethits, pins, pinhits from v$librarycache where namespace = 'SQL AREA' ;
NAMESPACE
GETS GETHITS
PINS PINHITS
--------------- ---------- ---------- ---------- ---------SQL AREA
4860
2716 10664
6294
GETSPINS GETS 1PINS 2
2. A
select * from t4_1 where id=2
3. B GETSPINS
sys@MYTWO> select namespace, gets, gethits, pins, pinhits from v$librarycache where namespace = 'SQL AREA' ;
NAMESPACE
GETS GETHITS
PINS PINHITS
--------------- ---------- ---------- ---------- ---------SQL AREA
4861
2717 10667
6297
GETS 1select * from t4_1 where id=2
GETS PINS 1 PINS PIN
6
PINS
CURSOR_SPACE_FOR_TIME GETS
PINS 2 PGA Library cache
PIN
- 18 -

17

1
PGA
1. A
scott@MYTWO> set autotrace traceonly
scott@MYTWO> select * from aa_1;

Execution Plan
---------------------------------------------------------0 SELECT STATEMENT Optimizer=CHOOSE
1 0 TABLE ACCESS (FULL) OF 'AA_1'
Statistics
---------------------------------------------------------176 recursive calls
0 db block gets
22 consistent gets
1 physical reads
0 redo size
215 bytes sent via SQL*Net to client
372 bytes received via SQL*Net from client
1 SQL*Net roundtrips to/from client
2 sorts (memory)
0 sorts (disk)
0 rows processed
176
2. B 1 Library cache
sys@MYTWO> select kglhdadr,kglhdpar,kglhdlmd,kglhdpmd,kglobhs0,kglobhs6,
kglobhs0+kglobhs1+kglobhs2+kglobhs3+kglobhs4+kglobhs5+kglobhs6 MEM
from x$kglob where kglnaobj like 'select * from aa_1%';
KGLHDADR KGLHDPAR KGLHDLMD KGLHDPMD KGLOBHS0 KGLOBHS6 MEM
-------- -------- ---------- ---------- ---------- ---------- ------------------ -------- ---------- ---------- ---------- ---------- -------79DD5DE0 79DD71FC
0
0
1784
1948
3732
79DD71FC 79DD71FC
0
0
1768
0
1768
6 1948
3. C
declare
msql varchar2(500);
mcur number;
mstat number;
jg varchar2(4000);
cg number;
begin
mcur:=dbms_sql.open_cursor;
for i in 1..2000 loop
msql:='select myid from t4 where myid='||to_char(i);
dbms_sql.parse(mcur,msql,dbms_sql.native);
dbms_sql.define_column(mcur,1,jg,4000);
mstat:=dbms_sql.execute(mcur);
- 19 -

cg:=dbms_sql.fetch_rows(mcur);
dbms_sql.column_value(mcur,1,jg);
dbms_output.put_line(':'||jg);
end loop;
dbms_sql.close_cursor(mcur);
end;
/
2000 1 alter
system flush shared_pool
2000 T4

4. B 1 Library cache
sys@MYTWO> select kglhdad

1
5. A
scott@MYTWO> select * from aa_1;

Execution Plan
---------------------------------------------------------0 SELECT STATEMENT Optimizer=CHOOSE
1 0 TABLE ACCESS (FULL) OF 'AA_1'
Statistics
---------------------------------------------------------132 recursive calls
0 db block gets
16 consistent gets
0 physical reads
0 redo size
215 bytes sent via SQL*Net to client
372 bytes received via SQL*Net from client
1 SQL*Net roundtrips to/from client
2 sorts (memory)
0 sorts (disk)
0 rows processed
132 A PGA
PGA
cursor_space_for_time FALSE
session_cached_cursors
2

select * from v$sysstat where name like 'opened cursor%';


select * from v$sysstat where name like 'session stored%';

- 20 -

You might also like