《深度解讀PostgreSQL 10.0版本新特性》要點(diǎn):
本文介紹了深度解讀PostgreSQL 10.0版本新特性,希望對(duì)您有用。如果有疑問,可以聯(lián)系我們。
相關(guān)主題:PostgreSQL教程
5月11日——13日,第八屆中國數(shù)據(jù)庫技術(shù)大會(huì)(DTCC2017)在北京國際會(huì)議中心舉行.會(huì)議期間,共有近5000名IT人士到場(chǎng)交流分享技術(shù)理念,盛況空前.本屆DTCC大會(huì)以“數(shù)據(jù)驅(qū)動(dòng)·價(jià)值發(fā)現(xiàn)”為主題,同時(shí)匯集了來自互聯(lián)網(wǎng)、電子商務(wù)、金融、電信、政府、行業(yè)協(xié)會(huì)等20多個(gè)行業(yè)領(lǐng)域的120多位技術(shù)專家,共同探討Oracle、MySQL、NoSQL、云端數(shù)據(jù)庫、智能數(shù)據(jù)平臺(tái)、區(qū)塊鏈、數(shù)據(jù)可視化、深度學(xué)習(xí)等領(lǐng)域的前瞻性熱點(diǎn)話題與技術(shù).
在13日下午的開源技術(shù)分會(huì)場(chǎng)上,武漢大學(xué)副教授彭煜瑋對(duì)PostgreSQL 10.0 版本的新特性進(jìn)行了解讀,以贊助大家對(duì)此版本有更深入的認(rèn)識(shí)與了解.
▲彭煜瑋
PostgreSQL 10.0將是更改版本號(hào)規(guī)則后的第一個(gè)發(fā)行版,社區(qū)在這個(gè)新版本中增加了豐富的新特性和加強(qiáng).彭煜瑋此次解讀的內(nèi)容包括功能增強(qiáng)、性能增強(qiáng)、平安性和可靠性增強(qiáng)、應(yīng)用開發(fā)以及遷移的注意事項(xiàng).
功能增強(qiáng)
·邏輯訂閱.在多個(gè)業(yè)務(wù)之間有少量的數(shù)據(jù)需要同步、數(shù)據(jù)匯總、數(shù)據(jù)拆分、跨云線上線下同步等問題中,邏輯訂閱的應(yīng)用是非常必要的.
·內(nèi)置分區(qū)表.PostgreSQL 10.0中將加入內(nèi)置分區(qū)表的功能,依舊使用了繼承的特性,但不需要手工寫規(guī)則了.PostgreSQL 10.0 分區(qū)表不支持全局索引,因此無法實(shí)現(xiàn)全局的唯一約束;更新數(shù)據(jù)時(shí)不能導(dǎo)致數(shù)據(jù)跨區(qū)移動(dòng),否則會(huì)報(bào)錯(cuò);修改主表的字段名、字段類型時(shí),會(huì)自動(dòng)同時(shí)修改所有的分區(qū);TRUNCATE 主表時(shí),會(huì)清除所有繼承表分區(qū)的記錄(如果有多級(jí)分區(qū),也會(huì)一直級(jí)聯(lián)下去);目前支持分區(qū)表的ON CONFLICT .. DO NOTHING ,暫時(shí)還不支持ON CONFLICT .. DO UPDATE.
·流式接收端在線壓縮WAL.PostgreSQL 10.0 中pg_receivexlog 支持對(duì)WAL日志在線壓縮.pg_receivexlog支持通過開關(guān)控制是否需要開啟壓縮、以及選擇壓縮級(jí)別.pg_receivexlog啟動(dòng)時(shí),自動(dòng)掃描存放歸檔文件的目標(biāo)目錄,選擇斷點(diǎn)續(xù)傳的位置,然后向PostgreSQL數(shù)據(jù)庫哀求相應(yīng)位置為起點(diǎn)的REDO.
·查看清理進(jìn)度.PostgreSQL 10.0增加了對(duì)Vacuum的可視化監(jiān)控;增加了動(dòng)態(tài)視圖pg_stat_progress_vacuum;顯示每個(gè)vacuum worker進(jìn)程掃描了多少頁面、回收了多少頁面,結(jié)合清理對(duì)象的總頁面數(shù),可以估計(jì)進(jìn)度.
·后臺(tái)運(yùn)行.10.0增加了對(duì)后臺(tái)運(yùn)行的支持,提供了三個(gè)SQL函數(shù).pg_background_launch : 開啟后臺(tái)work進(jìn)程與會(huì)話,執(zhí)行用戶提供的SQL,返回后臺(tái)會(huì)話的PID;pg_background_result : 根據(jù)提供的PID,返回這個(gè)后臺(tái)會(huì)話執(zhí)行SQL的結(jié)果;pg_background_detach : 根據(jù)提供的PID,返回這個(gè)后臺(tái)會(huì)話執(zhí)行SQL的結(jié)果,同時(shí)關(guān)閉這個(gè)后臺(tái)進(jìn)程. pg_background_result還會(huì)返回執(zhí)行所用的時(shí)間.
性能增強(qiáng)
·并行增強(qiáng).10.0 新增了一個(gè)參數(shù)max_parallel_workers,用于控制整個(gè)集群允許開啟的用于多核計(jì)算的Worker進(jìn)程.PostgreSQL還增加了一個(gè)對(duì)元組進(jìn)行并行排序的模塊:原則上,任何現(xiàn)有需要調(diào)用tuplesort的功能都可以使用這個(gè)并行排序模塊基于并行排序模塊,將能夠支持B-Tree的并行創(chuàng)建(代價(jià)模型比擬直接).
·間接索引.10.0 引入了間接索引的概念,索引項(xiàng)中有堆元組的主鍵值:只要不更新堆元組的主鍵,索引鍵值不變的間接索引都不需要更新;但間接索引不能單獨(dú)服務(wù)于查詢,必須經(jīng)過主鍵索引中轉(zhuǎn);主鍵只能是小于等于 6 字節(jié)的類型.
·用不完全索引支持復(fù)合排序.用索引支持排序是很好的手段:ORDER BY a,b,c 可以利用到索引(a,b,c,*);ORDER BY a,b,c 無法利用索引(a,b)或者(a).10.0 將使得第二種情況能夠用上(a,b)或者(a)這樣不完全包含排序列的索引:第一個(gè)階段,利用不完全的索引來做基于前幾個(gè)排序列的排序;第二個(gè)階段,對(duì)前幾個(gè)排序列上值相等的數(shù)據(jù),取出后面的列值進(jìn)行單獨(dú)排序.當(dāng)前幾個(gè)排序列的值分布得比較散時(shí)這種利用索引的辦法效果比較好.
·自動(dòng)預(yù)熱共享緩存.10.0 中增加了自動(dòng)預(yù)熱共享緩存的技術(shù):建立一個(gè)預(yù)熱器后臺(tái)進(jìn)程,它在系統(tǒng)關(guān)閉時(shí)把緩沖池中的數(shù)據(jù)塊信息轉(zhuǎn)儲(chǔ)到文件中;重啟時(shí),預(yù)熱器自動(dòng)把轉(zhuǎn)儲(chǔ)出來的數(shù)據(jù)塊重新載入到緩存中.
·JIT支持.PostgreSQL 10.0 已經(jīng)開始為 JIT 做鋪墊,把SQL執(zhí)行的框架從遞歸調(diào)用方式改成了非遞歸的opcode驅(qū)動(dòng)模式,非遞歸式降低了棧使用和開銷,可以在不同的子表達(dá)式之間共享一些狀態(tài),簡單函數(shù)以簡單跳轉(zhuǎn)實(shí)現(xiàn)而不需函數(shù)調(diào)用.
平安性和可靠性
·平安性增強(qiáng).PostgreSQL SCRAM機(jī)制基于RFC文檔 5802 、7677實(shí)現(xiàn),目前只支持SCRAM-SHA-256算法,但是基于SASL認(rèn)證方法,未來可以支持更多的更強(qiáng)的算法.SCRAM相比md5,可以避免因?yàn)閿?shù)據(jù)庫存儲(chǔ)的加密秘鑰泄露導(dǎo)致客戶端可以篡改認(rèn)證協(xié)議連接數(shù)據(jù)庫的危險(xiǎn).由于SCRAM和md5不兼容,二者只能選其一.
·新增內(nèi)置角色.PostgreSQL 10.0 開始植入了一些內(nèi)置的角色:pg_backend_pid:可用來取消、中止任何進(jìn)程,不包括其他超級(jí)用戶權(quán)限;pg_monitor:可以查看統(tǒng)計(jì)信息,便于DBA等檢查數(shù)據(jù)庫健康狀態(tài);pg_read_all_gucs:可以查看所有的 GUC 配置.未來PostgreSQL還會(huì)對(duì)植入更多的內(nèi)置角色,讓數(shù)據(jù)庫的權(quán)限分組管理更加便捷.逐步形成像Oracle這樣內(nèi)部有許多角色可選的狀況.
·防止執(zhí)行不帶條件的更新/刪除.不帶條件的更新/刪除很危險(xiǎn),正常情況下,這樣的SQL不應(yīng)該在業(yè)務(wù)邏輯中出現(xiàn).通常出現(xiàn)在SQL注入或者誤操作中.10.0 提供了一個(gè)參數(shù)來防止此類SQL,bool allow_empty_deletes = true;bool allow_empty_updates = true;分別控制是否能執(zhí)行不帶條件的Update或Delete,可以設(shè)置為全局、會(huì)話級(jí)、用戶級(jí)、庫級(jí)、或者事務(wù)級(jí)別.
·WAL日志支持的Hash索引.很長一段時(shí)間,PG中的Hash索引是不做WAL日志的,因此數(shù)據(jù)庫瓦解可能會(huì)導(dǎo)致Hash索引不可用.10.0 中為Hash索引的操作加上了WAL支持,現(xiàn)在對(duì)Hash索引的創(chuàng)建、插入、分裂等操作都會(huì)記錄WAL日志,數(shù)據(jù)庫瓦解后可以用這些信息來恢復(fù)索引
應(yīng)用開發(fā)
·Libpq增強(qiáng).支持pipeline batch模式,增加多連接功能.
·標(biāo)準(zhǔn)/兼容性支持.增加類似serial的identify column:雖然已經(jīng)可以使用serial來達(dá)到同樣效果,不過實(shí)現(xiàn)這一標(biāo)準(zhǔn),可以兼容更多的數(shù)據(jù)庫.
遷移的注意事項(xiàng)
使用pg_upgrade升級(jí)時(shí),Hash索引需要重建;XLOG相關(guān)的系統(tǒng)管理函數(shù)重命名,xlog改為wal;不再支持浮點(diǎn) datetimes/timestamps類型,編譯項(xiàng)--disable-integer-datetimes去除;不再支持client/server protocol version 1.0;不再支持contrib/tsearch2;不再支持version-0版本的C語言函數(shù).
自PostgreSQL發(fā)布以來就受到了眾多DBA的喜愛,而且廣受好評(píng),此次10.0版本的更新想必也時(shí)刻牽動(dòng)著PostgreSQL粉絲們的心.一年一個(gè)大版本是PostgreSQL社區(qū)的傳統(tǒng),不過發(fā)布時(shí)間通常為秋天,仍需等待一段時(shí)間.看到如此“巨大”的升級(jí)更新,大家必定都迫不及待了吧.
《深度解讀PostgreSQL 10.0版本新特性》是否對(duì)您有啟發(fā),歡迎查看更多與《深度解讀PostgreSQL 10.0版本新特性》相關(guān)教程,學(xué)精學(xué)透。維易PHP學(xué)院為您提供精彩教程。
轉(zhuǎn)載請(qǐng)注明本頁網(wǎng)址:
http://www.snjht.com/jiaocheng/9628.html