相老师的OCP教程 11-15课 文字版

甲骨论11课SQL语句解析类型硬解析软解析

SQL语句执行过程:parse-execute-fetch

sharedPool组成:

l  Free空间

l  Library库缓存:保存库和执行计划

l  rowCache字典缓存:保存Oracle数据信息,如数据库的表数、用户数等。

数据字典的作用:(需要多了解数据字典表)

1)            #sqlplus / as sysdba

2)            >Create table t1 as select *from dba_objects;拷贝建立一个表

3)            >desc dba_tables

4)            >select table_name,OWNERfrom dba_tables where table_name like ‘T1%’

查看共享池内存:

1)            #select * from v$sgastat awhere a.pool =’shared pool’ and a.NAME=’free memory’

2)            #select * from v$sgastat awhere a.NAME=’library cache’

3)            #select * from v$sgastat awhere a.NAME=’row cache’

SQL解析类型:硬解析(bufferCache无缓存有执行方案)、软解析、软软解析(也称不解析)。

硬解析的执行方案选优最消耗资源。软解析不需要执行方案选优,

#selectname,value from v$sysstat where name like ‘parse%’ //查看解析中硬解析数量,解析失败数量。

甲骨论12课shared内存块组成结构及4031错误产生原因分析

内容:chain、trunk、硬解析/软解析过程、ora4031错误。

sharedPool内存块组成:Oracle只能总体设置sharedPool大小,不能单独libraryCache或rowCache大小。Free空间的内存块挂在链上,小内存块在链前,大内存块在链后。只有硬解析使用Free空间,Free空间中过多的小内存块遇到需要大内存块的长sql语句,就会出现硬解析失败Ora4031错误。

硬解析失败Ora4031错误原因:

l  过多硬解析,Free空间不足

l  Free空间碎片(小内存块)过多,而需要大内存块的硬解析。

Free空间中链chain的作用:Free空间通过链的遍历找到内存块。使用锁latch保护共享池中空闲空间中的链。

libraryCache中挂链的方法是:sql语句转为ASCII码,转为Hash值,转为数字,转为链编号。libraryCache中内存块按Hash值排序,这与Free中按内存块大小排序的方式不同。

Ora4031错误检查语句:

l  #select count(*) from x$ksmsp //检查libraryCache中的trunk数

l  #selec count(*) from dba_objects //任意执行一条未执行的语句,触发硬解析

l  #select count(*) from x$ksmsp //

l  #alter system flush shared_pool //清空libraryCache和rowCache,执行后Free空间的碎片减少,ora4031错误减少,同时会带来大量的硬解析。此命令只能缓解ora4031错误,解决还需要优化数据库结构。

l  #select name,value from v$sysstat where name like ‘parse%’ //查看软硬解析具体情况

方法:检查两次trunk数,计算一段时间内增加trunk数。产生trunk数少说明系统很稳定(硬解析少),多则说明硬解析较多。也可以用v$sysstat查看。

甲骨论13课共享SQL减少硬解析

硬解析缺点:消耗资源、出现ora4031错误。完全相同(包括空格大小写)的sql语句才能共享,才能软解析。

#selectsql_id,sql_text,excecutions from v$sql where sql_text like ‘%hello%’ //查看sql语句的sql_id

避免硬解析方法:

l  统一书写风格

l  变量不同的使用绑定变量,将sql语句分为动态部分和静态部分。

1)            >declare v_sql varchar2(50);

2)            >begin for I in 1..10000loop

3)            >v_sql :=’insert /hello/into test values (:1)’;

4)            >execute immediate v_sqlusing I;

5)            >end loop;

6)            >commit;

7)            >end;

>show prarmeter cursor //显示cursor sharing参数

>alter system set session_cached_cursors=150 scope=both; //改cursors参数

甲骨论14课如何解决ORA4031错误

找出没有共享的SQL语句:

1)            >select SQL_FULLTEXT fromv$sql where EXECUTIONS=1 and sql_text like ‘%from t%’; //找只执行一次的变量

2)            >spool 1.1st

3)            >select SQL_FULLTEXT fromv$sql where EXECUTIONS=1 order by sql_text;

4)            >spool off

5)            >exit

查看解析命中率(要求运行稳定后命中率90%以上):

1)            >selectsum(pinhits)/sum(pins)*100 from v$librarycache; //library命中率,一般出问题较多

2)            >selectsum(gets),sum(getmisses),100*sum(gets-getmisses)/sum(gets) from v$rowcachewhere gets>0; //rowcache命中率

解决ora4031错误的方法:

1)            >alter system flushshared_pool;

2)            共享SQL

>alter system set cursor_sharing=’force’;

>show parameter cursor;

这种方法只能在共享SQL中的强制绑定变量,不能解决书写规范问题。

3)            使用dbms_shared_pool.keep包

>@?/rdbms/admin/dbmspool.sql //执行sql语句,产生对象dbms_shared_pool.keep

>select * from v$db_object_cache where sharable_mem>10000

and (type=’PACKAGE’ or type=’PACKAE_BODY’ ortype=’FUNCTION’ or type=’PROCEDURE’) and kept=’NO’//查看占内存较大的sql语句

> //强制keep到内存中

4)            保留区

>select REQUEST_MISSES from v$shared_pool_reserved; //如果发现“保留区请求失败次数REQUEST_MISSES”

>show paremeter shared //显示共享池保留空间

5)            增加shared_pool空间

>select COMPONENT,CURRENT_SIZE fromV$SGA_DYNAMIC_COMPONENTS;

>show parameter sga_target

>show parameter sga_max_size

>alter system set shared_pool_size=150M scope=both;

从oracle10后,只需要设定6个池共享空间sga_target,由oracle分配各个池大小。此参数设定需要重启oracle。sga_target_max参数可以防止sga_target设置过大导致系统死机。

1)            >show parameter shared_pool;//查看共享池设置值

2)            >alter system setshared_pool_size=20; //设置共享池的值

3)            >select COMPONENTCSURRENT_SIZEfrom V$SGA_DYNAMIC_COMPONENTS; //查看共享的池的实际值

若共享池大小设置小于sga_target分配,则不会被采纳。注意到从V$SGA才显示共享池实际值。

甲骨论15课如何设置shared_pool及sga大小

共享池过大的坏处:

l  只执行一次的sql语句(没有享受到共享)也进行共享机制(到libraryCache查找,解析,Free空间中找空trunk,写入解析内容,挂到libraryCache上),还不如直接硬解析,不查找不缓存不挂链快速。

l  共享池过大,libraryCache链长遍历比较慢。

shared_pool大小设置:

l  使用脚本算:共享池大小-反应时间曲线

l  EM-指导中心-内存指导-SGA建议大小

查看执行计划:

1)            >sql语句

2)            >select sql_id,sql_text fromv$sql where sql_text like ‘%语句%’; //取得sql_id

3)            >select * fromtable(dbms_xplan.display_cursor(‘sql_id’)); //显示执行计划

后面的内容讲执行计划。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343

推荐阅读更多精彩内容

  • 【藏头诗】七律·惊飙恭祝狗年福旺 文/英译/马惊飙 惊天爆竹送鸡翔(吉祥),飙烨青云达庙堂。恭笔添祥书雪赋...
    卦体诗阅读 697评论 7 9
  • 昨天的大雨说来就来了,气势汹汹,乌云压城。要去体测的我们被困在宿舍一楼,等了好一会,终于等到雨小了,才冲了出去。和...
    药师阿佐阅读 615评论 10 7