LibraryCacheInternals.ppt
LibraryCacheInternals.ppt
Internals
Julian Dyke
Independent Consultant
Web Version
u Introduction
u Multiple Parent Cursors
u Multiple Child Cursors
u DBMS_SHARED_POOL
u Summary
u Based on X$KGLOB
8 © 2006 Julian Dyke juliandyke.com
Library Cache Dumps
u To dump the contents of the library cache use
ALTER SESSION SET EVENTS
'IMMEDIATE TRACE NAME LIBRARY_CACHE LEVEL n';
Parent
u Contains
u KGLHD - Handle structure
u KGLOB - Object structure
u KGLNA - Name structure
u Externalised by
u V$SQLAREA
u X$KGLOB (WHERE kglhdpar = kglhdadr)
KGLHD
u Contains
u KGLHD - Handle structure
u KGLOB - Object structure
u Subheaps
u Externalised by
u V$SQL
u X$KGLOB (WHERE kglhdpar != kglhdadr)
u X$KGLCURSOR_CHILD (in Oracle 10.2 and above)
KGLHD
Parent
Cursor
KGLOB KGLNA
KGLHD
Child
Cursor
KGLOB
Heap 0 Heap 6
Bind Execution
Environment Statistics
Variables Plan
SELECT COUNT(*)
FROM t1;
Parent Parent
6BA7F7F8 6B8FB104
Child Child
6B9B6BE4 6BB158F0
Parent
6BA93574
Child
6B8D1A84
-- Gather statistics
BEGIN
DBMS_STATS.GATHER_TABLE_STATS
(
ownname => 'US01',
tabname => 'T1',
estimate_percent => NULL,
method_opt => 'FOR COLUMNS SIZE 4 c4'
);
END;
/
Parent
6BA812EC
Child
6BB34F64
Parent Parent
6B8A5D54 67026E34
CHILD_NUMBER 0 1
CHILD_ADDRESS 6BA0FC18 6BAE9904
OPTIMIZER_MODE_MISMATCH N Y
Parent
6B97E3C0
active_instance_count parallel_execution_enabled
bitmap_merge_area_size parallel_query_mode
cpu_count parallel_threads_per_cpu
cursor_sharing pga_aggregate_target
hash_area_size query_rewrite_enabled
optimizer_dynamic_sampling query_rewrite_integrity
optimizer_features_enable skip_unusable_indexes
optimizer_index_caching sort_area_retained_size
optimizer_index_cost_adj sort_area_size
optimizer_mode star_transformation_enabled
optimizer_secure_view_merging statistics_level
parallel_ddl_mode workarea_size_policy
parallel_dml_mode
CHILD_NUMBER 0 1 2
CHILD_ADDRESS 6BA937EC 6B855EB4 6BB1DE24
OPTIMIZER_MISMATCH N Y Y
Parent
6B97E3C0
optimizer_index_caching 0 20 40
CHILD_NUMBER 0 1
CHILD_ADDRESS 6B879828 6B976F20
OPTIMIZER_MISMATCH N Y
Parent
6B97E3C0
Child Child
6B879828 6B976F20
EXECUTE DBMS_MONITOR.SESSION_TRACE_ENABLE;
EXECUTE DBMS_MONITOR.SESSION_TRACE_DISABLE;
SELECT COUNT(*) FROM t1;
CHILD_NUMBER 0 1
CHILD_ADDRESS 6B99348C 6B895F5C
STATS_ROW_MISMATCH N Y
Parent SELECT c1
Cursor FROM t1;
Child Child
Cursor 1 Cursor 2
42 © 2006 Julian Dyke USER1.T1 USER2.T1 juliandyke.com
Translations
u As USER1
CREATE TABLE t1 (c1 NUMBER);
SELECT c1 FROM t1;
u As USER2
CREATE TABLE t1 (c1 NUMBER);
SELECT c1 FROM t1;
u As SYSDBA
SELECT address,hash_value,child_number,child_address
FROM v$sql
WHERE sql_text LIKE 'SELECT c1 FROM t1%';
CHILD_NUMBER 0 1
CHILD_ADDRESS 6B8B6C30 6B8DA100
AUTH_CHECK_MISMATCH N Y
TRANSLATION_MISMATCH N Y
Parent
6B9B7F74
Child Child
6B91CA58 6BA1DB48
SELECT SELECT
kglnaown kglnaown
kglnaobj kglnaobj
FROM x$kglob FROM x$kglob
WHERE kglhdadr = '6BA68DAC'; WHERE kglhdadr = '6B8F9220';
VARIABLE v1 VARCHAR2(30);
SELECT c2 FROM t1 WHERE c1 = :v1;
VARIABLE v1 VARCHAR2(40);
SELECT c2 FROM t1 WHERE c1 = :v1;
SELECT address,hash_value,child_number,child_address
FROM v$sql
WHERE sql_text LIKE 'SELECT c2 FROM t1 WHERE c1 = %';
CHILD_NUMBER 0 1
CHILD_ADDRESS 6B91CA58 6BA1DB48
BIND_MISMATCH N Y
Parent
6B9B7F74
Child Child
6B91CA58 6BA1DB48
VARCHAR2(30) VARCHAR2(40)
ADDRESS RAW(4)
POSITION NUMBER
DATATYPE NUMBER
MAX_LENGTH NUMBER
ARRAY_LEN NUMBER
BIND_NAME VARCHAR2(30)
u Based on X$KKSBV
SELECT address,hash_value,child_number,child_address
FROM v$sql
WHERE sql_text LIKE 'SELECT TO_CHAR (TO_DATE (:b1%';
CHILD_NUMBER 0 1
CHILD_ADDRESS 6BA268F0 6B8E3B20
LANGUAGE_MISMATCH N Y
Parent
6B94EA84
Child Child
6BA268F0 6B8E3B20
AMERICAN GERMAN
55 © 2006 Julian Dyke juliandyke.com
Internationalization
u Example 2 - Ordering
CREATE TABLE t1 (c1 NUMBER, c2 VARCHAR2(1));
SELECT address,hash_value,child_number,child_address
FROM v$sql
WHERE sql_text LIKE 'SELECT c1 FROM t1 ORDER BY t2%';
CHILD_NUMBER 0 1
CHILD_ADDRESS 6BA09B74 6B9D4560
LANGUAGE_MISMATCH N Y
Parent
6BA0358C
Child Child
6BA09B74 6B9D4560
AMERICAN GERMAN
u As USER2
SELECT COUNT (*) FROM t1;
SELECT address,hash_value,child_number,child_address
FROM v$sql
WHERE sql_text LIKE 'SELECT COUNT(*) FROM t1%';
SET SERVEROUTPUT ON
EXECUTE dbms_shared_pool.sizes (64);
u For example:
EXECUTE dbms_shared_pool.keep ('6B8551B8,593239587','C');