asmm簡化了sga的配置.過去,你要手工指定分配給數(shù)據(jù)庫buffer cache,shared pool,java pool和large pool的大小.
這通常都是一個(gè)挑戰(zhàn).假如設(shè)置不夠大,會導(dǎo)致性能很差,和內(nèi)存溢出錯(cuò)誤,假如設(shè)置過大,會導(dǎo)致浪費(fèi)內(nèi)存.
這個(gè)特性可以讓你指定所有sga組件的總大小.Oracle數(shù)據(jù)庫有周期的重新分配這些內(nèi)存.
在以前的版本中,你不能對sga的總大小進(jìn)行控制,因?yàn)閮?nèi)存的固定的,對其它的內(nèi)部元數(shù)據(jù)進(jìn)行分配,除了這個(gè)總大小就是用戶指定的sga參數(shù),額外的內(nèi)出通常是10到20m.
新的sga初始化參數(shù)sga_target報(bào)告sga所有的內(nèi)存,包括自動設(shè)置組件的,手工設(shè)置組件還有啟動的時(shí)候的其它內(nèi)部分配.
數(shù)據(jù)庫控制和asmm
你可以使用db control來配置asmm
1.點(diǎn)治理
2.在實(shí)例部分選內(nèi)存參數(shù)
3.選sga
4.在asmm點(diǎn)enable,然后輸入總的sga大小.
手工配置
自動治理的只有四個(gè)部分
db buffer cache
shared pool
large pool
java pool
你可以通過設(shè)置sga_target來配置asmm.
假如你為sga_target設(shè)置了非零值,下面四個(gè)內(nèi)存池是自動配置大小的:
database buffer cache
shared pool
large pool
java pool
假如你把sga_target設(shè)置為零,asmm關(guān)閉了.默認(rèn)的值就是0.
在過去的版本中的單獨(dú)參數(shù)沒有作廢.
下面的參數(shù)還是手工設(shè)置大小的:
log buffer
other buffer caches(keep/recycle,other block sizes)
streams pool
fixed sga和其它的內(nèi)部分配的
自動調(diào)整sga參數(shù)的行為
當(dāng)sgs_target沒有設(shè)置或設(shè)置為零的時(shí)候
-自動調(diào)整的參數(shù)向以前那樣
-例外:shared_pool_size
select sum(bytes)/1024/1024 from v$sgastat
where pool= 'shared pool';
當(dāng)sga_target設(shè)置了
-默認(rèn)的自動設(shè)置的參數(shù)為0
-假如非零值就是下限
假如sga_target沒有設(shè)或等于零,自動調(diào)整的sga參數(shù)就向以前的一樣.然而,shared_pool_size是個(gè)例外:內(nèi)部分布的元數(shù)據(jù)(例如用在進(jìn)程和會話數(shù)據(jù))現(xiàn)在已經(jīng)包括在shared_pool_size參數(shù)中.這樣,你為了分配這些內(nèi)存,當(dāng)升級你的oracle 10g數(shù)據(jù)庫的時(shí)候需要加大你的shared_pool_size參數(shù).例如,假如你在以前的版本中的共享池是256m,你的內(nèi)部分配是32m,那為了得到同樣的效果,在你的10g數(shù)據(jù)庫中要設(shè)置為288m.上面的查詢計(jì)算包括內(nèi)部分配的shared_pool的大小.在運(yùn)行升級之前,你首先要進(jìn)行這次查詢.
當(dāng)sga_target設(shè)為非0,自動調(diào)整的參數(shù)默認(rèn)都是0.他們的大小都是通過asmm算法自動設(shè)置的.例如,sga_target設(shè)為8g,shared_pool_size是1g,這樣就告訴asmm算法不會把共享池設(shè)為1g以下,盡管更大的值更好.你也可以使用下面的查詢看自動調(diào)整組件的大小.
select component,current_size/1024/1024
from v$sga_dynamic_components;
手工調(diào)整sga參數(shù)的行為
一些組件不是自動調(diào)整的:
-keep 和recycle 緩沖區(qū)
-塊倍數(shù)的緩沖
-log 緩沖
-streams池
這些參數(shù)是用戶指定的
精確的控制這些組件的大小
使用v$parameter視圖
select name,value,isdefault
from v$parameter
where name like '%size';
重新設(shè)置sga_target的大小
sga_target初始化參數(shù)
是動態(tài)的
最大可以是sga_max_size的大小
可以減少到所有組件的最小值
sga_target影響僅僅是自動調(diào)整的組件
sga_target是動態(tài)參數(shù),可以通過db control或alter system命令修改.
sga_target最大可以是sga_max_size的大小.它可以減少到任一個(gè)自動調(diào)整的組件到達(dá)了最小值,要么是用戶指定的最小值,
要么是內(nèi)部決定的最小值.
假如你增加sga_target的大小,增加的內(nèi)存根據(jù)自動調(diào)整的測量分布到自動調(diào)整的組件上.
假如你減小sga_target的大小,內(nèi)存就通過自動調(diào)整測量從一個(gè)或多個(gè)自動調(diào)整組件上取消.這樣,sga_target的變化僅影響自動調(diào)整組件的大小.
取消自動共享內(nèi)存治理
設(shè)置sga_target為零取消自動調(diào)整
自動參數(shù)設(shè)置為他們的值
sga的大小不影響
你可以動態(tài)的設(shè)置sga_target為零來取消自動共享內(nèi)存治理.這個(gè)時(shí)候,所有的自動調(diào)整的參數(shù)都是相應(yīng)組件當(dāng)前的大小,即使用戶早期設(shè)置了不同的非0值.
手工的改變動態(tài)sga參數(shù)的大小
對于自動調(diào)整的參數(shù),手工的改變它的大小:
假如新的值的比當(dāng)前的值大,馬上就會生效.
假如新的值比當(dāng)前值小,就會改變到最小值
手工改變參數(shù)的大小影響sga的可調(diào)部分
當(dāng)重新設(shè)置了sga_target的大小的時(shí)候,只有新值比當(dāng)前組件的值大的時(shí)候才會馬上改變.假如你設(shè)置sga_target為8g,設(shè)置shared_pool_size為2g,你確信為了容納必要的內(nèi)存,共享池至少2g.當(dāng)你把共享池調(diào)為1g的時(shí)候,不會馬上改變共享池的大小.它只會告訴自動內(nèi)存調(diào)整算法在需要的時(shí)候,會把共享池改為1g.另外,假如一開始共享池是1g,你把它設(shè)置為2g,那么馬上就生效.在重新改變操作中使用的內(nèi)存是從一個(gè)或幾個(gè)其它的自動調(diào)整的組件中得到了,手工的組件不受影響.
手工改變大小的組件也可以動態(tài)的修改,但是他們的不同就是馬上就是設(shè)置的值.這樣,假如手工組件的值增加,額外的內(nèi)存就是從一個(gè)或多個(gè)自動調(diào)整的組件中獲得的.假如手工組件的值減少了,釋放出來的內(nèi)存就給了自動調(diào)整大小的組件.
自動優(yōu)化統(tǒng)計(jì)收集:概覽
oracle8i提供dbms_stats包
dba決定怎么去收集統(tǒng)計(jì)
dba決定什么時(shí)候去收集統(tǒng)計(jì)
oracle9i決定怎么去收集統(tǒng)計(jì)
統(tǒng)計(jì)可以使用單個(gè)命令僅此收集
dba決定什么時(shí)候去收集統(tǒng)計(jì)
oracle10g完全自動收集統(tǒng)計(jì)的
dba不用去收集統(tǒng)計(jì)
默認(rèn)就進(jìn)行表監(jiān)控
為了查詢優(yōu)化器產(chǎn)生更好的執(zhí)行計(jì)劃,在對象上必要有合法的統(tǒng)計(jì).在過去,統(tǒng)計(jì)收集(或讓作業(yè)去做)是典型的dba的責(zé)任.另外,有必要對改變的對象進(jìn)行跟蹤,來看什么時(shí)候有必要進(jìn)行統(tǒng)計(jì)收集.假如對象的統(tǒng)計(jì)很陳舊或沒有統(tǒng)計(jì),就可能產(chǎn)生無效的sql執(zhí)行計(jì)劃.
在oracle9i(假定使用了監(jiān)控)下面的dbms_status命令可以用來產(chǎn)生相應(yīng)的統(tǒng)計(jì)"
dbms_stats.gather_schema_stats(schema_name,options=>'GATHER AUTO');
這個(gè)命令收集優(yōu)化的統(tǒng)計(jì),包括柱狀圖,對那些對象那些當(dāng)前的統(tǒng)計(jì)是陳舊的.然后,你必須打開監(jiān)控,并且有計(jì)劃的執(zhí)行這個(gè)命令.
在oracle10g中,自動優(yōu)化統(tǒng)計(jì)收集自動這些任務(wù),減少了你的收集統(tǒng)計(jì)的必要.
這個(gè)特性減少了由于sql語句統(tǒng)計(jì)失效或陳舊而導(dǎo)致性能很差的可能性,通過提高查詢優(yōu)化器的最家的輸出提高了sql執(zhí)行的性能.
GATHER_STATS_JOB
默認(rèn)的,在數(shù)據(jù)庫創(chuàng)建的時(shí)候就創(chuàng)建了gather_stats_job,執(zhí)行dbms_stats.gather_database_stats_job_PRoc過程,使用schedular.
默認(rèn)的定義了兩個(gè)窗口.
WEEKENIGHT_WINDOW定義在下午10點(diǎn)到上午六點(diǎn).從周一到周五.
WEEKEND_WINDOW定義從上午12電到周一12點(diǎn).
默認(rèn)的,MAINTENANCE_WINDOW_GROUP組包含這兩個(gè)窗口也已經(jīng)鄧菁來源.
gather_stats_job使用特定的計(jì)劃任務(wù)叫auto_tasks_job_class.這個(gè)類是自動創(chuàng)建的,而且跟特性的資源消費(fèi)者組聯(lián)系,這個(gè)消費(fèi)者組叫做auto_task_consumer_group.這樣確保任務(wù)使用auto_task_consumer_group.假如你想控制gather_stats_job的資源使用,你之需要為maintenance_window_group定義一個(gè)資源治理者組來為auto_task_cousumer_group分配資源.
為了讓gather_stats_job工作正常,你必須確定statistics_level初始化參數(shù)設(shè)置為typical.
改變gather_stats_job的計(jì)劃任務(wù)
你可以為定義的治理窗口來自定義開放時(shí)間.例如,你可以改變他們的時(shí)間間隔和重復(fù)的頻度.你也可以添加資源計(jì)劃到這些窗口中,來控制gather_stats_job使用的資源.
從db control主頁,點(diǎn)擊治理標(biāo)簽,然后在scheduler部分點(diǎn)擊windows鏈接.就讓你到了scheduler windows頁.這里你可以選中一個(gè)窗口,并且可以點(diǎn)edit來修改它的特性.在這頁,你還可以打開或關(guān)閉特定的窗口.只要你在下拉框?yàn)樘囟ǖ拇翱谶x擇相應(yīng)的行為,點(diǎn)ok就可以了.
鎖定統(tǒng)計(jì)
阻止自動收集
主要用在可變的表中
-沒有統(tǒng)計(jì)的鎖定,意味著動態(tài)的取樣.
-鎖定代表值的統(tǒng)計(jì)
在oracle10g,你可以看到特定表的統(tǒng)計(jì),通過新的dbms_stats包的lock_table_stats過程.你可以鎖定一個(gè)表的統(tǒng)計(jì),來阻止自動統(tǒng)計(jì)收集,這樣你就可以使用動態(tài)的取樣.你也可以在某個(gè)時(shí)間點(diǎn)鎖定可變的表的統(tǒng)計(jì),當(dāng)它滿了的時(shí)候.
你可以可以使用lock_schema_stats跑在sechma基本鎖定統(tǒng)計(jì).
你可以查看user/all/dba_tab_statistics視圖來看stattype_locked列來看一個(gè)表是不是鎖定了.
你也可以使用unlock_table