Oracle 數(shù)據(jù)庫突發(fā)的性能問題

一個比較經(jīng)典的案例粤咪,隱式類型轉(zhuǎn)換發(fā)生在字段上叹放,會造成索引無法使用的嚴重性能問題; 隱式類型轉(zhuǎn)換發(fā)生在綁定變量上斋日,會造成acs失效的情況牲览,造成的影響比較隱蔽。

https://mp.weixin.qq.com/s/l4-Ni8opRS4DB8i6qEEfpA

數(shù)據(jù)庫突發(fā)性能問題恶守,有時可能通過重啟應用第献、重新收集統(tǒng)計信息贡必、重啟數(shù)據(jù)庫等方法得到臨時解決。
為什么要找到根因:為了避免故障再次發(fā)生庸毫,為了找到問題的責任方:運維仔拟、開發(fā)還是數(shù)據(jù)庫產(chǎn)品自身原因(缺陷或是bug),讓背鍋的一方心服口服飒赃。
很多對業(yè)務穩(wěn)定性要求非常高的行業(yè)(比如金融利花、通信、鐵路载佳、航空等)的數(shù)據(jù)庫系統(tǒng)炒事,都會購買oracle 售后高服(ACS)中的頂級服務SSC服務。

問題描述

一個時段蔫慧,重要業(yè)務的SQL執(zhí)行計劃發(fā)生改變挠乳,執(zhí)行效率嚴重下降。執(zhí)行cost變小了姑躲,效率下降了幾千倍欲侮。

根因分析

謂詞越界

1、該時段是系統(tǒng)對需要收集統(tǒng)計信息的表肋联,收集統(tǒng)計信息威蕉。
2、收集后的一段時間內(nèi)橄仍,會對該表的相關(guān)sql做硬解析韧涨。
3、硬解析時侮繁,會發(fā)生綁定變量窺視虑粥。如果窺視到的綁定變量,超出了字段上統(tǒng)計信息的最大最邢芰ā(一般是最大)值范圍娩贷,就可能發(fā)生謂詞越界。謂詞越界就可能會出現(xiàn)索引選擇錯誤锁孟,導致生成低效執(zhí)行計劃彬祖。

4、真正的謂詞越界一般發(fā)生在varchar2和number字段品抽,日期字段雖然經(jīng)常發(fā)生越界储笑,但是系統(tǒng)對于日期類型字段的越界算法,有一定的容忍度圆恤,不會認為是真正的越界突倍。這個sql發(fā)生越界的字段保存的數(shù)據(jù)是日期數(shù)據(jù),但是使用的卻是number類型。這里面涉及到一個重要的開發(fā)規(guī)范相關(guān)內(nèi)容:非常不建議用number或varchar2類型保存日期數(shù)據(jù)羽历,規(guī)范做法是使用date類型焊虏。因為按天查詢時,date類型一般需要寫兩段范圍條件秕磷,而number或varchar2類型诵闭,可以用一個等值條件即可完成,而且不用做to_date轉(zhuǎn)換跳夭。這種偷懶的不規(guī)范做法涂圆,會給SQL性能帶來較大的性能隱患。

5币叹、發(fā)生謂詞越界后润歉,數(shù)據(jù)庫優(yōu)化器在評估這個sql可以使用的兩個索引(都是以越界字段開頭的組合索引)時,就不是常規(guī)的選擇方式颈抚,而是選擇leaf blocks較少的那一個踩衩,這個案例,leaf blocks較少的那個索引贩汉,恰好是低效的那一個驱富。

6、sqlhc捕獲到了sql后面的一些執(zhí)行情況匹舞,很多使用的綁定變量已經(jīng)不再越界褐鸥,而且系統(tǒng)的自適應游標(ACS)保持開啟狀態(tài),為什么ACS沒能及時把執(zhí)行計劃調(diào)整回正常赐稽? 這里面又涉及到另一個不規(guī)范的情況:綁定變量使用的數(shù)據(jù)類型是char叫榕,剛剛我們提到字段使用的類型是number,優(yōu)化器需要對綁定變量做to_number隱式類型轉(zhuǎn)換姊舵,這種轉(zhuǎn)換導致了ACS不生效晰绎。

7、不贊成關(guān)閉ACS括丁,這個案例荞下,雖然ACS因為綁定變量類型不匹配沒有生效,但是如果綁定變量使用的數(shù)據(jù)類型也是number史飞,那么ACS就會生效尖昏,不會出現(xiàn)執(zhí)行計劃一錯到底的情況:對于后面謂詞不越界的情況,ACS還能及時調(diào)整回正常的執(zhí)行計劃祸憋。ACS在11g版本引入会宪,開始時bug較多,到了11204版本蚯窥,很多bug已經(jīng)修復了,它起到的作用遠遠高于bug帶來的一些小問題。

知識點

謂詞越界

SQL語句的查詢條件超出了數(shù)據(jù)庫統(tǒng)計信息所記錄的范圍拦赠。謂詞越界會導致Oracle優(yōu)化器錯誤的選擇SQL語句的執(zhí)行計劃巍沙,導致性能問題。

謂詞越界一般會發(fā)生在什么場景下荷鼠?

  • 臨時表
    這里指的是業(yè)務上的臨時表而不是Oracle數(shù)據(jù)庫本身的temporary table句携。在某些系統(tǒng)中會根據(jù)業(yè)務條件創(chuàng)建前臺表和后臺表,數(shù)據(jù)先進入前臺表允乐,處理完畢后矮嫉,存入后臺表,并用delete語句清理前臺表的數(shù)據(jù)牍疏,前臺表起到一個臨時表的作用蠢笋。我們知道,Oracle自動收集統(tǒng)計信息的默認時間窗口是工作日晚上的22點到凌晨2點鳞陨,或者周末的早上6點到第二天凌晨2點昨寞。在自動收集統(tǒng)計信息窗口內(nèi),數(shù)據(jù)庫前臺表基本上處于無數(shù)據(jù)厦滤,或者數(shù)據(jù)量很小的情況援岩,那么產(chǎn)生的統(tǒng)計信息就會和白天實際處理業(yè)務數(shù)據(jù)時有偏差,就有可能發(fā)生謂詞越界的情況掏导。
  • 巨大表
    Oracle觸發(fā)自動收集某個表的統(tǒng)計信息的條件是表中修改的數(shù)據(jù)量超過該表數(shù)據(jù)總量的10%享怀,假設一個表每天新增1w條數(shù)據(jù),一年后這個表變成了365w條數(shù)據(jù)趟咆,那么這意味著這個表需要再過一個多月才會觸發(fā)一次自動收集統(tǒng)計信息的作業(yè)添瓷。那么在這個表上的謂詞查詢,尤其是時間忍啸、序列等自增條件上的查詢仰坦,就可能發(fā)生謂詞越界的情況,影響優(yōu)化器正確選擇執(zhí)行計劃计雌。

ACS

  • 什么是Oracle ACS
    Oracle ACS 是Oracle Advanced Customer Support (甲骨文高級客戶服務)的簡稱悄晃,這項服務由全球擁有數(shù)千名經(jīng)驗豐富的高級支持工程師團隊來運營,隸屬于Oracle Global Support Services全球支持服務業(yè)務部門凿滤。Oracle除了對于購買軟件妈橄,應用系統(tǒng),一體機集成系統(tǒng)的客戶提供Premier Support(高級服務翁脆,包括MOS網(wǎng)站24小時技術(shù)支持眷蚓,主動支持,最新軟件下載反番, 補丁下載等等)沙热,Oracle在此基礎上叉钥,20多年前即推出ACS服務來滿足客戶對于關(guān)鍵系統(tǒng)和個性化的需求。隨著云計算業(yè)務的不斷發(fā)展篙贸,Oracle又推出了Oracle Managed Cloud Servers (Oracle 托管云服務)來滿足客戶的云計算方面的需求投队。
  • Oracle ACS服務的特點
    √連接: 作為Oracle內(nèi)部服務部門,可以快速地與產(chǎn)品開發(fā)及全球支持部門建立溝通爵川,通過指定的的技術(shù)客戶經(jīng)理協(xié)調(diào)資源敷鸦,與客戶實現(xiàn)無縫的連接,這樣可以更加有效地滿足客戶的需要寝贡,例如緊急客戶支持扒披,24 X 7監(jiān)控,遷移等等圃泡。
    √集成: 作為連接的目的碟案,Oracle ACS匯集全球的資源,包括團隊洞焙,服務蟆淀,和經(jīng)驗豐富的ACS專家團隊來滿足客戶在云計算時代的需求。
    √自動化: 運營的最終目的是滿足業(yè)務的需求的同時提升效率澡匪,降低成本熔任,通過Oracle ACS團隊的長期穩(wěn)定的服務質(zhì)量,專業(yè)工具技能唁情,和最佳實踐的應用疑苔,從而達到推動客戶平臺的自動化水平和降低總擁有成本的目的。
    √量身定制: ACS的服務是可以量身定制甸鸟,通過將應用系統(tǒng)生命周期內(nèi)的關(guān)鍵業(yè)務設計及不同的服務模塊及項目惦费,客戶可以靈活地根據(jù)需求選擇不同的服務內(nèi)容,從而滿足特定的業(yè)務需求抢韭。

oracle常用的時間格式轉(zhuǎn)換

綁定變量窺視
綁定變量窺視功能是數(shù)據(jù)庫的一個特性薪贫,自ORACLE9i版本開始引入,默認是開啟的刻恭。

“綁定變量窺視”表示瞧省,查詢優(yōu)化器在第一次調(diào)用游標時,會觀察用戶定義的綁定變量的值鳍贾,允許優(yōu)化器來確認過濾條件的選擇性鞍匾,以及是否使用綁定變量代替了常量。之后調(diào)用游標時不會出現(xiàn)窺視骑科,且會根據(jù)指針共享標準來共享游標橡淑,即使隨后的調(diào)用使用不同的綁定值。

使用綁定變量窺視咆爽,第一次解析包含綁定謂詞的SQL語句時梁棠,優(yōu)化器將查看綁定變量的值置森,并使用該值為查詢創(chuàng)建執(zhí)行計劃。然后掰茶,不管更改的綁定值如何暇藏,該計劃都將被存儲并用于未來的所有執(zhí)行蜜笤。如果初始綁定值不能很好地代表將來執(zhí)行查詢時提供的其他值濒蒋,那么,即使當前訪問路徑較優(yōu)把兔,也可能導致未來執(zhí)行變差沪伙,甚至影響某些迭代的查詢性能變慢。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末县好,一起剝皮案震驚了整個濱河市围橡,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌缕贡,老刑警劉巖翁授,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異晾咪,居然都是意外死亡收擦,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進店門谍倦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來塞赂,“玉大人,你說我怎么就攤上這事昼蛀⊙缁” “怎么了?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵叼旋,是天一觀的道長仇哆。 經(jīng)常有香客問我,道長夫植,這世上最難降的妖魔是什么讹剔? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮偷崩,結(jié)果婚禮上辟拷,老公的妹妹穿的比我還像新娘。我一直安慰自己阐斜,他們只是感情好衫冻,可當我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著谒出,像睡著了一般隅俘。 火紅的嫁衣襯著肌膚如雪邻奠。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天为居,我揣著相機與錄音碌宴,去河邊找鬼。 笑死蒙畴,一個胖子當著我的面吹牛贰镣,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播膳凝,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼碑隆,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了蹬音?” 一聲冷哼從身側(cè)響起上煤,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎著淆,沒想到半個月后劫狠,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡永部,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年独泞,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片扬舒。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡阐肤,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出讲坎,到底是詐尸還是另有隱情孕惜,我是刑警寧澤,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布晨炕,位于F島的核電站衫画,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏瓮栗。R本人自食惡果不足惜削罩,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望费奸。 院中可真熱鬧弥激,春花似錦、人聲如沸愿阐。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽缨历。三九已至以蕴,卻和暖如春糙麦,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背丛肮。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工赡磅, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人宝与。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓焚廊,卻偏偏與公主長得像,于是被迫代替她去往敵國和親伴鳖。 傳聞我的和親對象是個殘疾皇子节值,可洞房花燭夜當晚...
    茶點故事閱讀 42,877評論 2 345

推薦閱讀更多精彩內(nèi)容