PG數據庫運維中的操作系統關注點
?現在PG數據庫在用戶側的應用場景日益豐富,很多國產數據庫也與PG開源項目有著很深的淵源,在使用過程中的一些基本運維規則也與PG開源數據庫十分近似。今天我們從操作系統的角度來看一看PG數據庫日常運維中需要關注的一些問題。
目前大多數用戶側的PG數據庫規模都比較小,應用系統也都不太復雜,因此大多數情況下,數據庫日常運維的難度并不大,不像Oracle這樣復雜的數據庫系統,遇到些問題還不太容易處理。在PG數據庫日常運維上,只要關注下總會話數,活躍會化,并發訪問,TOP SQL,一般也就夠用了。反而在操作系統層面,需要多加關注。
在這種情況下,操作系統的各種資源是否充足是決定數據庫運行是否穩定的十分重要的因素。CPU、內存、IO、存儲容量這四種資源是否充足決定了PG數據庫的運行是否穩定。網絡是否存在丟包、延時過大的問題,則會影響SQL語句執行的效率。一般情況下對這些多做關注,基本上就沒有太大的問題了。
對于CPU資源,首先要觀察在業務高峰期,r隊列的數量長時間超過CPU線程數,甚至超過2倍。如果業務高峰期操作系統r隊列的長度經常長時間(超過10分鐘)超過CPU線程數,那么說明當前CPU資源在系統高峰期存在不足的問題,如果經常超過2倍,那么久應該準備擴容了。
對于內存資源,我們需要關注的是可用內存和交換器使用率這兩個指標,因為OS內存中很多內存是用于CACHE/BUFFER的,所以空閑內存的指標指示性不夠準確,使用可用內存可能更為準確一些,這個指標是說操作系統中還有多少真正可用于分配的內存。
MemAvailable指標的含義是當前內存中還可用于分配的所有內存的總和。如果這個值比較小了,說明當前的OS中可以用于分配的內存過小,系統存在隱患。
另外一個需要關注的指標是SWAP使用率,有些PG的使用攻略中甚至建議大家關閉SWAP,從而避免因為SWAP帶來的性能不穩定。這種建議實際上是因為無法控制SWAP,以及控制SWAP帶來的負面影響而采用的一種極端的措施。在當前的LINUX內核下,SWAP產生的原因十分復雜,因此干脆通過關閉SWAP來避開SWAP了。這種做法實際上是不可取的,因為你都沒辦法搞明白SWAP產生的原因,那么如果關閉了SWAP,一旦SWAP需要產生的時候,那么OS會采取更為極端的方式來對待,那就是OOM KILLER進程殺掉某些進程。如果正好Postmaster正好是那個倒霉蛋,那么就不是PG性能受到影響了,而是PG庫就宕了。目前我們常用的Linux 7、8核心的swap算法已經都比較完善了,大多數情況下,SWAP不會對影響PG數據庫性能比較嚴重的匿名塊做SWAP,而會盡可能交換CACHE/BUFFER,因此只要基礎的LINUX VM參數設置的比較合理,就無需懼怕SWAP的產生。而當系統的SWAP使用率一直居高不下(比如超過90%),才需要重點關注。
IO延時也是我們運維PG數據庫時需要關注的,因為PG數據庫的DOUBLE BUFFER特性,實際上IO延時對PG數據庫的影響并不一定像對Oracle那么直接。有時候IO延時挺高了,但是PG數據庫的性能似乎受到的影響還不算大。不過不管怎么樣,IO延時低于20毫秒是運維PG數據庫的一個基本底線。過高的IO延時肯定會對PG數據庫長期穩定運行存在隱患(當PG數據庫負載較小的時候,這種影響還不一定會體現出來)。在一個相對穩定的運行環境中,如果IO總量變化不大的時候,IO延時應該也是相對穩定的,如果IO總量不變的情況下,IO延時越來越長,那么說明底層IO設備或者后端存儲存在問題,我們需要盡早關注,以免出現大問題。存儲子系統的問題,對于數據庫來說往往是致命的。
另外一個容易受到忽視,但是一旦出現問題就容易引發大問題的是操作系統層面的進程的狀態。如果進程中出現了幾類特殊的非正常進程,那么我們就需要加以關注了。如果這些進程屬于postgres用戶,那么就需要額外關注了。一般進程狀態有r(運行或可允許),S(可中斷的休眠狀態),這兩種狀態的進程都是正常的。而處于D(不可中斷的休眠狀態)的進程往往是在等待IO完成等內核調用,這個狀態如果短時存在,并且很快消失了,那很可能是IO性能存在問題,并不危險,如果系統中經常有大量進程處于D狀態,那么就需要關注了,是不是OS在IO層面存在問題了。而且隨著D狀態的進程數量愈來愈多,OS的風險也越來越大,服務器從長遠看,存在比較大的風險。另外T狀態的進程也應該是一個臨時狀態,等進程歸還資源后應該就立即被關閉了,如果有進程長期處于T狀態,那么系統肯定存在某些風險,需要關注。同理是Z狀態的進程(僵死)。關注OS中的這些非正常狀態的進程的數量變化以及某個非正常狀態的進程是否長期處于該狀態,是我們PG DBA運維數據庫系統時應該關注的。
OS層面需要關注的內容還有很多,比如通過lsof看看打開文件句柄的總數是否存在不合理的增長,ulimit參數的限制是否會出現風險,OS進程數量是否異常,dmesg和messages是否存在異常報錯等,都是PG DBA需要經常去檢查檢查的。這些檢查十分瑣碎,有些也過于專業。因此PG DBA也需要構建一些工具,定期自動的去做巡檢,從而確保數據庫所運行的OS環境是安全的。今天時間關系,我們就先聊這么多吧。在12月30號晚上的分享中,我會給大家介紹一些更細的內容。?