暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片
故障排除:Shared Pool优化 (文档 ID 1523934.1).pdf
33
14页
2次
2025-03-04
100墨值下载
版权所有 (c) 2025Oracle。保留所有权利。Oracle 机密。
故障排除:Shared Pool优化 (文档 ID 1523934.1)
文档内容
用途
提出问题,得到帮助并分享您的心得
排错步骤
什么是shared pool
专用术语
Literal SQL
Hard Parse(硬解析)
Soft Parse(软解析)
完全相同的语句?
Sharable SQL
语句的版本
Library CacheShared Pool latches
Literal SQLShared SQL的比较
Literal SQL
Sharable SQL
减轻Shared Pool负载
Parse一次并执行多次
消除 Literal SQL
避免 Invalidations
CURSOR_SHARING 参数 (8.1.6 以上)
SESSION_CACHED_CURSORS 参数
CURSOR_SPACE_FOR_TIME 参数
CLOSE_CACHED_OPEN_CURSORS 参数
SHARED_POOL_RESERVED_SIZE 参数
SHARED_POOL_RESERVED_MIN_ALLOC 参数
SHARED_POOL_SIZE 参数
_SQLEXEC_PROGRESSION_COST parameter 参数 (8.1.5 以上)
预编译器的 HOLD_CURSOR RELEASE_CURSOR 选项
cursor固定(pinning)在shared pool
DBMS_SHARED_POOL.KEEP
Flushing(清空) SHARED POOL
DBMS_SHARED_POOL.PURGE
使用 V$ 视图 (V$SQL V$SQLAREA)
MTS, Shared Server XA
文档 1523934.1 https://support.oracle.com/epmos/faces/DocumentDisplay?_a...
1 14 2025/3/4 8:54
使用SQL 查看Shared Pool问题
在不同Oracle Releases中的都会遇到的问题
Bug 修复和增强功能
参考
适用于:
Oracle Database Cloud Service -
版本 N/A 和更高版本
Oracle Database - Enterprise Edition -
版本 7.0.16.0 11.2.0.2 [发行版 7.0 11.2]
Oracle Database - Standard Edition -
版本 7.0.16.0 11.2.0.3 [发行版 7.0 11.2]
Oracle Cloud Infrastructure - Database Service -
版本 N/A 和更高版本
Oracle Database Backup Service -
版本 N/A 和更高版本
本文档所含信息适用于所有平台
用途
简介
Oracle 7Oracle 12c shared pool调优的关键问题。特别对于存在下列问题的系统非常重要:
library cache latch/es或者latch:library cache之类的 Latch争用
shared pool latch 或者 latch:shared pool 之类的Latch争用
CPU解析时间
V$LIBRARYCACHE 中的高reloads
多版本的cursors
大量的parse call
经常发生ORA-04031 错误
提出问题,得到帮助并分享您的心得
您想同 Oracle 客户,员工及其它业界专家进一步探讨这个问题吗?
这里 您可以问问题,得到其他人的帮助以及分享您的心得。
更多其它关于数据库性能优化的讨论请到这里.
排错步骤
什么是
shared pool
Oracle
SGA的一个特定区域中保留SQL语句, packages, 对象信息以及其它一些内容,这就是大家熟悉的shared pool。这
个共享内存区域是由一个复杂的
cacheheap manager 构成的。它需要解决三个基本问题:
1. 每次分配的内存大小是不一致的,从几个字节到上千个字节;
2. 因为shared pool的目的是为了最大化共享信息,所以不是每次一个用户用完之后就可以释放这段内存(在传统的
heap manager方式会遇到这个问题)。内存中的信息可能对于其他session来说是有用的——Oracle并不能事先知
道这些内容是否会被再次用到;
3. Shared pool中的内容不能被写入到硬盘区域中,这一点和传统cache是不一样的。只有可重建的信息可以被覆
盖,因为他们可以在下次需要时重建。
基于这些背景,我们就可以理解
shared pool的管理是一件非常复杂的事情。下面的章节列出了一些影响shared pool性能和
文档 1523934.1 https://support.oracle.com/epmos/faces/DocumentDisplay?_a...
2 14 2025/3/4 8:54
它相关的
latch的关键问题,包括:
专用术语
Literal SQL
一个
Literal SQL语句是指在predicate中使用具体值,而不是使用绑定变量,即不同的执行语句使用的具体值可能是不一样
的。
1:应用程序使用了:
SELECT * FROM emp WHERE ename='CLARK';
而不是:
SELECT * FROM emp WHERE ename=:bind1;
TIP: 关于在 SQLPLUS 中使用绑定变量的更多信息请参考 Using Bind Variables
2: 以下语句不用绑定变量但是也不会被认为是
literal SQL,因为这个语句可以被多次执行共享。
SELECT sysdate FROM dual;
3: 如果整个应用都是用相同的值'2.0'来检查'
version'的话,那么这个语句可以被认为是可以共享的。
SELECT version FROM app_version WHERE version>2.0;
Hard Parse
(硬解析)
如果一个新的
SQL被发起,但是又不在shared pool里面的话,它将被完整的解析一次。例如:Oracle必须在shared pool
分配内存,检查句法和语义等等……这被称为
hard parse,它在CPU使用和latch获取上的都是非常消耗资源的。
Soft Parse
(软解析)
如果一个
session发起一个已经在shared pool中的SQL语句并且它可以使用一个当前存在的版本,那么这个过程被称为一
'
soft parse'。对于应用来说,它只需请求解析这个语句。
完全相同的语句
?
如果两个
SQL语句的含义相同但是没有使用相同的字符,那么Oracle认为它们是不同的语句。比如SCOTT在一个Session
提交的这两个语句:
SELECT ENAME from EMP;
SELECT ename from emp;
尽管它们实际上是相同的,但是因为大写字母
E’和小写字母'e'的区别,他们不会被认为是完全相同的语句。
Sharable SQL
如果是两个不同的
session发起了完全相同的SQL语句,这也不意味着这个语句是可以共享的。比如说:用户SCOTT
下有一个
EMP,发起了下面的语句:
SELECT ENAME from EMP;
文档 1523934.1 https://support.oracle.com/epmos/faces/DocumentDisplay?_a...
3 14 2025/3/4 8:54
of 14
100墨值下载
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文档的来源(墨天轮),文档链接,文档作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。