本章主要阐述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. iOS 属性修饰符记录 --不定时更新

    重新审视了一下OC在属性修饰符,特意记录一下来.以后不定时更新 > retain:只有在非ARC下才会有效,所有如果在ARC下使用了retain修饰也白搭 如以下的data属性用retain修饰 ...

  2. webpack模块加载css文件及图片地址

    webpack支持css文件加载并打包,只需安装相应加载器并在配置文件中配置 . 加载的css文件内容会与该模块里的js内容混合封装,这样做的好处是一个js文件包含了所有的css与js内容,有效减少了 ...

  3. 视区相关单位vw, vh..简介以及可实际应用场景

    这篇文章发布于 2012年09月24日,星期一,01:15,归类于 css相关. 阅读 37012 次, 今日 12 次 by zhangxinxu from http://www.zhangxinx ...

  4. 偶遇STM32 JTAG和SWD口(调试)被禁用无法下载,已经粗暴解决!

    处女座,为了板子走线美观,拉线方便,在项目量产前,还更改了原来外设的IO口,埋头苦干一天,移植ok,发现PB3一直不听使唤,好,加班检查代码,检查初始化,时钟,IO对应,然后试PCB板,是否短路,断路 ...

  5. Xcode插件管理工具Alcatraz

    1.简介 Alcatraz是一个能帮你管理Xcode插件丶模版及颜色配置的工具.它可以直接集成在Xcode的图形界面中,让你感觉就像在使用Xcode自带的功能一样. 2.安装和删除 使用如下的终端来安 ...

  6. myeclipse为表生成持久化对象

    1.连接好数据库之后,右击数据库名,选择open connection, 2.像这样展开: 3.如图选择, 选择之后如下图: 确定即可.

  7. Webstorm 10 for mac osx 注册机,序列号,kegen

    小菜最近get到mac体验机会,早就耳闻mac非常适合做开发,于是迫不及待的安装各种开发工具,不知不觉,轮到前端开发神器webstorm了,看了一下官网的价格,心拔凉拔凉的. 果断搜索注册机,搜到的结 ...

  8. Node.js + Web Socket 打造即时聊天程序嗨聊

    前端一直是一块充满惊喜的土地,不仅是那些富有创造性的页面,还有那些惊赞的效果及不断推出的新技术.像node.js这样的后端开拓者直接将前端人员的能力扩大到了后端.瞬间就有了一统天下的感觉,来往穿梭于前 ...

  9. Azure PowerShell (8) 使用PowerShell设置Azure负载均衡器规则

    <Windows Azure Platform 系列文章目录> 注意:如果Azure面对的客户只是企业级客户,企业级客户使用NAT设备访问Internet的话,因为多个客户端使用相同的So ...

  10. jquery插件的两种形式

    这里总结一下jquery插件的两种形式,一种是通过字面量的形式组织代码,另一种是通过构造函数的方式.下面就两种形式来分析俩个例子. 例子1: ;(function ($,window,document ...