postgresql是一種對象關系型資料庫管理系統,這個起源于伯克利(bsd)的資料庫研究計劃目前已經衍生成一項國際開發項目,并且擁有非常廣泛的使用者。postgresql被譽為目前功能最強大、特性最豐富和最先進的開源資料庫系統。
postgresql支援大部分sql标準并且提供了許多其他現代特性,比如複雜查詢、外鍵、觸發器、視圖、事務完整性、mvcc等,此外還可以通過許多方法進行特性擴充,一些特性甚至是當今許多商業資料庫的前身。
9月24日,由雲栖社群與postgresql中文社群聯合主辦“雲栖技術之旅·開源資料庫企業應用實踐”專場沙龍在北京阿裡中心望京a座舉辦,postgresql愛好者齊聚,一起探讨最先進的開源資料庫的魅力。
postgresql中國社群核心成員張文升帶來了《postgresql在網際網路企業中的實戰》主題分享。
張文升,目前是探探dba,負責探探的資料庫架構、運維和調優的工作。曾就職于去哪兒網,負責postgresql運維工作。因為對postgresql熱開,投入了postgresql開源社群的懷抱,成為核心成員與志願者。
張文升認為,大家對postgresql還是有很多誤解,網絡上有很多文章,可能是年代太久遠,也可能是其它原因,都認為postgresql隻适合做olap,不适合在網際網路的應用。資料分析是postgresql的強項,多表join、豐富的fdw、視窗函數等在資料分析都有很大的優勢。事實上,postgresql在網際網路企業應用中也非常好用,做oltp應用,pg無論在可靠性和性能方面都不輸其它任何關系型資料庫,包括商業和開源的關系型資料庫。去哪網就是國内postgresql最大的使用者之一。
oltp(聯機事務處理)的特點是:高并發,小事務;查詢多、寫入多;更新多,删除少。對于此類場景的正常解決辦法是:
頻繁更新的資料通過表空間放到記憶體或ssd
xlog建議放在單獨的儲存設備(對于pci-e卡則沒有必要)
拆表(表拆分的好處是可以分布到不同的表空間,autovacuum顆粒度更小,prevent wrap的機率變小,維護更加友善)
拆庫(業務資料和日志資料分離,各業務子子產品拆分,按使用者id 2^n取模拆分)
盡量精簡線上資料
如果磁盤性能比較好,可以将塊大小調大至32k
關于postgresql的性能調優,還有很多細緻的工作要做,比如可以從作業系統、資料庫系統部署、全局配置參數、索引等等方面去做調整,而開發人員可以從應用架構及sql語句等細節着手進行調優工作。
此外,postgresql作oltp應用時,需要使用連接配接池。每個postgresql程序在工作時會配置設定1個cpu核使用,是以不适合直接與高并發的短連接配接應用直接連接配接。對于網際網路高并發場景,加上pgbouncer或pgpool連接配接池是比較好的解決辦法,其中pgbouncer比較輕量實用,維護難度低。
postgresql是一個資料庫核心,比oracle少了很多功能,但是這些功能都可以通過插件來解決。對于高可用方案,可以通過pacemaker+corosync+postgresql
replication來實作。
此外,關于高可用方案、安全、性能調優、全文檢索方面的内容,請看演講ppt和視訊回放;
神州飛象進階資料庫工程師賴偉帶來了sybase遷移postgresql的項目經驗分享,賴偉具有多年關系資料庫運維經驗,擅長postgresql的調優和運維,具有豐富的資料庫開發和異種資料庫遷移經驗。
關于遷移的方法,賴偉給出了如下建議:
遷移主導:在不改變原有架構的基礎上進行遷移
測試驅動:遷移之前進行評估、測試
标準化:通過文檔将不同的遷移方法進行統一化,标準化
自動化:采用自動化工具來進行遷移
遷移的流程如下:
對于sybase資料庫遷移至postgresql,評估和比對情況可見下表。
遷移具體方法請見演講ppt和現場視訊回放。
在使用postgresql資料庫過程中,對sql調優最常用的手段是使用explain檢視執行計劃,很多時候隻關注執行計劃的結果而未深入了解執行計劃是如何生成的。優化器作為資料庫核心功能之一,也是資料庫的“大腦”,了解優化器将有助于我們更好地優化sql。
在本次沙龍上,阿裡資深開發工程師範孝劍(花名康賢)帶來了postgresql優化器原理相關的分享。
sql處理過程如下:
在pg資料庫中,對于ddl語句無需進行優化,到utility子產品處理,對于dml語句需要到優化器中處理,一個使用者連接配接從接收sql到執行的流程如下:
以下是幾種常見的postgresql優化器對sql優化的方法:
查詢重寫,主要目的是為了消除view、rule等,
提升子鍊,目标是将in和exists子句遞歸提升。
提升子查詢
化簡條件
外連接配接消除(left/right/full join)
條件下推(目的為了連接配接前,元組數組盡量少)
語義優化
min/max優化
order by優化
distinct優化
集合操作優化
以上這些方法更着重于sql邏輯優化,也就是盡量對sql進行等價或者推倒變換,以達到更有的執行計劃。此外,postgresql優化器還包括實體查詢優化,比如單表掃描方式、多表組合方式、多表組合順序等。
關于postgresql優化器原理的講解請看演講ppt和視訊回放。
greenplum是基于postgresql開發的一個關系型資料庫,它的特點主要就是查詢速度快,資料裝載速度快,批量dml處理快,而且性能可以随着硬體的添加呈線性增加,擁有非常良好的可擴充性。是以,它主要适用于面向分析的應用。比如建構企業級ods/edw或者資料集市等等。
在本次沙龍上,聽雲平台後端資料庫工程師周金可為大家介紹了使用greenplum解決聽雲實際業務痛點的一些心得。
周金可加入聽雲時,恰好是業務快速增長的階段,聽雲後端的應用以及資料庫經受了比較大的考驗。去年大多數時間是在做擴容,mysql叢集由最開始的數台執行個體擴充到現在的數百台執行個體。
聽雲資料庫經曆了由mysql單機到mysql分庫分表分布式架構的演變,後來資料量繼續膨脹,又使用壓縮引擎對資料進行壓縮。某個子產品的單表資料量達百億級,mysql shared方式已經無法保證查詢性能,是以聽雲采用了greenplum mpp的方案來解決性能問題。
從下圖中可以看到,采用greenplum mpp後性能提升将近三個數量級,檢索一天的資料量查詢時間僅有90多ms。
關于greenplum在聽雲的具體實踐,請看演講ppt和視訊回放。
在使用greenplum并行過程中會遇到很多問題,其中最重要的一個問題就是分片。本次沙龍最後,阿裡資深開發工程師窦賢明(花名執白)介紹了greenplum分片的原理和分片案例的分析。
可以通過下面幾張圖來了解greenplum分片的原理。
并行導入
複制、插入
查詢
執白還介紹了greenplum分片的一些原則,比如大表join運算的關聯字段、防止資料傾斜、避免條件字段等,具體的分片方法請看演講ppt和視訊回放。
雲栖技術之旅,是由阿裡雲雲栖社群主辦,整合了阿裡集團内部多個領域頂級技術專家與技術資源,通過線下技術教育訓練的方式,為熱愛技術的朋友提供一個交流&分享技術觀點、碰撞精彩火花的平台。