国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

PostgreSQL 14中TOAST的新壓縮算法LZ4,它能有多快?

微云疏影 ? 來源:yzsDBA ? 作者:yzsDBA ? 2023-01-24 15:54 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

對于列壓縮選項,PostgreSQL 14提供了新的壓縮方法LZ4。與TOAST中現有的PGLZ壓縮方法相比,LZ4壓縮更快。本文介紹如何使用整個選項,并和其他壓縮算法進行性能比較。

背景

PG中,頁是存儲數據的單位,默認是8KB。一般情況下,一行數據不允許跨頁存儲。然而,有一些變長的數據類型,存儲的數據可能超出一頁大學。為了克服整個限制,大字段域會被壓縮或者分割成多個物理行。這個技術就是TOAST:

默認情況下,如果表中有變長列,行數據的大小超過TOAST_TUPLE_THRESHOLD(默認2KB)就會觸發TOAST。首先,會先壓縮數據;壓縮后如果仍然太大,會溢出存儲。需要注意,如果列的存儲策略指定EXTERNAL/PLAIN,壓縮會被禁止。

PG14之前版本,TOAST僅支持一個壓縮算法PGLZ(PG內置算法)。但是其他壓縮算法可能比PGLZ更快或者有更高的壓縮率。PG14中有了新壓縮選項LZ4壓縮,這是一個以速度著稱的無損壓縮算法。因此我們可以期望它有助于提高TOAST壓縮和解壓縮的速度。

如何使用LZ4?

為了使用LZ4壓縮特性,在編譯時需要指定--with-lz4,并且在操作系統中按照LZ4庫。通過GUC參數default_toast_compression可以指定PG實例的TOAST默認壓縮算法。可以在postgresql.conf中配置,也可以通過SET命令僅改變當前連接:

postgres=# SET default_toast_compression=lz4;

SET

在CREATE TABLE創建表時指定列壓縮算法:

image.png

我們使用d+命令可以看到所有列的壓縮算法。如果列不支持或者沒有指定壓縮算法,那么會在Compression列顯示空格。上面的例子中,id列不支持壓縮算法,col1列使用PGLZ,col2使用LZ4,col3沒有指定壓縮算法,那么它會使用默認的壓縮算法。

可以通過ALTER TABLE修改列壓縮算法,但需要注意,修改后的算法僅影響執行整個命令后的insert數據。

postgres=# INSERT INTO tbl VALUES (1, repeat('abc',1000), repeat('abc',1000),repeat('abc',1000));

INSERT 0 1

postgres=# ALTER TABLE tbl ALTER COLUMN col1 SET COMPRESSION lz4;

ALTER TABLE

postgres=# INSERT INTO tbl VALUES (2, repeat('abc',1000), repeat('abc',1000),repeat('abc',1000));

INSERT 0 1

postgres=# SELECT id,

postgres-# pg_column_compression(id) AS compression_colid,

postgres-# pg_column_compression(col1) AS compression_col1,

postgres-# pg_column_compression(col2) AS compression_col2,

postgres-# pg_column_compression(col3) AS compression_col3

postgres-# FROM tbl;

id | compression_colid | compression_col1 | compression_col2 | compression_col3

---+-------------------+------------------+-----

1 | | pglz | lz4 | lz4

2 | | lz4 | lz4 | lz4

(2 rows)

可以看到在修改壓縮算法前插入的行,col1仍使用PGLZ壓縮算法,即使將壓縮算法從PGLZ修改到了LZ4。(那么,修改后進行解壓時使用哪個算法呢?)

需要注意,如果從其他表掃數據插入本表,例如CREATE TABLE ...AS...或者INSERT INTO...SELECT...,插入的數據使用的壓縮算法仍然使用原始數據的壓縮方法。pg_dump和pg_dumpall也添加了選項--no-toast-compuression,使用整個選項后,不會dump出TOAST壓縮選項。

性能比較

測試了LZ4和PGLZ壓縮率和壓縮速度。并添加了未壓縮數據的測試結果(指定存儲策略為EXTERNAL),對于未壓縮數據,沒有壓縮和解壓的耗時,但讀和寫數據的時間會增加。

測試使用的數據:PG documents(一行數據一個HTML文件);SilesiaCorpus提供的數據,包括HTML、Text、源代碼、可執行二進制文件、圖片

測試機器使用Intel? Xeon? Silver 4210CPU@2.20GHz with 10 cores/20 threads/2 sockets。

使用pgbench測試SQL語句執行時間,pg_table_size檢查表大學(每次執行前都執行VACUUM FULL排除死記錄的影響)。

壓縮率

PGLZ和LZ4的壓縮率都依賴于重復數據,重復的元組越多,壓縮率越高。但是如果PG評估這樣的壓縮率不好時,就不會執行壓縮,即使數據大小達到了閾值。因為壓縮并沒有高效節省磁盤空間,還會帶來解壓鎖的額外時間和資源消耗。

當前PG14中,PGLZ需要至少25%的壓縮率,LZ則僅比未壓縮數據時小即可。我比較了LZ4、PGLZ的表與未壓縮表大小。可以看到,大部分場景下,PGLZ的壓縮率稍微好點,壓縮率評價為2.23,LZ4的壓縮率為2.07。這意味著PGLZ可以節省7%的磁盤空間。

poYBAGO307yAMhZTAALAcjHIJ5Q514.jpg

Figure 1 - Comparing table sizes (in KB)

壓縮/解壓縮速度

Insert和查詢時TOAST數據會被壓縮和解壓縮。因此,我執行一些SQL語句查看不同壓縮算法帶來的影響。

首先比較了INSERT語句,列使用LZ、PGLZ和未使用壓縮時的性能。可以看到與未壓縮數據比,LZ4耗費稍微多一點時間,PGLZ耗費時間更多。LZ4的壓縮時間比PGLZ平均節省20%。這是一項非常顯著的改進。

pYYBAGO3072AYW3gAAKf7xUZ0GA941.jpg

Figure 2 - Comparing INSERT performance

下面比較SELECT。與PGLZ相比,LZ4可以節省20%的時間,與未壓縮數據相比,沒有太大差別。解壓縮的消耗已經降到了很低了。

poYBAGO3072AG4HgAAFUDQ_9v08530.jpg

Figure 3 - Comparing SELECT performance

再比較16個客戶端的INSERT語句并發。與PGLZ相比使用LZ4的單大文件(HTML,英文文本,源代碼,二進制執行文件,圖片)的壓縮性能快60%-70%。插入多個小文件(PG文檔),性能提升不大。和未壓縮的數據相比,有巨大提升,猜測使用壓縮減少了寫入磁盤的數據量。

poYBAGO3072AAVfUAAFgxdf_G3I282.jpg

Figure 4 - Comparing INSERT performance with 16 clients

16個客戶端的SELECT,多數場景下,LZ4性能優于PGLZ:

pYYBAGO3076AEIlgAAF4vrnCcPM768.jpg

Figure 5 - Comparing SELECT performance with 16 clients

同樣也比較了使用字符串函數的SELECT、UPDATE處理文本的速度。整個場景下LZ4優于PGLZ。LZ4壓縮算法的數據與未壓縮數據相比,函數處理的速度幾乎一樣,LZ4算法幾乎不會影響字符串操作速度。

poYBAGO307-AKz0pAAFMS33wzeQ709.jpg

Figure 6 - Comparing performance using string functions

與PGLZ相比,LZ4壓縮和解壓縮TOAST數據更加高效,并提供很好的性能。和未壓縮數據相比,查詢速度幾乎一樣,和PGLZ相比,插入快80%。當然某些場景下壓縮率不太好,但如過你想要提升執行速度,強烈推薦使用LZ4算法。

同樣需要注意,需要考慮表中的數據是否合適壓縮。如果壓縮率不好,它仍然會嘗試壓縮數,然后放棄。這將導致額外的內存資源浪費,并極大影響插入數據的速度。

未來

LZ4對TOAST的壓縮和解壓縮性能帶來了很大提升。除了LZ4,還有很多其他壓縮算法比如Zstandard。支持Zstandard用戶可以得到比PGLZ更好的壓縮率。LZ4 HC具有比LZ4解壓98.5%的壓縮速度,但是可以大幅提升壓縮率。希望未來PG版本可以使用更多的壓縮算法。

除了TOAST外,其他場景也需要壓縮。據我所知,目前開發版本已經支持WAL的LZ4壓縮,這是一項令人興奮的特性。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 算法
    +關注

    關注

    23

    文章

    4784

    瀏覽量

    98044
  • SQL
    SQL
    +關注

    關注

    1

    文章

    789

    瀏覽量

    46700
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    單片機常用的14個C語言算法分享

    n為求得的最大公約數,算法結束;否則執行(4); (4) m←n,n←r,再重復執行(2)。 例如: 求 m=“14” ,n=6 的最大公約數. m n r
    發表于 01-29 06:59

    探索HMC504LC4B:14 - 27 GHz GaAs HEMT MMIC低噪聲放大器的卓越性能

    的應用前景,適用于多種通信和測試領域: 點對點和點對多點無線電 :在無線通信系統它能有效放大微弱信號,提高通信的穩定性和可靠性。 軍事與
    的頭像 發表于 01-04 10:45 ?270次閱讀

    電能質量在線監測裝置數據壓縮對裝置性能有哪些影響?

    電能質量在線監測裝置的數據壓縮功能對性能的影響 總體可控且輕微 ,核心集中在「CPU 占用、內存消耗、存儲讀寫速度、數據傳輸延遲」四大維度,且通過廠商優化(硬件加速、算法選型、資源調度)可將負面影響
    的頭像 發表于 12-17 10:28 ?332次閱讀
    電能質量在線監測裝置數據<b class='flag-5'>壓縮</b>對裝置性<b class='flag-5'>能有</b>哪些影響?

    如何配置電能質量在線監測裝置的數據壓縮存儲功能?

    (FPGA/DSP),支持全類型數據壓縮 端裝置 (工業側):軟件壓縮 (LZ4/ZLIB),支持穩態數據和報表壓縮 經濟型裝置 (低壓
    的頭像 發表于 12-17 10:26 ?488次閱讀
    如何配置電能質量在線監測裝置的數據<b class='flag-5'>壓縮</b>存儲功能?

    電能質量在線監測裝置支持哪些數據壓縮算法

    增強。以下是主流算法的詳細支持情況: 一、無損壓縮算法(核心用于關鍵數據) 算法名稱 核心原理 適用數據類型 壓縮比 裝置支持情況 DEFL
    的頭像 發表于 12-12 14:08 ?447次閱讀
    電能質量在線監測裝置支持哪些數據<b class='flag-5'>壓縮</b><b class='flag-5'>算法</b>?

    電能質量在線監測裝置的數據壓縮存儲功能支持的數據格式可以修改嗎?

    操作性與法律效力 壓縮算法 / 容器格式 ZLIB、GZIP、ZIP、LZ4 部分可配置 廠家會提供有限選擇
    的頭像 發表于 12-11 16:39 ?1090次閱讀
    電能質量在線監測裝置的數據<b class='flag-5'>壓縮</b>存儲功能支持的數據格式可以修改嗎?

    應用于暫態波形存儲的數據壓縮算法需要考慮哪些因素?

    應用于暫態波形存儲的數據壓縮算法,需圍繞 暫態波形特性 (突變性、關鍵特征依賴性)、 工業場景需求 (實時性、硬件限制)及 數據應用價值 (故障溯源、合規性)綜合考量,核心需關注以下六大維度: 一
    的頭像 發表于 11-05 15:02 ?316次閱讀

    SM4算法實現分享(一)算法原理

    SM4分組加密算法采用的是非線性迭代結構,以字為單位進行加密、解密運算,每次迭代稱為一輪變換,每輪變換包括S盒變換、非線性變換、線性變換、合成變換。加解密算法與密鑰擴展都是采用32輪非線性迭代結構
    發表于 10-30 08:10

    SM4算法原理及分享1

    SM4算法是一種分組密碼算法。其分組長度為128bit,密鑰長度也為128bit。加密算法與密鑰擴展算法均采用32輪非線性迭代結構,以字(
    發表于 10-30 06:54

    國密系列算法簡介及SM4算法原理介紹

    在后續分享中分析AES和SM4算法的共同特點和可重構方法。 二、 SM4算法原理 圖2所示為128位輸入、128位密鑰和128位輸出的SM4
    發表于 10-24 08:25

    優化boot4的乘法運算周期

    可以在不同的時鐘周期內完成,從而并行化運算流程,提高乘法器的運算性能。 采用多級壓縮:在Boot4乘法器,使用了基于連乘算法的多級壓縮技術
    發表于 10-21 13:17

    低內存場景下的高效壓縮利器:FastLZ壓縮庫應用實踐指南

    聯網設備等場景的嚴苛需求。 FastLZ ——是一款高效且小巧的開源壓縮庫,主要用于實現基于LZ77算法的字節對齊數據壓縮LZ77(Lem
    的頭像 發表于 07-22 15:13 ?373次閱讀
    低內存場景下的高效<b class='flag-5'>壓縮</b>利器:FastLZ<b class='flag-5'>壓縮</b>庫應用實踐指南

    基于FPGA的壓縮算法加速實現

    本設計,計劃實現對文件的壓縮及解壓,同時優化壓縮中所涉及的信號處理和計算密集型功能,實現對其的加速處理。本設計的最終目標是證明在充分并行化的硬件體系結構 FPGA 上實現該算法時,可
    的頭像 發表于 07-10 11:09 ?2389次閱讀
    基于FPGA的<b class='flag-5'>壓縮</b><b class='flag-5'>算法</b>加速實現

    XAORI驍銳科技LZ-A系列激光位移傳感器LZ-AG015-R4-V-2M新品發布

    XAORI驍銳科技全新推出激光位移傳感器LZ-AG015-R4-V-2M,這款產品憑借卓越性能,為高精度位移測量領域注入新活力。它支持DC12V~DC24V±10%的電源電壓,融合RS485通信
    的頭像 發表于 06-16 10:55 ?847次閱讀
    XAORI驍銳科技<b class='flag-5'>LZ</b>-A系列激光位移傳感器<b class='flag-5'>LZ-AG015-R4</b>-V-2M新品發布

    XAORI驍銳科技LZ-A系列激光位移傳感器LZ-AC400N-R4新品發布

    XAORI驍銳科技隆重推出激光位移傳感器LZ-AC400N-R4,這是一款融合了先進激光測量技術與強大通信功能的創新產品。它支持DC12V~DC24V±10%的電源電壓,融合NPN開關量輸出
    的頭像 發表于 06-04 10:06 ?804次閱讀
    XAORI驍銳科技<b class='flag-5'>LZ</b>-A系列激光位移傳感器<b class='flag-5'>LZ-AC400N-R4</b>新品發布