GaussDB(DWS)發生數據傾斜不要慌,一文教你輕松獲取表傾斜率

      網友投稿 819 2025-03-31

      GaussDB(DWS)是MPP并行架構,若表的數據存在傾斜情況,會引起一系列性能問題,影響用戶體驗,嚴重時可能會引起系統故障。因此能快速獲取傾斜的表并整改是GaussDB(DWS)運維管理人員比較關注的事情。


      需求描述

      GaussDB(DWS)發生數據傾斜不要慌,一文教你輕松獲取表傾斜率

      GaussDB(DWS)自身提供pgxc_get_table_skewness視圖來查詢傾斜情況,但實際實踐過程中,該視圖存在性能問題,且該視圖的傾斜率計算有問題。實踐過程中,該視圖獲取的某個表的傾斜率在不高的情況下(例如0.03),但實際上該表是存在傾斜情況的。

      同時在很多時候我們需要獲取一個schema下所有表的傾斜率,以排查傾斜問題,pgxc_get_table_skewness在產品文檔中也描述是一個性能較差的視圖。

      因此項目實踐過程中急需一個性能好且能表達傾斜情況的函數或視圖。

      設計思路

      GaussDB(DWS)有獲取每個DN的空間大小函數table_distribution,通過該函數,我們能快速獲取每個DN的大小,同時可以根據每個DN的大小,來獲取表的傾斜情況:

      skewness = (max(dnsize) - avg(dnsize))*100/max(dnsize)

      該傾斜率公式計算表的最大DN空間大小與平均DN空間大小的占比,能準確反映傾斜率,乘100為表現百分比。

      實現過程

      根據傾斜公式,我們得出以下SQL,該SQL能快速獲取schema所有表的傾斜情況,下面以public為例:

      select schemaname,tablename,sum(dnsize)/1024^3 dnsize_gb,(max(dnsize) - avg(dnsize))*100/nullif(max(dnsize),0) skewness_factor from ( select schemaname ,tablename ,(regexp_split_to_array(tbl_dis,'[\,\(\)]+'))[4]::bigint as vprocname ,(regexp_split_to_array(tbl_dis,'[\,\(\)]+'))[5]::bigint as dnsize from ( select nspname as schemaname ,relname as tablename ,table_distribution(nspname,relname)::text as tbl_dis from pg_class a inner join pg_namespace b on a.relnamespace = b.oid and a.relkind = 'r' and b.oid not in (100) ) ) where schemaname= 'public' group by 1,2 order by 3 desc;

      結果樣例如下,通過例子,可以看出來,test13這個表2GB,且發生嚴重的傾斜97%,同時store_sales1一個70GB的大表也存在傾斜情況58%

      與GaussDB(DWS)的pgxc_get_table_skewness視圖結果比對

      使用GaussDB(DWS) 的系統視圖pgxc_get_table_skewness,比較難看出來store_sales1存在傾斜情況。

      此處我們使用的是系統視圖pgxc_get_table_skewness獲取

      select * from PGXC_GET_TABLE_SKEWNESS where schemaname = 'public' and tablename in ('store_sales1','test13');

      從結果上看,skewratio字段,test13表能看出來存在嚴重傾斜情況,而store_sales1的skewratio值只有0.031,看不出來存在傾斜情況。但事實上該表是存在一定傾斜的

      我們通過table_skewness看每個DN的數據分布驗證,發現store_sales1的確存在一定傾斜。

      總結:

      GaussDB(DWS)的傾斜率獲取視圖pgxc_get_table_skewness的結果,雖能反映嚴重傾斜的表,但存在傾斜的大表則比較難看出來。同時該函數存在一定的性能問題,較多表的情況下基本執行不出來。

      本文提供的傾斜率獲取辦法能比較準確反映表的傾斜情況且能叫快速獲取整schema所有的表的傾斜率方法;該方法在測試過程中,數據量越大,表越多,執行的時間會越慢,測試一個schema約3800張表,共40TB左右的數據,在5分鐘左右獲取所有表的空間大小與傾斜率。

      但本文提供的方法只能對單個schema操作,對整個數據庫獲取表空間大小與傾斜率,實測無法執行成功。若對時效性不要求的話,可以每天固定一個時間,已跑批的形式,獲取一個庫的所有表清單,使用table_distribution函數,一次一個表地獲取表的空間信息,使用多并發執行,這樣的方式能在一定時間內將所有表的空間情況執行完成。

      例如:對整庫有10萬張表的情況,可以使用100個并發同時執行 insert into table_size_info select * from table_distribution('schema.table'); 這樣的方式將10萬張表的DN空間信息獲取完成,然后使用本文的公式匯總獲取每個表的傾斜率與空間總大小。

      想了解GuassDB(DWS)更多信息,歡迎微信搜索“GaussDB DWS”關注微信公眾號,和您分享最新最全的PB級數倉黑科技,后臺還可獲取眾多學習資料~

      EI企業智能 Gauss AP 數據倉庫服務 GaussDB(DWS)

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

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

      上一篇:如何在Excel中基于特定日期獲取星期開始和結束日期?
      下一篇:excel表格如何設置日期轉換
      相關文章
      亚洲精品国产字幕久久不卡| 在线观看亚洲免费视频| 亚洲国产日韩在线观频| 天天综合亚洲色在线精品| 国产亚洲精品影视在线| 亚洲人成电影网站| 亚洲美女激情视频| 亚洲色欲www综合网| 老色鬼久久亚洲AV综合| 99久久精品国产亚洲| 亚洲色图国产精品| 亚洲小视频在线观看| 亚洲精品国产成人99久久| 亚洲欧洲第一a在线观看| 久久精品亚洲视频| 亚洲A∨无码一区二区三区| 亚洲av日韩av天堂影片精品| 亚洲免费视频网站| 亚洲精品视频在线| 亚洲精品视频在线免费| 亚洲国产日韩在线人成下载| 久久精品国产亚洲av麻豆图片 | 亚洲第一永久在线观看| 91亚洲精品麻豆| 国产成人精品日本亚洲网址| 亚洲色最新高清av网站| 亚洲A∨精品一区二区三区下载| 亚洲av无码一区二区三区人妖| 国产亚洲精品2021自在线| 狠狠色婷婷狠狠狠亚洲综合| 亚洲精品无码成人AAA片| 亚洲av无码一区二区乱子伦as| 亚洲第一精品在线视频| 亚洲国产成人手机在线电影bd | 中文亚洲AV片在线观看不卡| 久久91亚洲精品中文字幕| 亚洲最大视频网站| 亚洲偷自拍另类图片二区| 老牛精品亚洲成av人片| 中文字幕亚洲无线码| 亚洲国产精品热久久|