溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

關(guān)于oracle 11g acs的一點總結(jié):

發(fā)布時間:2020-08-09 05:17:56 來源:ITPUB博客 閱讀:285 作者:kunlunzhiying 欄目:關(guān)系型數(shù)據(jù)庫

今天談?wù)勏旅孢@幾個參數(shù)對數(shù)據(jù)庫性能和穩(wěn)定性的影響:

cursor_sharing:游標(biāo)共享

_optim_peek_user_binds:綁定變量窺視

_optimizer_adaptive_cursor_sharing:自適應(yīng)游標(biāo)共享(簡稱ACS),一般還包括另外兩個_optimizer_extended_cursor_sharing和_optimizer_extended_cursor_sharing_rel 參數(shù))


_optim_peek_user_binds和ACS:

在10g,因為沒有ACS,一般建議客戶關(guān)閉綁定變量窺視功能的情況多一些。

在11g,很多客戶還是將綁定變量窺視和ACS都關(guān)閉了,原因有的是數(shù)據(jù)庫從1g升級而來,升級后沒有改,還有就是因為ACS早期版本有一些bug。其實這是兩個很好的參數(shù),可以在代碼寫的不是太好的情況下,也能獲得比較好的性能。雖然ACS可能還有一些小bug沒有解決(有的bug是在很特殊的情況下才會觸發(fā)),到了11204版本應(yīng)該都不是大問題了。老虎劉建議還是都開啟比較好。


最重要的參數(shù)還在下面,如果做到了下面這兩點,上面兩個參數(shù)就顯得不是那么重要了:


首先,cursor_sharing這個參數(shù)對系統(tǒng)性能和穩(wěn)定性都非常重要,可惜經(jīng)常被忽略,建議使用該參數(shù)的默認(rèn)值:

    即 cursor_sharing=EXACT  (而不是FORCE或similar)

    這要求應(yīng)該使用綁定變量的地方,必須使用綁定變量。這個對于OLTP系統(tǒng)來說是鐵律,不容置疑,cursor_sharing=FORCE通常就是為了解決該使用綁定變量而沒有使用綁定變量的情況。前年在網(wǎng)上看到一個廣為流傳的某水果公司的AWR報告,居然設(shè)置 cursor_sharing= FORCE ,令人感嘆啊。


其次,還有一個重要的補(bǔ)充條件:

不該使用綁定變量的地方,不用綁定變量:對那些唯一值較少的字段,特別是數(shù)據(jù)分布不均的情況,不建議使用綁定變量。如type、status等字段,我們建議使用常量:where type=1 and status=2。

這種情況如果使用了綁定變量,就是綁定變量窺視和ACS發(fā)揮作用的時候。



如果cursor_sharing=FORCE;或者cursor_sharing=EXACT,但是在數(shù)據(jù)分布不均的字段上也使用了綁定變量(兩者基本上是等同的,雖然后一種略好于前一種情況),那么就要考慮“綁定變量窺視”和“自適應(yīng)游標(biāo)”兩個參數(shù)的影響了。


看下面幾種情況:

1、關(guān)閉“綁定變量窺視”(默認(rèn)是開啟):

ACS同時失效,這時系統(tǒng)的穩(wěn)定性好(不會因為綁定變量的不同,發(fā)生執(zhí)行計劃改變),但是整體性能會下降:因為不能窺視綁定變量,只能按照字段是數(shù)據(jù)分布均勻的情況來計算,在能否使用索引,返回行源的估值上,都會出現(xiàn)較大的偏差,有時可能會配合使用hint來提高SQL性能。


2、如果開啟了“綁定變量窺視”而不開啟ACS(默認(rèn)是開啟):

那么系統(tǒng)就會極不穩(wěn)定:比如硬解析窺視到一個綁定變量適合全表掃描的執(zhí)行計劃,不管接下來的綁定變量是否能使用索引,都會一直全表掃描下去,直到下次硬解析時再次窺視綁定變量才可能重新生成新的執(zhí)行計劃。


3、如果開啟“綁定變量窺視”,同時開啟ACS:

這種情況在解決了一部分穩(wěn)定性的同時,兼顧了性能。也是11g新增的ACS比10g沒有ACS進(jìn)步的地方:執(zhí)行計劃不再從一而終,而是會根據(jù)綁定變量的不同,不是很及時的做出調(diào)整:比如第一次窺視到的綁定變量適合全表掃描,那么第二次即使使用的綁定變量適合走索引,也還是會使用全表掃描的執(zhí)行計劃,下一次再次執(zhí)行就會糾正為使用索引的執(zhí)行計劃(具體請參考ACS的實現(xiàn)原理)。


綁定變量窺視和ACS這兩個參數(shù)是與直方圖信息緊密聯(lián)系在一起的,關(guān)閉直方圖收集,也就相當(dāng)于關(guān)閉了綁定變量窺視和ACS,即使開啟了這兩個參數(shù)。


直方圖能較為準(zhǔn)確的反映數(shù)據(jù)分布不均字段的數(shù)據(jù)分布情況,一般使用默認(rèn)選項(auto),某些特殊情況可以補(bǔ)充或去掉某些字段的直方圖信息。一些客戶在數(shù)據(jù)庫級關(guān)閉收集直方圖的做法是不建議的。



總結(jié):

最佳實踐:

cursor_sharing=EXACT + 合理使用綁定變量(合理就是:類似ID、account_no等唯一值等于或接近表行數(shù)的字段,必須使用綁定變量;而type、status等唯一值少且數(shù)分別不均的字段,不使用綁定變量)。

綁定變量窺視和ACS保持默認(rèn)開啟狀態(tài)。



特殊情況:

1、字段唯一值有一定的數(shù)量(介于少與多之間),比如1000個,如果數(shù)據(jù)分布均勻,則可以使用綁定變量。如果字段分布不均,則把占比多的幾個值,使用常量,其他值使用綁定變量。

2、字段唯一值少,還有經(jīng)?;ハ噢D(zhuǎn)變的情況,比如常見的工單處理表:沒有處理的狀態(tài)是0,處理后的狀態(tài)是1,夜間統(tǒng)計信息收集后,由于字段值的不穩(wěn)定,統(tǒng)計信息經(jīng)常不能反映表的實時數(shù)據(jù)分布情況,這種情況談是否使用綁定變量已沒有意義,涉及這類表的SQL,可以關(guān)閉字段上的直方圖收集,再配合rownum和hint 來提高SQL效率和穩(wěn)定性,必要時還可以使用dynamic_sampling(動態(tài)采樣)來輔助優(yōu)化器做出正確的執(zhí)行計劃。


最差組合:

cursor_sharing=FORCE

_optim_peek_user_binds=TRUE(開啟綁定變量窺視)

_optimizer_adaptive_cursor_sharing=FALSE(關(guān)閉ACS,還有其他兩個參數(shù)也要一起設(shè)置)

執(zhí)行計劃不穩(wěn)定的同時還會帶來低性能。

使用ACS的前提條件:
1.綁定變量使用變量窺視;
2.綁定變量的列上使用直方圖;


關(guān)閉acs步驟:


我們先來看看跟ACS相關(guān)的三個隱藏參數(shù),是用來控制是否啟用ACS
col ksppinm for a30
col ksppstvl for a20
col ksppdesc for a35
SELECT   ksppinm, ksppstvl, ksppdesc
FROM   x$ksppi x, x$ksppcv y
WHERE   x.indx = y.indx AND  ksppinm = '_optimizer_adaptive_cursor_sharing';
KSPPINM                        KSPPSTVL             KSPPDESC
------------------------------ -------------------- -----------------------------------
_optimizer_adaptive_cursor_sha TRUE                 optimizer adaptive cursor sharing
ring


SELECT   ksppinm, ksppstvl, ksppdesc
FROM   x$ksppi x, x$ksppcv y
WHERE   x.indx = y.indx AND  ksppinm = '_optimizer_extended_cursor_sharing';
KSPPINM                        KSPPSTVL             KSPPDESC
------------------------------ -------------------- -----------------------------------
_optimizer_extended_cursor_sha UDO                  optimizer extended cursor sharing
ring


SELECT   ksppinm, ksppstvl, ksppdesc
FROM   x$ksppi x, x$ksppcv y
WHERE   x.indx = y.indx AND  ksppinm = '_optimizer_extended_cursor_sharing_rel';
KSPPINM                        KSPPSTVL             KSPPDESC
------------------------------ -------------------- -----------------------------------
_optimizer_extended_cursor_sha SIMPLE               optimizer extended cursor sharing f
ring_rel
所以如果我們要關(guān)閉ACS,使用如下的命令
alter system set "_optimizer_extended_cursor_sharing_rel"=none;
alter system set "_optimizer_extended_cursor_sharing"=none;
alter system set "_optimizer_adaptive_cursor_sharing"=false;



參考:
http://mp.weixin.qq.com/s?__biz=MzIzMTQ3OTE4Mw==&mid=2247483871&idx=1&sn=06a86ac02f4f63e339979588308ea386&scene=1&srcid=09140h8P90bBFNlYiDgaEojG#rd


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI