本文介紹了用SysBench工具測試PolarDB for PostgreSQL 14集群的OLTP負(fù)載性能的方法,您可以按照本文介紹自行測試對比,快速了解數(shù)據(jù)庫系統(tǒng)的性能。

測試工具

SysBench是一個跨平臺且支持多線程的模塊化基準(zhǔn)測試工具,用于評估系統(tǒng)在運行高負(fù)載的數(shù)據(jù)庫時相關(guān)核心參數(shù)的性能表現(xiàn)。使用SysBench是為了繞過復(fù)雜的數(shù)據(jù)庫基準(zhǔn)設(shè)置,甚至在沒有安裝數(shù)據(jù)庫的前提下,快速了解數(shù)據(jù)庫系統(tǒng)的性能。

測試環(huán)境

  • 測試的ECS和PolarDB PostgreSQL版均在同一地域、同一可用區(qū)。
  • 網(wǎng)絡(luò)類型均為VPC網(wǎng)絡(luò)。
    說明 ECS實例和PolarDB PostgreSQL版集群需保證在同一個VPC中。
  • 測試用PolarDB PostgreSQL版集群信息如下:
    • 讀場景、寫場景以及讀寫混合場景性能測試使用的是兩節(jié)點集群(一主一只讀),同時有一個standby結(jié)點。
    • 使用的連接串為主結(jié)點地址,查看PolarDB PostgreSQL版集群地址請參見申請集群地址和主地址
  • 測試用ECS實例信息如下:
    • 實例規(guī)格為ecs.c5.4xlarge。
    • 實例所使用的鏡像為CentOS 7.6 64位。

測試場景

測試PolarDB PostgreSQL版集群(一主一只讀、一standby)的讀、寫、讀寫環(huán)境場景下的性能。

衡量指標(biāo)

TPS(Transactions Per Second):即數(shù)據(jù)庫每秒執(zhí)行的事務(wù)數(shù),以COMMIT成功次數(shù)為準(zhǔn)。

安裝SysBench

快速安裝SysBench的方法如下:
  • Debian/Ubuntu
    curl -s https://packagecloud.io/install/repositories/akopytov/sysbench/script.deb.sh | sudo bash
    sudo apt -y install sysbench
  • RHEL/CentOS
    curl -s https://packagecloud.io/install/repositories/akopytov/sysbench/script.rpm.sh | sudo bash
    sudo yum -y install sysbench
說明 更多系統(tǒng)的二進(jìn)制安裝命令,請參考sysbench的官方文檔

測試方法

說明 以下測試方法以PolarDB PostgreSQL版為例進(jìn)行說明。
  1. 連接PolarDB PostgreSQL版集群地址和端口。具體操作請參見申請集群地址和主地址
  2. 連接PolarDB PostgreSQL版集群。具體操作請參見連接數(shù)據(jù)庫集群
  3. 在ECS上執(zhí)行如下命令,以在PolarDB PostgreSQL版集群中創(chuàng)建數(shù)據(jù)庫textdb為例。
    psql -h XXX -p XXX -U XXX -W -c 'create database testdb;'
    說明 請將本命令和后續(xù)步驟命令中的XXX替換為PolarDB PostgreSQL版集群的集群地址、端口號、用戶名。
    具體參數(shù)說明如下:
    參數(shù)說明
    -hPolarDB PostgreSQL版集群的主節(jié)點地址。
    -pPolarDB PostgreSQL版集群的主節(jié)點端口。
    -UPolarDB PostgreSQL版集群的用戶名。
    -W表明強(qiáng)制使用密碼登錄。
  4. 使用SysBench測試PolarDB PostgreSQL版的性能。
    具體參數(shù)說明如下:
    參數(shù)說明
    --pgsql-passwordPolarDB PostgreSQL版集群的用戶密碼。
    --pgsql-portPolarDB PostgreSQL版集群的主結(jié)點端口。
    --pgsql-userPolarDB PostgreSQL版集群的用戶名。
    --pgsql-hostPolarDB PostgreSQL版集群的主節(jié)點地址。
    說明 具體參數(shù)請根據(jù)您所在數(shù)據(jù)庫地址、端口等進(jìn)行修改。
    • 測試PolarDB PostgreSQL版的寫場景性能。
      ## 準(zhǔn)備數(shù)據(jù)
      sysbench --pgsql-password=XXX --pgsql-port=XXX --report-interval='1' --pgsql-host=XXX --tables='8' --db-driver='pgsql' --events='0' --histogram='on' --percentile='95' --threads='256' --table-size='64000000' --time='1200' --pgsql-user=XXX --rand-type='uniform' --pgsql-db=testdb oltp_read_only prepare
      
      ## 運行 oltp_insert 測試
      sysbench --pgsql-password=XXX --pgsql-port=XXX --report-interval='1' --pgsql-host=XXX --tables='8' --db-driver='pgsql' --events='0' --histogram='on' --percentile='95' --threads='256' --table-size='64000000' --time='1200' --pgsql-user=XXX --rand-type='uniform' --pgsql-db=testdb oltp_insert run
      
      ## 運行 oltp_update_index 測試
      sysbench --pgsql-password=XXX --pgsql-port=XXX --report-interval='1' --pgsql-host=XXX --tables='8' --db-driver='pgsql' --events='0' --histogram='on' --percentile='95' --threads='256' --table-size='64000000' --time='1200' --pgsql-user=XXX --rand-type='uniform' --pgsql-db=testdb oltp_update_index run
      
      ## 運行 oltp_update_non_index 測試
      sysbench --pgsql-password=XXX --pgsql-port=XXX --report-interval='1' --pgsql-host=XXX --tables='8' --db-driver='pgsql' --events='0' --histogram='on' --percentile='95' --threads='256' --table-size='64000000' --time='1200' --pgsql-user=XXX --rand-type='uniform' --pgsql-db=testdb oltp_update_non_index run
      
      ## 運行 oltp_write_only 測試
      sysbench --pgsql-password=XXX --pgsql-port=XXX --report-interval='1' --pgsql-host=XXX --tables='8' --db-driver='pgsql' --events='0' --histogram='on' --percentile='95' --threads='256' --table-size='64000000' --time='1200' --pgsql-user=XXX --rand-type='uniform' --pgsql-db=testdb oltp_write_only run
                                      
    • 使用SysBench測試PolarDB PostgreSQL版的讀場景性能。
      ## 準(zhǔn)備數(shù)據(jù)
      sysbench --pgsql-password=XXX --pgsql-port=XXX --report-interval='1' --pgsql-host=XXX --tables='8' --db-driver='pgsql' --events='0' --histogram='on' --percentile='95' --threads='256' --table-size='64000000' --time='1200' --pgsql-user=XXX --rand-type='uniform' --pgsql-db=testdb oltp_read_only prepare
      
      ## 運行 oltp_point_select
      sysbench --pgsql-password=XXX --pgsql-port=XXX --report-interval='1' --pgsql-host=XXX --tables='8' --db-driver='pgsql' --events='0' --histogram='on' --percentile='95' --threads='256' --table-size='64000000' --time='1200' --pgsql-user=XXX --rand-type='uniform' --pgsql-db=testdb oltp_point_select run
      
      ## 運行 oltp_read_only
      sysbench --pgsql-password=XXX --pgsql-port=XXX --report-interval='1' --pgsql-host=XXX --tables='8' --db-driver='pgsql' --events='0' --histogram='on' --percentile='95' --threads='256' --table-size='64000000' --time='1200' --pgsql-user=XXX --rand-type='uniform' --pgsql-db=testdb oltp_read_only run
                                      
    • 使用SysBench測試PolarDB PostgreSQL版的讀寫混合場景性能。
      ## 準(zhǔn)備數(shù)據(jù)
      sysbench --pgsql-password=XXX --pgsql-port=XXX --report-interval='1' --pgsql-host=XXX --tables='8' --db-driver='pgsql' --events='0' --histogram='on' --percentile='95' --threads='256' --table-size='64000000' --time='1200' --pgsql-user=XXX --rand-type='uniform' --pgsql-db=testdb oltp_read_only prepare
      
      ## 運行 oltp_read_write
      sysbench --pgsql-password=XXX --pgsql-port=XXX --report-interval='1' --pgsql-host=XXX --tables='8' --db-driver='pgsql' --events='0' --histogram='on' --percentile='95' --threads='256' --table-size='64000000' --time='1200' --pgsql-user=XXX --rand-type='uniform' --pgsql-db=testdb oltp_read_write run
                                      

后續(xù)步驟