本章主要阐述SGA中的shared pool。
Shared pool {
1.free
2.library cache(缓存sql语句及其执行计划)
3.row cache(数据字典缓存)
}
 
ps:对Oracle了解的多少的一个重要指标就是看你对数据字典了解多少。
 
 
--Shared pool
oracle 中只可以整体设置shared pool的大小,不可以对shared pool中的内存区域分别设置大小。
shared pool中容易出问题的是free和library cache;
1.free(shared pool中空闲的内存部分)
Q:何时需要从free中找chunk呢?
A:在硬解析的时候。
注意:如果硬解析失败,会报一个非常经典的错误Ora-4031。
产生这个错误的原因:①系统产生大量的硬解析;②大量的硬解析产生了大量碎片,此时又来一个大的sql需要解析,而free空间不够(有可能本身空间有剩余,但是都是碎片,没有符合需求所要大小的块,如下图4-1),导致报错。
2.library cache(缓存sql语句及其执行计划)
library cache 的内存块:
Q:shared pool中有多少chunk?
A:查询x表(x$ksmsp)的总数,
select count(*) from x$ksmsp;
 
Q:查询硬解析更直观的方法?
A:

select name, value
from v$sysstat
where name like 'parse%';
 
Q:如何清空library cache 和 row cache?
A:

alter system flush shared_pool;
(慎用flush命令,之后会产生大量的硬解析,能解决4031错误,但治标不治本。)
 
Q:如何减少硬解析?
A:共享sql,让sql完全相同。统一书写风格;使用绑定变量。
sql=>ASCII码值=>hash值=>运算=>挂哪个链上。
--使用绑定变量使得sql共享
declare v_sql varchar2(50);
begin for i in 1..10000 loop
v_sql := 'insert /*jingyu*/ into test values(:1)';
execute immediate v_sql using i;
end loop;
commit;
end;
--oracle有一个参数cursor_sharing
show parameter cursor
alter system set cursor_sharing='force';
(可以解决字面值没有使用绑定变量的问题。尽量先让开发去改,实在不行再改这个)
 
Q:如何找到没有共享的sql语句?
A:spool 1.txt
select sql_fulltext
from v$sql
where executions=1
order by sql_text;
spool off
注:结果不一定都是没有共享的sql语句,有可能是该sql语句本来就执行了一次。
 
Q:查看library cache命中率(容易出问题,正常很接近100%)
A:

select sum(pinhits)/sum(pins)*100
from v$librarycache;
 
Q:查看row cache命中率(一般没问题)
A:

select sum(gets), sum(getmisses), 100*sum(gets-getmisses)/sum(gets)
from v$rowcache;
 
Q:如何看一条sql语句的执行计划
A:先在v$sql中确认sql_id, 然后使用
select * from table(dbms_xplan.display_cursor('g4pkmrqrgxg3b'));
查看执行计划。
 
小结:
1.如何解决4031错误?
(1)alter system flush shared_pool;
(2)共享sql
(3)dbms_shared_pool.keep('大的对象名');
(4)保留区(在shared pool中单独划分出一个空间来,只用来放大对象)
把保留区设置的足够大,可减少很多4031的错误。
select request_misses from v$shared_pool_reserved;
查询结果应该是0.如果大于0,要调整shared_pool_reserved_size 参数。
(5)增加shared pool空间
select component, current_size from v$sga_dynamic_components;
show parameter sga_target
show parameter sga_max_size
alter system set shared_pool_size=150M scope=both;
10g之后,统一的一个参数sga_target (动态参数)
sga_max_size(静态参数,用来约束sga_target的)
注意:如果设置了sga_target,自动分配的shared pool的大小。
手工配置时,如果小于自动分配的大小,oracle直接忽略,此时show parameter sga,就不准确了。
 
2.shared pool到底该设置多大?
如果sql语句没有共享,硬解析非常多,shared pool的作用是反的,就是设置越大反而越不好。
10g以前。不超过1个g。
10g以后,可以超过1个g,2个g ,5个g。但也不建议设置太大。
利用一个sql语句看应该设置多少合适:
或者用EM 指导中心--内存指导--建议,看一下应该设置多大
 
3.row cache(数据字典缓存)
一般也不会出什么问题,暂不深入研究。

相克军_Oracle体系_随堂笔记004-shared pool的更多相关文章

  1. 相克军_Oracle体系_随堂笔记002-基础

    1.常见的Oracle生产库环境: 图2-1可以说是标准的生产库环境,处处体现了冗余,有效防止了单点故障.这就是HA(高可用) 而且冗在某种条件下还可以去掉,平常实现同时运行提供服务,如果一台坏掉,另 ...

  2. 相克军_Oracle体系_随堂笔记001-概述

    一.Oracle官方支持 1.在线官方文档 http://docs.oracle.com/ 2.metalink.oracle.com,如今已经改成:http://support.oracle.com ...

  3. 相克军_Oracle体系_随堂笔记003-体系概述

    1.进程结构图 对Oracle生产库来讲,服务器进程(可以简单理解是前台进程)的数量远远大于后台进程.因为一个用户进程对应了一个服务器进程. 而且后台进程一般出问题几率不大,所以学习重点也是服务器进程 ...

  4. 相克军_Oracle体系_随堂笔记005-Database buffer cache

    本章主要阐述SGA中的Database buffer cache. Buffer cache { 1.pin (读写瞬间的状态) 2.clean 3.dirty 4.unused } --Databa ...

  5. 相克军_Oracle体系_随堂笔记006-日志原理

    简单来说,学习Oracle数据库就两个目标: 保证数据库数据的一致性: 提高数据库的性能(这个和日志没关系).   日志的功能:     只是保证数据库数据的一致性:   1.Oracle日志原理   ...

  6. 相克军_Oracle体系_随堂笔记007-PGA

    实际工作中,Oracle中有两个很重要:Server Process 和 PGA.   PGA内存作用和构成   1.PGA作用 2.PGA构成 1)private SQL area   2)Sess ...

  7. 相克军_Oracle体系_随堂笔记008-存储结构

    控制文件.数据文件.日志文件    放在存储上.   参数文件:数据库启动时读取,并不关闭,但是启动过后丢了也没事.一般放在服务器上. $ORACLE_HOME/dbs下   备份文件{     控制 ...

  8. 相克军_Oracle体系_随堂笔记009-检查点队列

    1.检查点队列 checkpoint queue RBA 日志块地址 redo block address LRBA 第一次被脏的地址 HRBA 最近一次被脏的地址 on disk rba 重做日志( ...

  9. 相克军_Oracle体系_随堂笔记010-SCN

    1.SCN的意义?system change number     时间    先后.新旧 select dbms_flashback.get_system_change_number, SCN_TO ...

随机推荐

  1. day3 Linux基础

    1.正文处理命令及tar命令 1) 将用户信息数据库文件和组信息数据库文件纵向合并为一个文件/1.txt(覆盖) cat /etc/passwd /etc/group >1.txt2) 将用户信 ...

  2. Linux VMware 克隆后无法启动eth0网卡

    引: VMware 下LINUX出现:Device eth0 does not seem to be present, delaying initialization.解决办法 VMWare 克隆 复 ...

  3. 模拟Post登陆带验证码的网站

    前言: 作者在一个项目需求 模拟用户登陆,获取该用户的订单记录. 该系统需要用户名,密码,验证码 (验证码为正楷的数字4位),于是参考网络一些文章,并进行了很多测试,总结步骤如下: 步骤1 : 通过h ...

  4. 自写函数VB6 STUFF函数 和 VB.net 2010 STUFF函数 详解

    '*************************************************************************'**模 块 名:自写函数VB6 STUFF函数 和 ...

  5. angularjs provider 供应商服务

    今天学习了angularjs的provider的供应商服务,写了个例子(自定义供应商服务,也可使用angularjs内部提供的服务) var starterApp = angular.module(' ...

  6. shell简单用法笔记(一)

    一.linux中主要用的bash shell:查看linux系统中支持的shell种类可用: vim /etc/shell 执行shel脚步的方式: 1.赋予脚步可执行权限,使用相对或绝对路径调用该脚 ...

  7. Linux 部署ASP.NET SQLite 应用 的坎坷之旅 附demo及源码

    Linux 部署ASP.NET SQLite 应用 的坎坷之旅.文章底部 附示例代码. 有一台闲置的Linux VPS,尝试着部署一下.NET 程序,结果就踏上了坑之路,不过最后算是完美解决问题,遂记 ...

  8. 那些证书相关的玩意儿(SSL,X.509,PEM,DER,CRT,CER,KEY,CSR,P12等)

    之前没接触过证书加密的话,对证书相关的这些概念真是感觉挺棘手的,因为一下子来了一大堆新名词,看起来像是另一个领域的东西,而不是我们所熟悉的编程领域的那些东西,起码我个人感觉如此,且很长时间都没怎么搞懂 ...

  9. 从阿里巴巴IPO联想到创始人和资方关系

    [小九的学堂,致力于以平凡的语言描述不平凡的技术.如要转载,请注明来源:小九的学堂.cnblogs.com/xfuture] 5月7日,阿里巴巴于今日向美国证券交易委员会(SEC)提交了IPO(首次公 ...

  10. 从零3D基础入门XNA 4.0(2)——模型和BasicEffect

    [题外话] 上一篇文章介绍了3D开发基础与XNA开发程序的整体结构,以及使用Model类的Draw方法将模型绘制到屏幕上.本文接着上一篇文章继续,介绍XNA中模型的结构.BasicEffect的使用以 ...