本文介紹了用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 sysbenchRHEL/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的官方文檔。
測試方法
測試環境準備
將ECS執行個體地址添加到PolarDB叢集白名單中,詳細步驟請參考設定叢集白名單。
建立賬戶,詳細操作請參考建立資料庫帳號。建議建立高許可權賬戶。
在控制台建立測試資料庫
testdb,資料庫Owner使用上一步建立的賬戶,詳細步驟請參考建立資料庫。擷取叢集主地址,詳細操作請參考查看或申請串連地址。
使用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分鐘。
資料準備。
## 清理資料 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不同情境測試。
讀寫混合情境測試。
## 運行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參數設定。您可以通過以下兩種方式中的任一種確認當前系統配置的最大串連數:
控制台查看。
登入PolarDB控制台,選擇叢集所在地區,在叢集列表中單擊目的地組群ID進入詳情頁。
在基本資料頁的資料庫節點地區,單擊右上方
表徵圖切換視圖,查看預設最大串連數列。
命令列查看。
SHOW max_connections;
IOBound和CPUBound測試
IOBound測試:確認IO密集型情境下的資料庫效能
CPUBound測試:確認CPU密集型情境下的資料庫效能。
如下測試資料量均以8核64 GB規格的PolarDB為例:
後續步驟
PolarDB PostgreSQL版與同類PostgreSQL資料庫14版本的效能對比請參考與同類PostgreSQL雲原生資料庫效能對比。
PolarDB PostgreSQL版與開源PostgreSQL引擎14版本的效能對比請參考與開源PostgreSQL效能對比。