- 浏览: 115862 次
- 性别:
- 来自: 北京
文章分类
最新评论
当系统在加载PL/SQL大对象时,有可能遭遇由于SharedPool中存在大量碎片导致没有足够空间加载的问题。
我们可以将那些经常被使用的PL/SQL大对象预先保存到Shared Pool中,防止加载失败以及经常被换出,提高系统运行效率。
1.创建存储过程初始化测试环境
这里使用文章《【PL/SQL】向表中插入连续数字之PL/SQL方法》(http://space.itpub.net/519536/viewspace-696181)中提供的方法创建一个简单的存储过程用于测试。
注:实际生产环境中,该方法用于保存PL/SQL大对象,而非本例中给出的样例存储过程。
sys@ora10g> conn sec/sec
Connected.
sec@ora10g> create or replaceprocedurep_insert
2 is
3 begin
4 for i in 1..10 loop
5 insert into t values(i);
6 end loop;
7 commit;
8 end;
9 /
Procedure created.
2.创建DBMS_SHARED_POOL包
系统默认情况下不会创建dbms_shared_pool这个包。我们可以使用dbmspool.sql脚本进行手工创建。
1)验证默认情况下DBMS_SHARED_POOL包未创建
sys@ora10g> desc dbms_shared_pool
ERROR:
ORA-04043: object dbms_shared_pool does not exist
2)执行创建DBMS_SHARED_POOL包脚本
sys@ora10g> @?/rdbms/admin/dbmspool.sql
Package created.
Grant succeeded.
View created.
Package body created.
3)查看创建成功的DBMS_SHARED_POOL包
sys@ora10g> desc dbms_shared_pool
PROCEDURE ABORTED_REQUEST_THRESHOLD
Argument Name Type In/Out Default?
------------------------------ ----------------------- ------ --------
THRESHOLD_SIZE NUMBER IN
PROCEDURE KEEP
Argument Name Type In/Out Default?
------------------------------ ----------------------- ------ --------
NAME VARCHAR2 IN
FLAG CHAR IN DEFAULT
PROCEDURE SIZES
Argument Name Type In/Out Default?
------------------------------ ----------------------- ------ --------
MINSIZE NUMBER IN
PROCEDURE UNKEEP
Argument Name Type In/Out Default?
------------------------------ ----------------------- ------ --------
NAME VARCHAR2 IN
FLAG CHAR IN DEFAULT
我们这里关注DBMS_SHARED_POOL包中的KEEP和UNKEEP方法。
3.使用DBMS_SHARED_POOL包将存储过程保存到Shared Pool
1)确认存储过程P_INSERT是否被保存到Shared Pool
可以通过查询v$db_object_cache视图获得这方面的信息。
sys@ora10g> col owner for a10;
sys@ora10g> col name for a30;
sys@ora10g> col kept for a4
sys@ora10g> select owner,name,type,kept from v$db_object_cache where name='P_INSERT';
OWNER NAME TYPE KEPT
---------- ------------------------------ -------------------- ----
SEC P_INSERT PROCEDURE NO
最后一列KEPT表明存储过程P_INSERT此时没有被保存到Shared
Pool。
2)保存存储过程P_INSERT到Shared Pool
由于存储过程p_insert是创建在sec用户下,我们可以使用如下方法将该存储过程保存到Shared Pool中。
sys@ora10g> exec dbms_shared_pool.keep('SEC.P_INSERT','P');
PL/SQL procedure successfully completed.
3)在此确认存储过程P_INSERT是否被保存到Shared
Pool
sys@ora10g> select owner,name,type,kept from v$db_object_cache where name='P_INSERT';
OWNER NAME TYPE KEPT
---------- ------------------------------ -------------------- ----
SEC P_INSERT PROCEDURE YES
最后一列KEPT表明存储过程P_INSERT此时已被保存到Shared
Pool。
4.使用DBMS_SHARED_POOL包解除Shared Pool中保存的存储过程
我们这里使用UNKEEP方法可以解除Shared Pool中保存的存储过程。
sys@ora10g> exec dbms_shared_pool.unkeep('SEC.P_INSERT','P');
PL/SQL procedure successfully completed.
sys@ora10g> select owner,name,type,kept from v$db_object_cache where name='P_INSERT';
OWNER NAME TYPE KEPT
---------- ------------------------------ -------------------- ----
SEC P_INSERT PROCEDURE NO
解除成功。
原文地址:http://space.itpub.net/519536/viewspace-696189
发表评论
-
Google公开Megastore论文——解决NoSQL、SQL融合难题
2011-03-02 14:44 668实际上,作为一个建 ... -
开源数据库Sharding技术
2011-03-02 16:14 710内容摘要:Sharding 不是一个某个特定数据库软件附 ... -
Java 开发 2.0: 使用 Hibernate Shards 进行切分
2011-03-02 16:26 638当关系数据库试图在 ... -
可扩展的分布式数据库架构
2011-03-03 14:44 682本文发表在《程序员 ... -
OLTP系统与DSS系统对比
2011-03-03 15:35 646在进行数据库系统的设计时,一个不可忽视的问题是弄清你所 ... -
Oracle高级复制机制
2011-03-10 15:48 659Oracle高级复制即可支 ... -
Oracle高级复制的同步复制的配置步骤说明
2011-03-10 15:50 832以下的文章主要讲述的是Oracle高级复制的同步复制,如 ... -
linux oracle中文乱码问题解决方法
2011-04-11 15:18 758connect system/oracle9i ... -
ubuntu下安装ocfs2
2011-07-12 14:20 970简介 一个集群文件系统能使运行在集群中所有节点并发的通过 ... -
asm下载地址
2011-07-12 16:50 878asm rpm包下载地址http://www.oracle.c ... -
oracle重要初始参数
2011-09-28 17:15 870OPEN_CURSORS session可以打开的游标最大数, ... -
SQLJ是什么?优点?
2011-10-11 09:56 912SQLJ是一种允许把静态的SQL语句以文本形式嵌入Java程序 ... -
共享池的调整与优化(Shared pool Tuning)
2011-10-11 10:53 732共享池(Shared pool)是SGA中最关键的内存片段,共 ... -
oracle sga相关
2011-10-12 17:08 836oracle主要影响性能的内存: Shared ... -
oracle内存调整相关
2011-10-14 15:52 888db_cache_size与sga_target关系 db_ ... -
oracle索引分类
2011-10-17 13:31 850B-TREE INDEX,B树索引:在创建索引时他是 ... -
修改oracle redo log的大小
2011-10-17 15:53 11011.查看现在的REDO GRO ... -
本地管理表空间
2011-10-18 13:29 759本地管理表空间的好处: 1:快速,并发空间操作 ... -
Oracle表空间命令
2011-10-19 16:55 795创建立表空间 CREATE TABLESPACE ... -
Oracle 索引组织表(IOT)
2011-10-28 09:16 797索引组织表(IOT)有一种类B树的存储组织方法。普通的堆组织表 ...
相关推荐
26. **DBMS_SHARED_POOL**: 管理共享池中的对象,优化内存使用。 27. **DBMS_TYPES**: 定义自定义数据类型,扩展PL/SQL的数据模型。 28. **DBMS_REGISTRY**: 管理数据库注册,用于分布式数据库环境。 29. **DBMS_...
dbms_shared_pool管理共享池,存储解析过的PL/SQL代码和数据字典信息。dbms_random提供随机数生成功能,常用于测试和模拟。 dbms_logmnr(Log Miner)工具允许分析归档日志,以获取历史数据库活动的详细信息。dbms_...
创建SQL Profile后,它们存储在SHARED POOL中,这是一个内存结构,保存了PL/SQL代码、执行计划和其他数据库对象的解析信息。将SQL Profile放在SHARED POOL中,意味着每次执行相关SQL语句时,都会使用预定义的执行...
通过学习本书,读者不仅可以掌握PL/SQL的基础编程知识(嵌入SQL语句和编写子程序),而且还可以掌握PL/SQL的所有高级开发特征(使用记录类型、集合类型、对象类型和大对象类型)。另外,本书还为应用开发人员提供了...
使用 `V$SHARED_POOL` 或 `V$LIBRARY_CACHE` 等视图可以在共享池中查找特定的 PL/SQL 对象,这对于诊断性能问题非常有帮助。 #### 10. 当错误发生时清空共享池 当遇到某些类型的错误时,可能会导致共享池中的对象...
7. 监控并处理过大的匿名PL/SQL块,可以转换为存储过程或使用`dbms_shared_pool.keep()`来保留。 8. 优化Dictionary Cache,避免misses的发生。可以通过调整`shared_pool_size`间接调整Dictionary Cache大小,保持...
- 常用的大对象如存储过程、触发器和序列应保留在Shared Pool中,避免频繁移出导致性能下降。 - 可通过`dbms_shared_pool.keep()`函数将对象保持在缓存中。 4. **Dictionary Cache优化**: - Dictionary Cache的...
Oracle提供了许多内置的PL/SQL包,如DBMS_OUTPUT用于在客户端显示信息,DBMS_DEBUG_JDWP用于调试PL/SQL代码,DBMS_METADATA用于获取数据库对象的DDL定义,以及DBMS_LOCK用于实现应用级别的锁定等。 2. **JDBC(Java...
1. **Shared Pool优化**:Shared Pool是Oracle内存结构的一部分,用于存储解析的SQL语句、数据字典信息以及PL/SQL代码。优化Shared Pool可以显著提升性能,因为它减少了对磁盘I/O的需求。 2. **Gets、Pins和Reloads...
将常用的大对象,如存储过程、触发器、序列,通过`dbms_shared_pool.keep()`函数保留在Shared Pool中。 4. **匿名PL/SQL块**:过大或频繁的匿名PL/SQL块可以转换为小的块或存储过程,以减少内存占用和提高性能。 5...
6. **大对象和匿名PL/SQL块**: - 大的匿名PL/SQL块可能导致内存碎片,应尽量避免或转化为存储过程。 - 可以通过`v$sqlarea`视图找到长度超过特定阈值的匿名块,并进行相应的处理。 在进行Oracle调优时,持续监控...
应将常用的大对象如存储过程、触发器和序列保持在Shared Pool中,以避免频繁移出内存。可以使用`dbms_shared_pool.keep()`来保留特定对象。 - **匿名PL/SQL块**: 过大的匿名块会影响性能。可以将它们转换为小型块或...
1. **使用DBMS_PDB包进行转换:** ```sql -- 首先确保数据库处于mount状态 alter database mount; -- 创建一个新的PDB exec dbms_pdb.clone_pluggable_database('ORCLPDB', 'NEWPDB', 'FROM_EXISTING_FILE', '...
- **使用DBMS_SHARED_POOL.PIN程序包**:通过固定某些大型包来确保它们不会被驱逐出共享池。 - **碎片管理**:定期执行`DBMS_SHARED_POOL.CLEANUP`或`ALTER SYSTEM FLUSH SHARED_POOL`来清理碎片。 - **考虑自动...
此外,DBMS_SHARED_POOL包提供了一些管理Library Cache的功能,比如可以用来缓存对象以避免重新解析,或者用于清理不再使用的对象,从而优化内存使用。 总结来说,Library Cache Internals涉及到Oracle数据库如何...
针对PL/SQL对象,如存储过程和函数,可以使用v$db_object_cache视图来监控它们的使用情况,并通过执行dbms_shared_pool.keep来强制保留它们在共享池中。 数据字典缓存是共享池的一部分,主要负责存储Oracle系统数据...
- 使用 Oracle 提供的 `DBMS_LOCK` 包可以在修改 SQL 或 PL/SQL 对象之前获得锁,从而避免不必要的等待。例如: ```sql DECLARE l_lock_id NUMBER; BEGIN -- 尝试获取锁 DBMS_LOCK.REQUEST( lock_id => l_...
常见的解决方法是将常用的大对象如存储过程、触发器和序列保留在Shared Pool中,使用`dbms_shared_pool.keep()`函数。 5. **匿名PL/SQL优化**:过大的匿名PL/SQL块应分解为小块或转换为存储过程,以减少内存需求。 ...
如果发现未保存在library cache中的大对象,可以使用`dbms_shared_pool.keep`来保留它们。 5. 过大的匿名PL/SQL代码块也会影响性能。建议将其转换为小的匿名块调用存储过程,或直接保持在Shared Pool中。 6. 字典...