暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle数据库如何使用DBMS_SHARED_POOL包将对象固定在共享池

Oracle微学堂 2018-03-21
1519
DBMS_SHARED_POOL作用
1
 DBMS_SHARED_POOL包的作用把需要的对象pinshared pool中,由此被pin住的对象就
 
不再受shared pool LRU法则的约束而永久的驻留在shared pool中。
DBMS_SHARED_POOLshared_pool_reserved区别
2
 shared_pool_reserverd的含义是,当shared_pool 被不断的写入,同时由于LRU法则的存在
 
较旧的对象被交换出去,这样就会造成shared_pool被分割成许多较小的区域,这时如果应用
 
请求一个 较大的连续的内存区域时,如果没有shared_pool_reserved的存在,oracle就会
 
去搜索整个shared pool以寻找一个连续的较大区域,当搜索不到满足需求的区域时,oracle
 
就不得不释放一些区域来满足新来的需求,这样就可能造成性能的下降,因为被释放的区域可能
 
恰恰是其他应用所需要的,oracle又不得不进行重新解析。为了避免这种情况的出现,
 shared_pool_reserverd_size
用来设置一个shared pool 保留的区域,用于应用对较大内存
 
区域的需求,保留区的信息可以查询v$shared_pool_reserved视图。
创建DBMS_SHARED_POOL
3

 DBMS_SHARED_POOL可以由?\RDBMS\ADMIN\DBMSPOOL.SQL创建

SQL> @?\rdbms\admin\dbmspool.sql

程序包已创建。
授权成功。
视图已创建。
程序包体已创建。
 查询v$db_object_cache视图,看dbms_job包在library cache中的状态。
 v$db_object_cache用于查询cachelibrary cache中的对象信息,这里的对象包括表,
 索引,聚簇,同义词,PL/SQL过程,包,触发器。
SQL> col name for a20
SQL> col type for a20
SQL> select name,type,sharable_mem,loads,kept from v$db_object_cache
  2   where upper(name)=upper('dbms_job');

NAME                 TYPE                 SHARABLE_MEM      LOADS KEP
-------------------- -------------------- ------------ ---------- ---
DBMS_JOB             NOT LOADED                      0          1 NO
DBMS_JOB             NOT LOADED                      0          1 NO

 dbms_job包进行keep操作
SQL> exec dbms_shared_pool.keep('dbms_job');

PL/SQL 过程已成功完成。
SQL> select name,type,sharable_mem,loads,kept from v$db_object_cache
  2   where upper(name)=upper('dbms_job');

NAME                 TYPE                 SHARABLE_MEM      LOADS KEP
-------------------- -------------------- ------------ ---------- ---
DBMS_JOB             PACKAGE                     20828          2 YES
DBMS_JOB             PACKAGE BODY                12636          2 YES

 dbms_job包进行unkeep操作
SQL> exec dbms_shared_pool.unkeep('dbms_job');

PL/SQL 过程已成功完成。

SQL> select name,type,sharable_mem,loads,kept from v$db_object_cache
  2   where upper(name)=upper('dbms_job');

NAME                 TYPE                 SHARABLE_MEM      LOADS KEP
-------------------- -------------------- ------------ ---------- ---
DBMS_JOB             PACKAGE                     20828          2 NO
DBMS_JOB             PACKAGE BODY                12636          2 NO

 FLUSH shared pool
SQL> alter system flush shared_pool;

系统已更改。

SQL> select name,type,sharable_mem,loads,kept from v$db_object_cache
  2   where upper(name)=upper('dbms_job');

NAME                 TYPE                 SHARABLE_MEM      LOADS KEP
-------------------- -------------------- ------------ ---------- ---
DBMS_JOB             NOT LOADED                      0          2 NO
DBMS_JOB             NOT LOADED                      0          2 NO

扫描二维码关注我的微学堂

搜索刘老师微信号:Rman-2014,备注“Oracle学习与咨询”,即可添加好友;或者扫描下面二维码,关注我的“微学堂”公众号,了解最新OCP认证动态、题库及答案解析、培训机构及讲师介绍、课堂授课内容等。每天还有一篇技术文章发布哦!



文章转载自Oracle微学堂,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论