本章主要阐述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. *HDU2147 博弈

    kiki's game Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 40000/10000 K (Java/Others)Total ...

  2. Java中堆内存和栈内存详解

    Java把内存分成两种,一种叫做栈内存,一种叫做堆内存 在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配.当在一段代码块中定义一个变量时,java就在栈中为这个变量分配内存空间 ...

  3. 将asp.net core站点发布到IIS上遇到的问题

    今天第一次将整个 asp.net core 站点发布到 IIS 上,以前都是发布到 Linux 服务器上. 开始使用 dotnet publish -c release 命令发布,用浏览器访问站点时出 ...

  4. 自己动手写一个简单的MVC框架(第一版)

    一.MVC概念回顾 路由(Route).控制器(Controller).行为(Action).模型(Model).视图(View) 用一句简单地话来描述以上关键点: 路由(Route)就相当于一个公司 ...

  5. 《R in Action》读书笔记(3) 数据变换

    MindMapper 原文件

  6. Windows Azure Storage (22) Azure Storage如何支持多级目录

    <Windows Azure Platform 系列文章目录> 熟悉Azure平台的读者都知道,Azure Blob有三层架构.如下图:(注意blob.core.chinacloudapi ...

  7. WPF入门教程系列十七——WPF中的数据绑定(三)

    四. XML数据绑定 这次我们来学习新的绑定知识,XML数据绑定.XmlDataProvider 用来绑定 XML 数据,该XML数据可以是嵌入.Xmal文件的 XmlDataProvider 标记中 ...

  8. AngularJS中的表单验证

    AngularJS中的表单验证 AngularJS自带了很多验证,什么必填,最大长度,最小长度...,这里记录几个有用的正则式验证 1.使用angularjs的表单验证 正则式验证 只需要配置一个正则 ...

  9. 阿里云centos7搭建wordpress环境

    阿里云搭建wordpress系统 一.购买阿里云 二.安装php开发环境 1. https://www.apachefriends.org/zh_cn/index.html网站下载linux下的xam ...

  10. ArchLinux安装指南

    将ArchLinux作为进阶Linux发行版,主要看重滚动更新和深入理解Linux的安装过程. 由于是新手,所以先选择在公司电脑上用VMware来安装.然后渐进到借助U盘在win10笔记本上安装双系统 ...