PG數據庫目前已經成為最熱門的開源數據庫之一,特別是因為其開源協議十分適合商業化,因此大量的商用數據庫,包括大量的國產數據庫也都基于PG的開源代碼進行研發。作為一個曾經的Oracle DBA,如果在現階段要轉型的話,學習一下PG數據庫的運維,也算是未雨綢繆了。我搞了差不多30年Oracle數據庫,不過我估計在我退休前的這幾年里,Oracle方面的活會有所減少,而開源和國產數據庫方面的運維優化需求會大大增加。于是從2017年開始,我和我團隊的小伙伴們就開始對PG數據庫進行系統的學習了。Oracle DBA轉而學習PG數據庫,實際上還是比較容易的,因為大型關系型數據庫的基本概念是相通的,而且PG數據庫因為沒有了共享池和全局共享CURSOR這個超級復雜的機制,也要簡單得多。
如果按照上面的維度把Oracle數據庫與PG數據庫的運維做個比對。PG是開源數據庫,無原廠支持,第三方服務水平較低,代碼BUG可通過閱讀源碼定位,需要通過社區修復。在這里,第三方服務廠商就可以為客戶提供很多服務,比如數據庫的安裝和初步調優,以及定期的補丁與安全漏洞檢查,打補丁升級,解決日常遇到的BUG等。與擁有原廠標準化補丁和服務的Oracle相比,PG數據庫這方面相對較弱,需要第三方服務來加以支持。
對于運維監控與優化而言,PG數據庫提供了同樣豐富的監控接口和指標體系,不過部分監控接口需要安裝插件,包括一些十分重要的監控采集內容,比如TOP SQL,都需要安裝插件來實現。PG的第三方服務商應該幫助用戶提供這方面的安裝部署服務。
另外一方面,PG數據庫和操作系統結合得十分緊密,運維工作與OS關聯緊密,相對簡單,沒有復雜的共享池,運維關注點較為集中。在我個人的感覺里,PG數據庫的運維更像是Oracle 9i時代的數據庫運維。
與Oracle數據庫不同的是,PG數據庫的大版本升級對運維細節影響較大,甚至很多運維細節都是顛覆性的。因此需要PG的運維人員不斷地更新版本信息,否則很容易出現認知錯誤。
最后一方面,PG開源的第三方工具和第三方生態產品較多,而且這些工具與Oracle的第三方工具、生態產品不同,如果不能很好地掌握這些工具和生態產品,會對PG數據庫的運維產生比較大的影響。如果你去運維Oracle數據庫,那么只要把Oracle自身玩好就行了,Oracle數據庫自身構成了一個十分完善的體系,周邊工具與Oracle RDBMS之間是緊密集成,而且從底層是貫通的。而PG數據庫則不同,PG社區僅僅提供了一個RDBMS和一些必要的外圍工具,剩下的應用所需要的功能都是其他的開源項目提供的。因此PG周邊的生態工具數量龐大,功能也存在差異,與PG數據庫的集成也是應用級的,沒有在RDBMS底層進行打通。最大的問題是用戶在選擇這些產品的時候也比較隨意,你去服務的不同客戶可能會選擇不同的高可用解決方案,選用不同的讀寫分離集群方案,使用不同的第三方插件來解決一些數據庫的功能問題。因此作為PG數據庫的DBA或者運維服務人員,你需要全面地掌握這些第三方生態工具,才能夠真正把PG數據庫的運維服務做好。
在PG數據庫的運維中,從一個ORACLE DBA的角度,我也總結了一些日常運維與優化的工作內容。因為今天下午我還要趕到東莞去參加華為的鯤鵬昇騰開發者峰會,所以今早的事情比較多,我就不展開介紹了,如果大家有興趣,明后天我會把上面這個片子詳細地介紹一下。大家有興趣的話,就在下面留言吧。
關于留言,我簡單說幾句,因為怕麻煩,我沒有開啟留言討論的公眾瀏覽功能,因此你們給我的留言我都是可以看見的,不過其他朋友可能看不見。年紀大了,只想靜靜地寫點東西,沒有精力去就某些觀點爭論與辯論,大家請包涵。