GaussDB(DWS)內存管理技術簡介

      網友投稿 1182 2025-03-31

      1.簡介


      GaussDB的動態內存使用方法是基于Postgres提供的內存上下文管理。在此基礎上,GaussDB引入邏輯內存管理機制,控制進程內存使用,避免出現系統OOM問題,同時提供多項視圖來追蹤內存的使用情況。引入jemalloc開源庫,替換glibc中的內存分配和釋放,減少內存碎片,提升多線程內存分配的性能。

      2.GaussDB的內存布局

      GaussDB在原生的PG內存上下文機制上引入了第三方開源庫jemalloc,jemalloc通過接管malloc的內存申請,提升了內存申請的效率。可以看到GaussDB的內粗你可以分為5大塊,共享內存通過mmap等方式直接申請OS內存,memcontext、列存、通信庫申請的內存都是通過原生PG的內存上下文管理機制申請內存,在此基礎上引入了邏輯內存管理,統計了這些動態內存的大小,監控內存的使用,組后一部分則是直接通過malloc等申請的內存,對這部分內存計入others內存使用。

      3.memcontext布局

      GaussDB是基于原生的PG內存上下文來進行內存管理,與之前直接申請系統內存相比,這種內存上下文的好處是可以減少內存泄漏,通過這種方式可以記錄內存的使用情況,可以很輕松的釋放內存上下文的所有內容。在實際的使用過程中,每一個進程都有一個屬于自己的內存上下文,每一個內存上下文都是一個節點,各個節點之間組織成樹的結構,每一個根節點都有自己的孩子節點,當釋放父節點的時候對應的孩子節點也會釋放,這樣就可以避免內存泄漏了。

      4.內存管理視圖

      GaussDB通過GUC參數disable_memory_protect參數是否開啟邏輯內存管理,默認是打開的。邏輯內存管理通過引入幾個視圖監控內存的使用情況,增加內存問題定位手段,常用的視圖包括

      Select * from pv_total_memory_detail; 觀察總的內存 ?

      Select * from pv_session_memory_detail order by totalsize desc; 查詢哪個內存上下文比較高

      Select * from pg_shared_memory_detail; 共享內存上下文占用

      Select * from pg_stat_activity; 查看當前活躍的作業

      其中比較重要的視圖是pv_total_memory_detail,這個視圖統計了當前實例節點各個模塊的內存使用情況:

      視圖 pv_total_memory_detail查詢數據庫進程內存使用,便于分析內存失敗后問題;各字段含義如下;

      max_process_memory: 實例可用最大內存,GUC參數max_process_memory相同;OM會自動計算給出

      process_used_memory: 實例正在使用的物理內存;操作系統命令top中的RES數值相同

      max_dynamic_memory: 實例可以動態申請的最大內存大小,由 max_process_memory – max_shared_memory – max_cstore_memory計算獲得

      dynamic_used_memory: 邏輯內存記賬中,所有內存分配的當前數值,包括所有內存上下文和通信庫動態分配的內存;達到 max_dynamic_memory數值時,報錯:memory is temporarily unavailable

      dynamic_peak_memory: 邏輯內存機制的最大數值,從節點啟動至今

      dynamic_used_shrctx: 邏輯內存記賬中,僅共享內存上下文內存分配的當前數值;屬于dynamic_used_memory的一部分

      dynamic_peak_shrctx: 邏輯內存記賬中,共享內存上下內存分配的最大數值

      max_shared_memory: 實例中共享內存預占內存的大小,包含shared_buffers,比該數值大(還有其他數據結構也是共享內存)

      GaussDB(DWS)內存管理技術簡介

      shared_used_memory:實例中共享內存正在使用的大小,操作系統top的SHR數值;行存情況下,該數值較大

      max_cstore_memory/ cstore_used_memory : 實例中列存儲預占/正在使用的內存,用于數據緩存,GUC參數cstore_buffers相同

      cstore_used_memory : 實例中列存儲正在使用的內存,內部統計獲得

      max_sctpcomm_memory: 通信庫允許使用的內存大小,由GUC參數comm_usable_memory設置

      sctp_used_memory: 通信庫正在使用的內存統計

      sctp_peak_memory: 通信庫最大使用的內存

      other_used_memory:不在統計之內的內存,由 process_used_memory – dynamic_used_memory – shared_used_memory – cstore_used_memory獲得;通常不超過2G,若過大,則說明存在第三方組件的內存分配出現泄漏

      數據倉庫服務 GaussDB(DWS)

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:為什么每次點擊菜單欄
      下一篇:excel表格如何累加百分比(excel表格加百分比怎么算)
      相關文章
      精品亚洲一区二区| 亚洲人成电影在线观看网| 亚洲伊人久久大香线蕉影院| 久久久久亚洲AV无码专区首| 在线观看亚洲天天一三视| 久久亚洲国产成人精品无码区| 亚洲精品A在线观看| 亚洲不卡无码av中文字幕| www亚洲精品久久久乳| 亚洲乱亚洲乱妇无码| 亚洲精华液一二三产区| 亚洲欧洲AV无码专区| 亚洲免费综合色在线视频| 美女视频黄免费亚洲| 自拍偷区亚洲国内自拍| 亚洲中文字幕无码久久2020 | 亚洲日本香蕉视频| 亚洲成人黄色网址| 亚洲av午夜精品无码专区| 亚洲三级在线免费观看| 亚洲一级毛片免费在线观看| 亚洲a∨无码男人的天堂| 国产精品亚洲自在线播放页码| 亚洲综合成人婷婷五月网址| 亚洲精品无码中文久久字幕| 亚洲av乱码一区二区三区按摩| 国产成人va亚洲电影| 亚洲中文无韩国r级电影 | 亚洲国产成人精品无码久久久久久综合 | 亚洲精品无码永久在线观看| 亚洲国产精品碰碰| 久久影院亚洲一区| 亚洲国产日韩在线视频| 亚洲AV无码不卡无码| 久久久久亚洲AV无码麻豆| 亚洲成av人片在线看片| 亚洲国产视频久久| 久久精品国产亚洲AV电影网| 亚洲国产激情一区二区三区| 亚洲永久无码3D动漫一区| 亚洲国产成人精品不卡青青草原|