本文檔介紹以Sysbench工具測試PolarDB MySQL版叢集OLTP負載效能,您可以按照本文介紹自行測試對比,快速瞭解資料庫系統的效能。
測試載入器
Sysbench是一個開源的、跨平台的效能測試工具,主要用於資料庫基準測試(如MySQL)、 系統效能測試(如CPU、記憶體、IO、線程)。它支援多線程測試,並通過Lua指令碼靈活控制測試邏輯,適合資料庫效能評估、壓力測試等情境。
測試環境
測試的ECS和PolarDB MySQL版需均在同一地區、同一可用性區域和同一個VPC網路。
說明ECS執行個體和PolarDB MySQL版叢集需保證在同一個VPC中,確保ECS執行個體的PING延遲小於0.2ms,以保證效能評估的有效性。
測試用PolarDB MySQL版叢集如下:
唯讀、唯寫以及讀寫效能測試使用的是兩節點叢集(一主一隻讀)叢集進行測試。
使用的串連地址涉及主地址、叢集地址以及自訂地址。實際測試過程中,會根據情況靈活調整串連串的組合方式,以確保最大化利用資料庫叢集資源。
測試用ECS執行個體資訊如下:
執行個體規格為ecs.c5.4xlarge(16核32 GB)。
執行個體所使用的鏡像為CentOS 7.0 64位。
執行個體數量,根據PolarDB叢集來定,計算節點為8核時,使用一個ECS執行個體,16核規格使用2個ECS執行個體,以此類推。
PolarDB MySQL版叢集參數配置:
在進行高並發測試時,可能會出現
can't create more than max_prepared_stmt_count statements的錯誤,從而導致測試失敗。可以通過增加max_prepared_stmt_count參數來允許更多的準備語句,參數設定請參見設定叢集參數和節點參數。在大規模、高並發情境下,即便將
max_prepared_stmt_count參數調整至最大值仍可能無法滿足需求。為確保效能測試的順利進行,測試命令將額外添加--db-ps-mode=disable參數,以禁用Prepared Statement功能。對於超大規格叢集(88 核及以上),還需引入額外的參數調優,以充分發揮叢集資源,具體調優參數將根據測試頁面執行個體規格和業務情境,建議您在實施最佳化前進行充分的效能評估,並根據實際效果進行參數微調。
注意事項
本次測試始終使用tables=250和table-size=25000的資料量,threads由低到高遞增進行測試,各效能測試詳情頁只展示峰值結果。
測試情境
對不同獨享規格的一主一隻讀節點叢集的唯讀、唯寫、讀寫效能進行OLTP效能測試。
衡量指標
TPS(Transactions Per Second):即資料庫每秒執行的事務數,以COMMIT成功次數為準。
QPS(Queries Per Second):即資料庫每秒執行的SQL數(含INSERT、SELECT、UPDATE、DELETE等)。
安裝Sysbench
本文檔中的命令只能由root許可權的使用者來執行。
在ECS中執行如下命令安裝Sysbench。
git clone https://github.com/akopytov/sysbench.git ##從Git中下載Sysbench cd sysbench ##開啟Sysbench目錄 ./autogen.sh ##運行autogen.sh ./configure make -j ##編譯 make install執行如下命令配置Sysbench client,使核心可以利用所有的CPU核心數處理資料包(預設設定為2核),同時減少CPU核心數之間的環境切換。
sudo sh -c 'for x in /sys/class/net/eth0/queues/rx-*; do echo ffff>$x/rps_cpus; done'說明ffff表示使用16個核。請根據實際配置修改,例如ECS為8核,則輸入
ff,ffff為16核依次類推。sudo sh -c "echo 32768 > /proc/sys/net/core/rps_sock_flow_entries" sudo sh -c "echo 4096 > /sys/class/net/eth0/queues/rx-0/rps_flow_cnt" sudo sh -c "echo 4096 > /sys/class/net/eth0/queues/rx-1/rps_flow_cnt"
測試方法
以下測試方法中以PolarDB MySQL版叢集版為例進行說明。
擷取PolarDB MySQL版叢集地址和連接埠。具體操作請參見管理串連地址。
將PolarDB MySQL版叢集地址的主库是否接受读設定為是,具體操作請參見設定資料庫代理。
登入資料庫
在ECS上執行如下命令,以在PolarDB MySQL版叢集中建立資料庫
testdb為例。mysql -h XXX -P XXX -u XXX -p XXX -e 'create database testdb'說明請將本命令和後續步驟命令中的
XXX替換為PolarDB MySQL版叢集的叢集地址、連接埠號碼、使用者名稱和密碼,具體參數說明如下。參數
說明
-hPolarDB MySQL版叢集的叢集地址。
-PPolarDB MySQL版叢集的連接埠號碼。
-uPolarDB MySQL版叢集的使用者名稱。
-p上述使用者名稱對應的密碼。
具體情境測試命令如下:
唯讀情境測試(OLTP Read Only)
說明唯讀情境這裡--range-selects=0,相當於測試的oltp_point_selects情境。
準備資料
sysbench --db-driver=mysql --mysql-host=<host> --mysql-port=<port> --mysql-user=<user> --mysql-password=<password> --mysql-db=testdb --range-selects=0 --table_size=25000 --tables=250 --events=0 --time=600 --rand-type=uniform --threads=XXX oltp_read_only prepare執行唯讀測試
sysbench --db-driver=mysql --mysql-host=<host> --mysql-port=<port> --mysql-user=<user> --mysql-password=<password> --mysql-db=testdb --range-selects=0 --table_size=25000 --tables=250 --events=0 --time=600 --rand-type=uniform --threads=XXX oltp_read_only run清理資料
sysbench --db-driver=mysql --mysql-host=<host> --mysql-port=<port> --mysql-user=<user> --mysql-password=<password> --mysql-db=testdb --range-selects=0 --table_size=25000 --tables=250 --events=0 --time=600 --rand-type=uniform --threads=XXX oltp_read_only cleanup
測試語句欄位含義如下:
參數類別
展示內容
說明
tables
資料表數量
所有參與測試的資料表數量。
table_size
資料錶行數
展示每個表的記錄數量。
資料量大小
以儲存空間(如MB/GB)為單位展示表的資料量。
threads
並發線程數
顯示當前配置的線程數量。
線程狀態
支援即時查看線程運行狀態。
混合讀寫測試(OLTP Read Write)
說明類比典型業務讀寫混合負載。
具體的tables、table-size和threads等核心參數將在測試資料頁面中進行一對一的方式展示。
準備資料
sysbench --db-driver=mysql --mysql-host=<host> --mysql-port=<port> --mysql-user=<user> --mysql-password=<password> --mysql-db=testdb --table_size=25000 --tables=250 --events=0 --time=600 --rand-type=uniform --threads=XXX oltp_read_write prepare執行讀寫測試
sysbench --db-driver=mysql --mysql-host=<host> --mysql-port=<port> --mysql-user=<user> --mysql-password=<password> --mysql-db=testdb --table_size=25000 --tables=250 --events=0 --time=600 --rand-type=uniform --threads=XXX oltp_read_write run清理資料
sysbench --db-driver=mysql --mysql-host=<host> --mysql-port=<port> --mysql-user=<user> --mysql-password=<password> --mysql-db=testdb --table_size=25000 --tables=250 --events=0 --time=600 --rand-type=uniform --threads=XXX oltp_read_write cleanup
測試語句欄位含義如下:
參數類別
展示內容
說明
tables
資料表數量
所有參與測試的資料表數量。
table_size
資料錶行數
展示每個表的記錄數量。
資料量大小
以儲存空間(如MB/GB)為單位展示表的資料量。
threads
並發線程數
顯示當前配置的線程數量。
線程狀態
支援即時查看線程運行狀態。
寫入測試(OLTP Write Only)
說明具體的tables、table-size和threads等核心參數將在測試資料頁面中進行一對一的方式展示。
準備資料
sysbench --db-driver=mysql --mysql-host=<host> --mysql-port=<port> --mysql-user=<user> --mysql-password=<password> --mysql-db=testdb --table_size=25000 --tables=250 --events=0 --time=600 --rand-type=uniform --threads=XXX oltp_write_only prepare執行寫入測試
sysbench --db-driver=mysql --mysql-host=<host> --mysql-port=<port> --mysql-user=<user> --mysql-password=<password> --mysql-db=testdb --table_size=25000 --tables=250 --events=0 --time=600 --rand-type=uniform --threads=XXX oltp_write_only run清理資料
sysbench --db-driver=mysql --mysql-host=<host> --mysql-port=<port> --mysql-user=<user> --mysql-password=<password> --mysql-db=testdb --table_size=25000 --tables=250 --events=0 --time=600 --rand-type=uniform --threads=XXX oltp_write_only cleanup
測試語句欄位含義如下:
參數類別
展示內容
說明
tables
資料表數量
所有參與測試的資料表數量。
table_size
資料錶行數
展示每個表的記錄數量。
資料量大小
以儲存空間(如MB/GB)為單位展示表的資料量。
threads
並發線程數
顯示當前配置的線程數量。
線程狀態
支援即時查看線程運行狀態。
後續步驟
PolarDB MySQL版8.0.2版本測試結果請參見PolarDB MySQL版8.0.2版本效能(叢集版)。
PolarDB MySQL版8.0.1版本測試結果請參見PolarDB MySQL版8.0.1版本效能(叢集版)。
PolarDB MySQL版5.7版本測試結果請參見PolarDB MySQL 5.7效能(叢集版)。
PolarDB MySQL版5.6版本測試結果請參見PolarDB MySQL 5.6效能(叢集版)。
PolarDB MySQL版對比RDS MySQL測試結果請參見PolarDB MySQL版與RDS MySQL效能對比。