用户提交一个新SQL语句时,Oracle会分析(parse)该句SQL(硬解析),这个过程将耗费相对较多的时间。分析完毕后,oracle会将该SQL的分析结果给保存在Library Cache中,当数据库再次执行该SQL时,oracle将直接取第一次分析结果而不再重新解析,从而减少运行时间。
Library Cache四个组成部分:
共享SQL区:保存语句文本,编译后的语法分析树及执行计划。
私有SQL区:保存语句中的变量值。
共享PL/SQL区:保存PL/SQL语句。
控制结构区:保存锁等控制信息。
查看library cache的大小:
SQL> select sum(sharable_mem) from v$db_object_cache;
测试library cache的作用:
SQL> set timing on
SQL> select count(*) from dba_objects;
COUNT(*)
----------
49809
Elapsed: 00:00:00.20
SQL> select count(*) from dba_objects;
COUNT(*)
----------
49809
Elapsed: 00:00:00.10
查看保存在library cache中保存的已分析的SQL语句:
SQL> select * from v$sqltext where sql_text like '%dba_object%';
SQ