全部產品
Search
文件中心

PolarDB:效能測試方法(OLTP)

更新時間:Jan 17, 2025

本文介紹了用SysBench工具測試PolarDB PostgreSQL版 14叢集的OLTP負載效能的方法,您可以按照本文介紹自行測試對比,快速瞭解資料庫系統的效能。

測試載入器

SysBench是一個跨平台且支援多線程的模組化基準測試載入器,用於評估系統在運行高負載的資料庫時相關核心參數的效能表現。使用SysBench是為了繞過複雜的資料庫基準設定,甚至在沒有安裝資料庫的前提下,快速瞭解資料庫系統的效能。

測試環境

  • 測試的ECS和PolarDB PostgreSQL版均在同一地區、同一可用性區域。

  • 網路類型均為VPC網路。

    說明

    ECS執行個體和PolarDB PostgreSQL版叢集需保證在同一個VPC中。

  • 測試用PolarDB PostgreSQL版叢集資訊如下:

    • 讀情境、寫情境以及讀寫混合情境效能測試使用的是兩節點叢集(一主一隻讀),同時有一個Standby節點。

    • 使用的串連串為叢集主地址,查看PolarDB PostgreSQL版叢集地址請參見申請叢集地址和主地址

  • 測試用ECS執行個體資訊如下:

    • 執行個體規格為ecs.c5.4xlarge。

    • 執行個體所使用的鏡像為CentOS 7.6 64位。

測試情境

測試PolarDB PostgreSQL版 14叢集(一主一隻讀、一Standby)的讀、寫、讀寫環境情境下的效能。

衡量指標

TPS(Transactions Per Second):即資料庫每秒執行的事務數,以COMMIT成功次數為準。

安裝SysBench

  • 快速安裝SysBench的方法如下:

    • Debian/Ubuntu

      sudo apt -y install sysbench
    • RHEL/CentOS

      sudo yum -y install sysbench
  • 源碼安裝命令:

    僅以RHEL/CentOS為例,需採用root許可權安裝:

    ## 安裝相關依賴包
    yum -y install make automake libtool pkgconfig libaio-devel git
    
    ## 安裝MySQL的相關依賴支援
    yum -y install mariadb-devel openssl-devel
    
    ## 安裝PostgreSQL的依賴支援
    yum -y install postgresql-devel
    
    ## 從Git中下載SysBench
    git clone https://github.com/akopytov/sysbench.git
    
    ## 開啟sysbench目錄
    cd sysbench
    
    ## 運行autogen.sh
    ./autogen.sh
    
    ## 進行配置,並且增加PostgreSQL的測試支援
    ./configure --with-pgsql
    
    ## 構建
    make -j
    
    ## 安裝
    make install

    通過如下Shell命令校正,返回結果中出現pgsql option則表示安裝成功。

    sysbench --help

    返回的pgsql option如下:

    說明

    在低版本sysbench,pgsql options中的--pgsql-sslmode可能不存在,不影響測試,無需關注。

    pgsql options:
      --pgsql-host=STRING     PostgreSQL server host [localhost]
      --pgsql-port=N          PostgreSQL server port [5432]
      --pgsql-user=STRING     PostgreSQL user [sbtest]
      --pgsql-password=STRING PostgreSQL password []
      --pgsql-db=STRING       PostgreSQL database name [sbtest]
      --pgsql-sslmode=STRING  PostgreSQL SSL mode (disable, allow, prefer, require, verify-ca, verify-full) [prefer]
說明

更多系統的二進位安裝命令,請參考SysBench的官方文檔

測試方法

測試環境準備

  1. 將ECS執行個體地址添加到PolarDB叢集白名單中,詳細步驟請參考設定叢集白名單

  2. 建立賬戶,詳細操作請參考建立資料庫帳號。建議建立高許可權賬戶。

  3. 在控制台建立測試資料庫testdb資料庫Owner使用上一步建立的賬戶,詳細步驟請參考建立資料庫

  4. 擷取叢集主地址,詳細操作請參考查看或申請串連地址

  5. 使用SysBench測試PolarDB PostgreSQL版的效能。

    具體參數說明如下:

    說明

    具體參數值請根據您的叢集地址、連接埠等進行修改。

    參數

    說明

    --pgsql-user

    PolarDB PostgreSQL版叢集的帳號名。

    --pgsql-password

    PolarDB PostgreSQL版叢集的帳號密碼。

    --pgsql-host

    PolarDB PostgreSQL版叢集主地址。

    --pgsql-port

    PolarDB PostgreSQL版叢集主地址連接埠。

快速測試

說明
  • 在快速測試中,匯入8張測試表,每張表為25萬行資料,預計資料量為1 GB。

  • 並發數設定為256,單個情境測試期間為5分鐘。

  1. 資料準備。

    ## 清理資料
    sysbench --pgsql-user=XXX --pgsql-password=XXX --pgsql-host=XXX --pgsql-port=XXX --report-interval='1' --tables='8' --db-driver='pgsql' --events='0' --histogram='on' --percentile='95' --threads='256' --table-size='500000' --time='300' --rand-type='uniform' --pgsql-db=testdb oltp_insert cleanup
    ## 匯入資料
    sysbench --pgsql-user=XXX --pgsql-password=XXX --pgsql-host=XXX --pgsql-port=XXX --report-interval='1' --tables='8' --db-driver='pgsql' --events='0' --histogram='on' --percentile='95' --threads='256' --table-size='500000' --time='300' --rand-type='uniform' --pgsql-db=testdb oltp_insert prepare
  2. 不同情境測試。

    • 讀寫混合情境測試。

      ## 運行oltp_read_write測試
      sysbench --pgsql-user=XXX --pgsql-password=XXX --pgsql-host=XXX --pgsql-port=XXX --report-interval='1' --tables='8' --db-driver='pgsql' --events='0' --histogram='on' --percentile='95' --threads='256' --table-size='500000' --time='300' --rand-type='uniform' --pgsql-db=testdb oltp_read_write run
    • 寫入情境測試,以下為3個情境,各自執行時間5分鐘,總計15分鐘。

      • 運行oltp_update_index測試。

        sysbench --pgsql-user=XXX --pgsql-password=XXX --pgsql-host=XXX --pgsql-port=XXX --report-interval='1' --tables='8' --db-driver='pgsql' --events='0' --histogram='on' --percentile='95' --threads='256' --table-size='500000' --time='300' --rand-type='uniform' --pgsql-db=testdb oltp_update_index run
      • 運行oltp_update_non_index測試。

        sysbench --pgsql-user=XXX --pgsql-password=XXX --pgsql-host=XXX --pgsql-port=XXX --report-interval='1' --tables='8' --db-driver='pgsql' --events='0' --histogram='on' --percentile='95' --threads='256' --table-size='500000' --time='300' --rand-type='uniform' --pgsql-db=testdb oltp_update_non_index run
      • 運行oltp_write_only測試。

        sysbench --pgsql-user=XXX --pgsql-password=XXX --pgsql-host=XXX --pgsql-port=XXX --report-interval='1' --tables='8' --db-driver='pgsql' --events='0' --histogram='on' --percentile='95' --threads='256' --table-size='500000' --time='300' --rand-type='uniform' --pgsql-db=testdb oltp_write_only run
    • 讀取情境測試,以下為2個情境,各自執行時間5分鐘,總計10分鐘。

      • 運行oltp_point_select測試。

        sysbench --pgsql-user=XXX --pgsql-password=XXX --pgsql-host=XXX --pgsql-port=XXX --report-interval='1' --tables='8' --db-driver='pgsql' --events='0' --histogram='on' --percentile='95' --threads='256' --table-size='500000' --time='300' --rand-type='uniform' --pgsql-db=testdb oltp_point_select run
      • 運行oltp_read_only測試。

        sysbench --pgsql-user=XXX --pgsql-password=XXX --pgsql-host=XXX --pgsql-port=XXX --report-interval='1' --tables='8' --db-driver='pgsql' --events='0' --histogram='on' --percentile='95' --threads='256' --table-size='500000' --time='300' --rand-type='uniform' --pgsql-db=testdb oltp_read_only run
說明

當前並發數設定為256,如您在進行相關測試時遇到類似connection creation failed報錯,可根據叢集節點規格的最大串連數調整threads參數設定。您可以通過以下兩種方式中的任一種確認當前系統配置的最大串連數:

  • 控制台查看。

    1. 登入PolarDB控制台,選擇叢集所在地區,在叢集列表中單擊目的地組群ID進入詳情頁。

    2. 基本資料頁的資料庫節點地區,單擊右上方表徵圖表徵圖切換視圖,查看預設最大串連數列。

  • 命令列查看。

    SHOW max_connections;

IOBound和CPUBound測試

  • IOBound測試:確認IO密集型情境下的資料庫效能

  • CPUBound測試:確認CPU密集型情境下的資料庫效能。

如下測試資料量均以8核64 GB規格的PolarDB為例:

  • IOBound測試通常要求測試資料量為buffer pool的兩倍,相關SysBench參數需修改為如下配置(其餘參數與快速測試中情境測試語句一致):

    SysBench參數

    含義

    --tables

    表數量

    8

    --table-size

    錶行數

    64000000

  • CPUBound測試通常要求測試資料量為buffer pool的一半,相關SysBench參數需修改為如下配置(其餘參數與快速測試中情境測試語句一致):

    SysBench參數

    含義

    --tables

    表數量

    8

    --table-size

    錶行數

    12000000

後續步驟