數據庫性能分析和優化是一個難題,筆者所在的Greenplum研發部門近期正好在解決一個實際用戶的全局性能問題,本文記錄了分析過程和解決思路。本案例是第一次對實際客戶的生產庫以GPCC歷史數據爲核心剖析性能問題,所以有必定的開創性和借鑑意義,故撰文供研發同事、現場工程師、支持工程師參考,同時也適合具有必定GP基礎並但願提升的讀者閱讀。同時爲了保護客戶的商業祕密,本文不透露任何關於該商業用戶的名稱、行業等信息,並對數據中的縮寫、表名等敏感信息都進行了脫敏處理。數據庫
客戶在2019-09-22執行了從 GP4.3 到 GP5.20 的升級,隨後在10月中旬提出升級後總體性能降低的問題 「overall performance degrade after upgrade」 。現場工程師提出了包括ANALYZE、VACUUM等合理建議,同時售後支持和研發着手分析性能問題。網絡
該客戶升級先後都使用了GPCC,GP4.3使用了GPPerfmon+GPCC3的組合,GP5.20使用的是GPCC4.8 (截止發稿時4.9版本已經發布,請使用最新版本),並正確開啓了歷史數據收集(參見博文如何開啓)。在支持人員的協助下,咱們得以得到升級先後的相關歷史數據。性能
GPCC的歷史數據主要包括系統性能信息和查詢歷史,後文會結合分析過程詳細展開。優化
該部分歷史數據很是龐大,僅9月22日升級後到十月中旬幾周內,GPCC 4.8就記錄了1.5億次查詢。面對overall performance這一模糊的課題,咱們要想真正幫到客戶,就須要讓這些數聽說話。網站
第一部分,瞭解GPDB集羣的總體性能特徵spa
先介紹GPCC的系統性能歷史表3d
這個表的定義從GPPerfmon到GPCC4.8變化不大,在GPPerfmon時表明名爲public.system_history,GPCC4之後爲gpmetrics.gpcc_system_history。code
GPCC運做時會每分鐘四次(分別在00秒、15秒、30秒、45秒)對GPDB集羣的每一個主機(包括Master、Segment和Standby Master)採樣上面所列信息,做用是掌握用戶數據庫的總體負載情況,能夠幫助咱們回答諸如如下幾個問題:orm
咱們使用下面查詢來分析一週內的系統資源變化狀況blog
SELECT ctime::date || '_' || CASE WHEN extract(hour from ctime) < 10 THEN '0' ELSE '' END || extract(hour from ctime) AS date_hour , avg(cpu_sys) AS cpu_sys , avg(cpu_user) AS cpu_user , avg(cpu_sys+cpu_user) AS cpu , avg(mem_total) AS mem_total , avg(mem_used) AS mem_used , avg(mem_actual_used) AS mem_actual , avg(load0) AS load0 , avg(load1) AS load1 , avg(load2) AS load2 , avg(disk_rb_rate) / 1024 / 1024 AS disk_R_MBs , avg(disk_wb_rate) / 1024 / 1024 AS disk_W_MBs , avg(net_rb_rate) / 1024 / 1024 AS net_I_MBs , avg(net_wb_rate) / 1024 / 1024 AS net_O_MBs FROM gpmetrics.gpcc_system_history WHERE hostname LIKE 'sdw%' AND ctime >= '2019-10-09 00:00:00' AND ctime < '2019-10-16 00:00:00' GROUP BY 1 ORDER BY 1 ;
取得的結果咱們能夠導入到 Excel、Grafana、Tableu 等辦公軟件進行圖形化的對比。下圖是對客戶升級先後各取一週時間的樣本,重疊到一塊兒觀察變化趨勢。
初步診斷用戶升級GP5以後磁盤IO/網絡IO增長的確存在潛在的性能問題,咱們列舉出如下一些可能性。
針對這些懷疑,咱們須要進一步查證用戶的查詢負載。
(未完待續)
得到更多關於Greenpum的技術乾貨,請訪問Greenplum中文社區網站。