Kunlun-Storage vs PostgreSQL OLTP 測試

KunlunDB發表於2022-04-25

一、Kunlun-Storage 簡介

 
KunlunStorage 是澤拓科技基於Percona-mysql-8.0.26 最佳化的資料庫儲存伺服器,作為 KunlunBase 分散式資料庫的儲存節點,我們對percona-mysql 做了大量效能增強,補足了其在XA 事務處理的容災和錯誤處理方面的空白,並增加了一些崑崙資料庫叢集整體需要的功能,包括fullsync 複製,update/delete...returning 語句等。



二、測試環境

測試軟體:


  • sysbench 1.1.0-df89d34 (using bundled LuaJIT 2.1.0-beta3(AWS 雲上環境)

  • sysbench 1.0.20 (using system LuaJIT 2.1.0-beta3 (本地部署環境)


伺服器配置: 


  • Postgre SQL和Kunlun-Storage各部署在一臺:亞馬遜i3.4xlarge(CPU 8cores 16 Threads,記憶體:122G,儲存:2個1900 NVMe SSD)上(AWS 雲上環境)


  • PostgreSQL和Kunlun-Storage各部署同一臺伺服器上(CPU 16 cores 32 Threads, 記憶體: 64G,儲存:1個 NVMe SSD)上(本地部署環境)  


軟體版本:


  • Postgresql: PostgreSQL 14.2 onx86_64-pc-linux-gnu

  • Kunlun-Storage: 8.0.26-16-kunlun-storage


資料庫引數配置:


  • PostgreSQL: 

    shared_buffers = 32768MBwal_level = replicafsync = on         synchronous_commit = on       wal_sync_method = fdatasync full_page_writes = on


    • Kunlun-Storage:

      innodb_buffer_pool_size  32768MBinndo_flush_at_trx_commit=1sync_binlog=1innodb_use_fdatasync = 1

       

      測試背景: Postgre SQL和Kunlun-Storage採用預設的安裝配置,只調整了記憶體引數及上述幾個引數,整個測試過程Postgre SQL和Kunlun-Storage沒有任何最佳化行為。




      三、 測試資料

      測試軟體: 


      • sysbench 1.1.0-df89d34 (using bundled LuaJIT 2.1.0-beta3(AWS 雲上環境)

      • sysbench 1.0.20 (using system LuaJIT 2.1.0-beta3)(本地部署環境)

       

      Sysbench測試場景:

       

      場景一 :oltp_write_only


      • 每個 事務執行如下4種操作:execute_index_updates()、execute_non_index_updates()、execute_delete_inserts()

       

      場景二:oltp_update_index


      • 每個 事務執行如下1種操作:execute_index_updates()

       

      場景三:oltp_update_non_index


      • 每個事務執行如下1種操作:execute_non_index_updates()

       

      場景四:oltp_read_write.lua


      • 每個事務執行如下7種操作:execute_simple_ranges(),execute_sum_ranges()、   execute_order_ranges()、execute_distinct_ranges()、execute_index_updates()、execute_non_index_updates()、execute_delete_inserts()

       

      各個操作操作對應的SQL語句如下:

        sum_ranges = {
              "SELECT SUM(k) FROMsbtest%u WHERE id BETWEEN ? AND ?",
               t.INT, t.INT},
               
        order_ranges = {
              "SELECT c FROMsbtest%u WHERE id BETWEEN ? AND ? ORDER BY c",
               t.INT, t.INT},
               
        distinct_ranges = {
              "SELECT DISTINCT cFROM sbtest%u WHERE id BETWEEN ? AND ? ORDER BY c",
              t.INT, t.INT},
              
        index_updates = {
              "UPDATE sbtest%uSET k=k+1 WHERE id=?",
              t.INT},
              
        non_index_updates = {
              "UPDATE sbtest%uSET c=? WHERE id=?",
              {t.CHAR, 120}, t.INT},
              
        deletes = {
              "DELETE FROMsbtest%u WHERE id=?",
              t.INT},
              
        inserts = {
              "INSERT INTOsbtest%u (id, k, c, pad) VALUES (?, ?, ?, ?)",
              t.INT, t.INT, {t.CHAR,120}, {t.CHAR, 60}}

         

        測試資料量:

          --tables=18  --table-size=10000000

           

          表佔用作業系統儲存空間: 36G

           

          測試指令碼:

           

          測試的sysbench  的執行緒從64 到900 ,每個執行緒案列執行10分鐘,每個場景連續測試時間140分鐘。

           

          • Kunlun-Storage:

            
            sysbench /usr/
            local/share/sysbench/oltp_write_only.lua--db-driver=mysql --mysql-host=
            172.31.
            41.115 --mysql-port=
            6001 --mysql-user=pgx --mysql-password=pgx_pwd--mysql-db=vpgtest --tables=
            18 --table-size=
            10000000 --report-interval=
            10--threads=
            64 --
            time=
            600  run
            
             
            
            sysbench/usr/
            local/share/sysbench/oltp_update_index.lua --db-driver=mysql --mysql-host=
            172.31.
            41.115  --mysql-port=
            6001 --mysql-user=pgx--mysql-password=pgx_pwd --mysql-db=vpgtest --tables=
            18 --table-size=
            10000000--report-interval=
            10 --threads=
            64 --
            time=
            600  run 
            
            
            
            sysbench/usr/ local/share/sysbench/oltp_update_non_index.lua  --db-driver=mysql--mysql-host= 172.31. 41.115 --mysql-port= 6001 --mysql-user=pgx --mysql-password=pgx_pwd--mysql-db=vpgtest --tables= 18 --table-size= 10000000 --report-interval= 10--threads= 64 -- time= 600  run 

            Threads 變化範圍:64-128-192-......900

             

            • PostgreSQL:

              
              sysbench/usr/
              local/share/sysbench/oltp_read_write.lua --db-driver=pgsql--pgsql-host=
              172.31.
              44.208 --pgsql-port=
              5432 --pgsql-user=postgres --pgsql-password=postgres--pgsql-db=postgres --tables=
              18 --table-size=
              10000000 --report-interval=
              10--threads=
              64  --
              time=
              600 run
              
               
              
              sysbench /usr/
              local/share/sysbench/oltp_update_index.lua--db-driver=pgsql --pgsql-host=
              172.31.
              44.208 --pgsql-port=
              5432 --pgsql-user=postgres --pgsql-password=postgres--pgsql-db=postgres --tables=
              18 --table-size=
              10000000 --report-interval=
              10--threads=
              64  --
              time=
              600 run
              
              
              
              sysbench/usr/ local/share/sysbench/oltp_update_non_index.lua --db-driver=pgsql--pgsql-host= 172.31. 44.208 --pgsql-port= 5432 --pgsql-user=postgres --pgsql-password=postgres--pgsql-db=postgres --tables= 18 --table-size= 10000000 --report-interval= 10--threads= 640  -- time= 600  run

              Threads 變化範圍:64-128-192-......900




              四、  AWS 雲上環境測試結果


              • oltp_write_only  測試



                 


              Kunlun-Storage vs PostgreSQL OLTP 測試

               
               

              Kunlun-Storage vs PostgreSQL OLTP 測試

               
               

              • oltp_update_index 測試


               


              Kunlun-Storage vs PostgreSQL OLTP 測試

              Kunlun-Storage vs PostgreSQL OLTP 測試

               
               

              •  oltp_update_non_index 測試

               

              Kunlun-Storage vs PostgreSQL OLTP 測試

              Kunlun-Storage vs PostgreSQL OLTP 測試





              五、本地部署測試結果


              • oltp_write_only 測試

               


              Kunlun-Storage vs PostgreSQL OLTP 測試

                


              Kunlun-Storage vs PostgreSQL OLTP 測試

              • oltp_update_index 測試


              Kunlun-Storage vs PostgreSQL OLTP 測試

               


              Kunlun-Storage vs PostgreSQL OLTP 測試

               

              • oltp_update_non_index 測試

              Kunlun-Storage vs PostgreSQL OLTP 測試



              Kunlun-Storage vs PostgreSQL OLTP 測試

               

              • oltp_read_write 測試

               


              Kunlun-Storage vs PostgreSQL OLTP 測試

               


              Kunlun-Storage vs PostgreSQL OLTP 測試

               


              六、 測試結果及總結

              1.  在OLTP write-only、oltp -read-write和OLTP update_index場景下,Kunlun-Storage效能明顯優於PostgreSQL。


              需要強調的是,PostgreSQL只要更新任何一個索引欄位,都需要在所有索引中插入新的索引行指向新版本的資料行,此時HOTupdate無法發揮作用。


              因此,update_index的效能會大幅落後於MySQL。 


              在實際生產系統中,更新到索引列是非常常見的現象,特別是還有Vacuum帶來的IO消耗大幅增長,所以PostgreSQL的通用的寫入效能就相對較差。

               

              2.  在OLTP update_non_index場景下,PostgreSQL的tps效能高於Kunlun-Storage,但95 percent delay也高於KunlunStorage,這表明在更新的欄位不是索引欄位的場景下,由於PostgreSQL透過保持 heap頁面半空,可以實現大多數行的更新是HOT update,也就是不需要插入索引行,直接在與舊行同一個heap頁面中寫入新版本行資料即可,因此比平均的QPS比Kunlun-Storage高5%~30%。


              不過從測試結果可以看到,PostgreSQL的QPS和延時的波動比較大,因為無法做HOT update的那些更新語句的延時也會大幅提高,也就導致PostgreSQL95%延時反而比MySQL大10%到40%左右。


              由於大多數實際使用場景下是無法避免更新索引欄位的,並且即使對於不更新索引欄位的語句,HOT update也不能保證大機率發生( 只有不更新任何索引欄位並且heap頁面有足夠空間儲存那個被更新的行的新版本的時候 HOT Update 才能發生 ),因此PostgreSQL的這種效能優勢的覆蓋面過於狹窄。

               

              3.  PostgreSQL在負載動態變化過程中,有明顯的延遲抖動,而Kunlun-Storage效能曲線相對平穩.


              推薦閱讀




              -END-


              來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70011764/viewspace-2888712/,如需轉載,請註明出處,否則將追究法律責任。

              相關文章