Oracle-OCP学习笔记:Shared Pool

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

内容简介:本章主要阐述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


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

查看所有标签

猜你喜欢:

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

智能主义

智能主义

周鸿祎 / 中信出版集团股份有限公司 / 2016-11-1 / CNY 49.00

大数据和人工智能迅猛发展,对社会和商业的影响日益深刻,从学术界到企业界,智能化时代必将来临,已经成为共识。而此次变革,将会开启新一轮的发展浪潮。企业家、互联网以及传统企业、个人,应当如何理解这一轮的发展,如何行动以抓住智能化所带来的众多机遇,成为所有人持之以恒的关注热点。 周鸿祎作为最具洞察力的互联网老兵、人工智能领域成功的先行者,通过总结360公司的战略布局、产品规划、方法论实践,从思想到......一起来看看 《智能主义》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具