本章主要阐述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. CSS 背景属性

    background: 简写属性,作用是将背景属性置在一个声明中 background-attachment: 背景图像是否固定或者随着页面的其余部队滚动 background-color: 设置元素 ...

  2. Linux下的Finger指令

    Linux finger命令 Linux finger命令可以让使用者查询一些其他使用者的资料.会列出来的资料有: Login Name User Name Home directory Shell ...

  3. HDFS Client 设计实现解析

    前面对 HDFS NameNode 和 DataNode 的架构设计实现要点做了介绍,本文对 HDFS 最后一个主要构成组件 Client 做进一步解析. 流式读取 HDFS Client 为客户端应 ...

  4. ASP.NET MVC 多语言方案

    前言: 好多年没写文章了,工作很忙,天天加班, 每天都相信不用多久,就会升职加薪,当上总经理,出任CEO,迎娶白富美,走上人生巅峰,想想还有点小激动~~~~ 直到后来发生了邮箱事件,我竟然忘了给邮箱密 ...

  5. Python黑帽编程2.1 Python编程哲学

    Python黑帽编程2.1  Python编程哲学 本节的内容有些趣味性,涉及到很多人为什么会选择Python,为什么会喜欢这门语言.我带大家膜拜下Python作者的Python之禅,然后再来了解下P ...

  6. Hadoop学习笔记—17.Hive框架学习

    一.Hive:一个牛逼的数据仓库 1.1 神马是Hive? Hive 是建立在 Hadoop 基础上的数据仓库基础构架.它提供了一系列的工具,可以用来进行数据提取转化加载(ETL),这是一种可以存储. ...

  7. [开源]C#二维码生成解析工具,可添加自定义Logo

    二维码又称 QR Code,QR 全称 Quick Response,是一个近几年来移动设备上超流行的一种编码方式,它比传统的 Bar Code 条形码能存更多的信息,也能表示更多的数据类型:比如:字 ...

  8. Javascript本质第一篇:核心概念

    很多人在使用Javascript之前都至少使用过C++.C#或Java,面向对象的编程思想已经根深蒂固,恰好Javascript在语法上借鉴了Java,虽然方便了Javascript的入门,但要深入理 ...

  9. 干货!表达式树解析"框架"(1)

    最新设计请移步 轻量级表达式树解析框架Faller http://www.cnblogs.com/blqw/p/Faller.html 关于我和表达式树 其实我也没有深入了解表达式树一些内在实现的原理 ...

  10. 喜大普奔,微软Microsoft JDBC Driver For SQL Server已发布到maven中央仓库

    相信通过java和SQLServer开发应用的同学们都经历过如下类似的问题. 微软提供的JDBC官方驱动没有放置在Maven仓库中,这样如果你的Java应用需要访问SQL Server,你不得不下载s ...