Oracle-OCP学习笔记:Shared Pool

栏目: 数据库 · Oracle · 发布时间: 6年前

内容简介:本章主要阐述SGA中的shared pool。Shared pool {1.free

本章主要阐述SGA中的shared pool。

Shared pool {

1.free

2.library cache( 缓存 sql 语句及其执行计划)

3.row cache( 数据字典缓存)

}

ps :对Oracle了解的多少的一个重要指标就是看你对数据字典了解多少。

--Shared pool

oracle 中只可以整体设置sharedpool的大小,不可以对shared pool中的内存区域分别设置大小。

shared pool 中容易出问题的是free和library cache;

1.free(shared pool 中空闲的内存部分)

Q :何时需要从free中找chunk呢?

A :在硬解析的时候。

注意:如果硬解析失败,会报一个非常经典的错误 Ora-4031

产生这个错误的原因:①系统产生大量的硬解析;②大量的硬解析产生了大量碎片,此时又来一个大的sql需要解析,而free空间不够(有可能本身空间有剩余,但是都是碎片,没有符合需求所要大小的块,如下图4-1),导致报错。

Oracle-OCP学习笔记:Shared Pool

2.library cache( 缓存sql语句及其执行计划)

library cache 的内存块:

Oracle-OCP学习笔记:Shared Pool

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 :如何清空librarycache 和 row cache?

A

1

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的错误。

1

select request_misses from v$shared_pool_reserved;

查询结果应该是0.如果大于0,要调整shared_pool_reserved_size 参数。

(5) 增加shared pool空间

1

2

3

4

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,自动分配的sharedpool的大小。

手工配置时,如果小于自动分配的大小,oracle直接忽略,此时showparameter sga,就不准确了。

2.shared pool 到底该设置多大?

如果sql语句没有共享,硬解析非常多,shared pool的作用是反的,就是设置越大反而越不好。

10g 以前。不超过1个g。,(允许有多个sub sharedpool,可以设置大于1G的shared pool)

10g 以后,可以超过1个g,2个g ,5个g。但也不建议设置太大。

利用一个sql语句看应该设置多少合适:

select shared_pool_size_for_estimate"SP",ESTD_LC_SIZE "EL",ESTD_LC_MEMORY_OBJECTS"ELM", ESTD_LC_MEMORY_OBJECTS"ELT",ESTD_LC_TIME_SAVED_FACTOR as "ELTS",

ESTD_LC_MEMORY_OBJECT_HITS as"ELMO"

FROM V$shared_pool_advice;

或者用EM 指导中心--内存指导--建议,看一下应该设置多大

Oracle-OCP学习笔记:Shared Pool

3.row cache( 数据字典缓存)

一般也不会出什么问题,暂不深入研究。

查看执行计划:

Select * from table (dbms_xplan.display_cursor(‘097adffwefwefwef’))

Oracle-OCP学习笔记:Shared Pool


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Algorithms on Strings, Trees and Sequences

Algorithms on Strings, Trees and Sequences

Dan Gusfield / Cambridge University Press / 1997-5-28 / USD 99.99

String algorithms are a traditional area of study in computer science. In recent years their importance has grown dramatically with the huge increase of electronically stored text and of molecular seq......一起来看看 《Algorithms on Strings, Trees and Sequences》 这本书的介绍吧!

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具