日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

Library Cache Hash Bucket與共享池閂鎖爭用問題

來源: 責編: 時間:2024-06-27 17:20:15 161觀看
導讀有朋友和我討論根因分析的問題,他認為大多數情況下根因分析是空中樓閣,因為數據庫的問題的根因都在數據庫產品的原代碼上。這個觀點有一定的道理,他所說的根因是絕對的根因,并不是日常為解決問題而去尋找的根因。這個世界

有朋友和我討論根因分析的問題,他認為大多數情況下根因分析是空中樓閣,因為數據庫的問題的根因都在數據庫產品的原代碼上。這個觀點有一定的道理,他所說的根因是絕對的根因,并不是日常為解決問題而去尋找的根因。這個世界上我們無法窮盡自然規律去找到最終的根因,但是我們能夠找到那個與解決問題有關的關鍵問題,我們暫且稱之為“根因”。不過當我們對某些原理理解不夠深入和全面的時候,我們就無法找到那個解決問題的關鍵,這就是我一直堅持的那個理解數據庫的本質的主要原因。我寫《DBA的思想天空》也是希望DBA在成長過程中多去掌握一些數據庫原理性的技術,而不是僅僅學習一些技巧。sd128資訊網——每日最新資訊28at.com

有時候我們發現數據庫中有幾條SQL總是有點問題,而且問題出在CURSOR共享上,但是我們經常找不出根因來。實際上共享池問題的復雜性超出了一些DBA的認知極限,里面涉及的技術原理實在是太復雜了。sd128資訊網——每日最新資訊28at.com

Oracle的CURSOR SHARING技術的關鍵部分是LIBRARY CACHE的管理。LIBRARY CACHE也是按照HASH CHAINS的方式來管理的,會被分為多個HASH BUCKET。當要定位某條SQL的時候是通過HASH算法來快速定位的。    sd128資訊網——每日最新資訊28at.com

圖片圖片sd128資訊網——每日最新資訊28at.com

首先根據SQL語句生成HASH值,然后通過HASH CHAINS找到相關的的Object Handle。對于Hash Chains,大家都不陌生,數據庫中的很多鏈表管理,都是采用HASH桶的方式管理的。對于HASH桶,大家立即就會想到均衡問題,對于CACHE BUFFER CHAINS,不均衡的HASH桶會產生訪問性能不佳的HOT BUFFER,而對于LIBRARY CACHE HASH BUCKETS,則會產生訪問延時過大的library cache handle。過于長的HASH CHAINS在數據庫中的表現可能會導致library cache閂鎖的等待出現異常。    sd128資訊網——每日最新資訊28at.com

圖片圖片sd128資訊網——每日最新資訊28at.com

如果某個bucket上的鏈表比較長,那么如果OBJECT HANDLE在這條鏈上,相關的SQL的執行效率就會受到一定的影響。因此一般情況下,HASH CHAIN的深度都不會太大。我們可以通過下面的命令來DUMP一下LIBRARY CACHE。用SYSDBA登錄數據庫,然后執行:    sd128資訊網——每日最新資訊28at.com

oradebug setmypid;sd128資訊網——每日最新資訊28at.com

oradebug dump library_cache 2;sd128資訊網——每日最新資訊28at.com

圖片圖片sd128資訊網——每日最新資訊28at.com

可以看到LIBRARY CACHE TABLE一共有131072個BUCKET,一共有52101個對象。Oracle的 library cache bucket機制是十分古老的機制,我第一次了解到這個概念是在Oracle 7上遇到的一個BUG。這個BUG讓我認識了_KGL_BUCKET_COUNT這個隱含參數。Oracle的LIBRARY CACHE HASH BUCKET的最小數量是509。不過這個值相當小,如果一個數據庫實例中只有這么多個BUCKET,那么一個桶上將會鏈接過多的HANDLE了。從上面DUMP的例子可以看到,13萬+的桶上有5萬多個HANDLE。sd128資訊網——每日最新資訊28at.com

Oracle的算法是,當桶上的平均深度超過2的時候,BUCKET會自動擴容一倍。當數據庫實例啟動后,最多自動擴容7次,也就是會擴大到128倍。似乎這個算法也沒啥毛病。不過當HASH BUCKET擴容的時候,所有的HASH鏈都要重組,這是一個十分高開銷的操作。二十多年前我就在一套ORACLE 7上遇到過這樣的問題。當時我通過開SR知道了一個參數:_kgl_bucket_count。這個隱含參數確定了當數據庫實例啟動的時候,HASH BUCKET的數量。1代表509,2代表1021,3代表2041,都是對應2的冪次略小的素數。以此類推,9是最大值,代表131071,可以管理131072個桶。這正好和上面DUMP的例子相吻合。    sd128資訊網——每日最新資訊28at.com

圖片圖片sd128資訊網——每日最新資訊28at.com

下面我們先來刷新一下共享池,再來做一個DUMP,看看會有什么結果出現。sd128資訊網——每日最新資訊28at.com

圖片圖片sd128資訊網——每日最新資訊28at.com

可以看出,存在較多對象的Buckets消失了。這個時候去訪問這些library cache objects,性能就不會有問題了。在大多數情況下,刷新共享池是可以解決此類library cache問題的。當然,刷新共享池對于一些關鍵系統來說依然是有風險的。因為大量的SQL會重新解析,共享池爭用會在瞬間加大,因此此類操作不能在業務高峰期執行。另外一個風險是重新編譯SQL可能會因為某些數據庫表和索引的統計信息不準確而導致新的SQL執行計劃變壞,引發其他的性能問題。    sd128資訊網——每日最新資訊28at.com

今天我們可以學到的一個技巧就是,遇到一些無法解釋根因的SQL解析性能問題,如果只是集中在某個或者某幾個SQLID上,那么可以通過對library cache做一個 level 2的DUMP就可以分析今天所說的這個原因了。也許我們以后做數據庫巡檢的時候,也可以在非業務高峰期做一下DUMP,分析一下共享池是否存在這種風險。sd128資訊網——每日最新資訊28at.com

說到今天的這個話題,想起了20多年前的一個案例,當時的數據庫是7.3,當時的服務器配置都不高,SGA也比較小,因此_kgl_bucket_count默認還是1。用戶經常出現bucket擴容而引發的系統幾乎HANG死的情況,引起系統卡頓十多分鐘甚至更長。那時候這個數據庫每個月都會進行重啟維護以避免共享池 碎片嚴重而引發的嚴重系統問題。sd128資訊網——每日最新資訊28at.com

不過自從這個制度制定后,共享池碎片導致ORA-4031的問題解決了。不過重啟后過一段時間就會一定出現一次卡頓,隨后就基本上就不再出現了。這個問題十分詭異,我查了很久都沒有找到問題的根因,于是只能開了SR。經過Oracle原廠排查,定位到了這個問題 。將該參數改為2之后,就沒有出現過這個問題。客戶的領導也是一個技術達人,他覺得既然這個問題存在,那么把這個參數再設大一點不是更加安全。于是我幫他們調整了參數。結局很悲催,當時的數據庫版本中這個參數設置得過大會觸發一個BUG,高負載時引發實例宕機。這個宕機問題很難定位,過了好久才被真正定位出來。sd128資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-96997-0.htmlLibrary Cache Hash Bucket與共享池閂鎖爭用問題

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 千萬不要再用錯了這個 Lodash 方法了!可能釀成大禍!

下一篇: 掌握這四種方法,多線程按序執行不再是問題

標簽:
  • 熱門焦點
  • Find N3入網:最高支持16+1TB

    OPPO將于近期登場的Find N3折疊屏目前已經正式入網,型號為PHN110。本次Find N3在外觀方面相比前兩代有很大的變化,不再是小號的橫向折疊屏,而是跟別的廠商一樣采用了較為常見的
  • 谷歌KDD'23工作:如何提升推薦系統Ranking模型訓練穩定性

    谷歌在KDD 2023發表了一篇工作,探索了推薦系統ranking模型的訓練穩定性問題,分析了造成訓練穩定性存在問題的潛在原因,以及現有的一些提升模型穩定性方法的不足,并提出了一種新
  • 虛擬鍵盤 API 的妙用

    你是否在遇到過這樣的問題:移動設備上有一個固定元素,當激活虛擬鍵盤時,該元素被隱藏在了鍵盤下方?多年來,這一直是 Web 上的默認行為,在本文中,我們將探討這個問題、為什么會發生
  • 2023年,我眼中的字節跳動

    此時此刻(2023年7月),字節跳動從未上市,也從未公布過任何官方的上市計劃;但是這并不妨礙它成為中國最受關注的互聯網公司之一。從2016-17年的抖音強勢崛起,到2018年的“頭騰
  • 大廠卷向扁平化

    來源:新熵作者丨南枝 編輯丨月見大廠職級不香了。俗話說,兵無常勢,水無常形,互聯網企業調整職級體系并不稀奇。7月13日,淘寶天貓集團啟動了近年來最大的人力制度改革,目前已形成一
  • 重估百度丨大模型,能撐起百度的“今天”嗎?

    自象限原創 作者|程心 羅輯2023年之前,對于自己的“今天”,百度也很迷茫。“新業務到 2022 年底還是 0,希望 2023 年出來一個 1。”這是2022年底,李彥宏
  • AI芯片初創公司Tenstorrent獲三星和現代1億美元投資

    Tenstorrent是一家由芯片行業資深人士Jim Keller領導的加拿大初創公司,專注于開發人工智能芯片,該公司周三表示,已經從現代汽車集團和三星投資基金等
  • 電博會與軟博會實現"線下+云端"的雙線融合

    在本次“電博會”與“軟博會”雙展會利好條件的加持下,既可以發揮展會拉動人流、信息流、資金流實現快速交互流動的作用,繼而推動區域經濟良性發展;又可以聚
  • 中關村論壇11月25日開幕,15位諾獎級大咖將發表演講

    11月18日,記者從2022中關村論壇新聞發布會上獲悉,中關村論壇將于11月25至30日在京舉行。本屆中關村論壇由科學技術部、國家發展改革委、工業和信息化部、國務
Top 主站蜘蛛池模板: 泸溪县| 九寨沟县| 东乌珠穆沁旗| 喀喇沁旗| 津市市| 红安县| 米易县| 黔江区| 龙川县| 喀喇沁旗| 苍山县| 永春县| 阜新| 江永县| 怀安县| 宝丰县| 格尔木市| 湘潭县| 嵩明县| 秀山| 商都县| 镇平县| 泽库县| 北辰区| 翁源县| 水富县| 南郑县| 盐津县| 方城县| 鄂托克旗| 宝鸡市| 邵阳市| 友谊县| 吴桥县| 青海省| 锦屏县| 保德县| 云和县| 普兰店市| 云阳县| 普宁市|