oracle中如何将对象固定到共享池
PL/SQL一般都很大。要将此类对象加载到共享池中,需要找到一个大的尺寸。如果连续加载段的连续内存空间,必然会导致大量热内存被老化出共享池。这必然会影响数据库的性能。
因此将常用的PL/SQL或SQL游标固定到共享池中可以解决上述问题。包括可能的 ORA-04031 错误。
1.将 PL/SQL 修复到共享池
SYS@cdbtest1(MING)> exec sys.dbms_shared_pool.keep('ming.p_hello','P');
p>PL /SQL过程成功完成。
您可以通过以下sql的keep字段检查它是否固定到共享池中。
选择 * FROM v$db_object_cache whereowner='MING' and TYPE = 'PROCEDURE';
修复解决方案:
SYS@cdbtest1(MING )> exec sys.dbms_shared_pool.unkeep('ming .p_hello','P');
PL/SQL 过程成功完成。
2.将sql游标固定到共享池方法
对于固定SQL游标,需要了解以下内容:
a.固定游标需要获取游标的地址和hash_value
b.对于父游标下面的多个子游标,其地址和hash_value相同
MING@ming(MING)>variable p number;
MING@ming(MING)>exec :p := 10;
PL/SQL 过程成功完成。
MING@ming(MING)> select /*test2*/ count(*) from t1 where a<: p;
COUNT(*)
< p>----------36
MING@ming(MING )> 设置第 100 行
MING@ming(MING) > select sql_id,sql_text from v$sql where sql_text like '%test2%';
SQL_ID SQL_TEXT
< p>------------- --- -------------------------------- ------------------ ------------------1anf7skpasz1a select /*test2*/ count(*) from t1 where a<:p
5ybns6qudvgcm select sql_id,sql_text from v$sql where sql_text like '%test2%'
MING @ming(MING)> select sql_id,address,hash_value,version_count from v$sqlarea where sql_id='1anf7skpasz1a';
SQL_ID 地址 HASH_VALUE VERSION_COUNT
------- ------ ---------------- ---------------- -------------------
< p>1anf7skpasz1a 000000007267DA48 2863430698 1固定光标
exec sys.dbms_shared_pool.keep('000000007267DA48,2863430698','C');
取消固定光标< /p>
exec sys.dbms_shared_pool.unkeep('000000007267DA48,2863430698','C');
至此,相信大家对“如何Oracle将对象固定到共享池》,不妨来实践一下吧!这是网站。更多相关内容,您可以进入相关渠道进行查询。关注我们并继续学习!
2. 本站积分货币获取途径以及用途的解读,想在本站混的好,请务必认真阅读!
3. 本站强烈打击盗版/破解等有损他人权益和违法作为,请各位会员支持正版!
4. 编程技术 > oracle中如何将对象固定到共享池