天天看點

AnalyticDB for PostgreSQL TPC-B性能測試1 前言2 TPC-B簡介3 測試環境4 測試結果5 如何使用pgbench進行ADBPG的TPC-B測試

1 前言

AnalyticDB for PostgreSQL 6.0 (簡稱ADBPG6.0)在事務處理性能上相比上個版本ADBPG4.3有了質的飛躍,本文将以TPC-B業界标準事務性能測試benchmark來展示ADBPG6.0在事務上的處理能力。

2 TPC-B簡介

TPC-B是由TPC(Transaction Processing Performance Council,事務處理性能委員會)提供的benchmark,主要用于衡量一個系統每秒能夠處理的并發事務數。TPC-B不像TPC-C那樣模拟了現實生活中一個具體的交易場景,其中的事務都是由簡單SQL構成的沒有語義的事務(事務中混雜了大表與小表的插入、更新與查詢操作),而且每個client的請求間也不會像TPC-C那樣會有一個human think time的間隔時間,而是一旦前一個事務執行完成,立馬會有下一個事務請求發出。是以,TPC-B經常用于對資料庫系統的事務性能壓測。

TPC-B性能的衡量名額是每秒處理的事務數量,即TPS(Transactions per Second)。

3 測試環境

3.1 測試資料

使用PostgreSQL提供的開源工具pgbench來生成TPC-B的測試資料,填充因子為100,比例因子為11424。是以,最後TPC-B各個表的資料量如下:

表名 資料量(行數)
pgbench_accounts 1142400000
pgbench_branches 11424
pgbench_history
pgbench_tellers 114240

3.2 測試叢集

測試的ADBPG6.0叢集由16個計算節點,每個計算節點有4個CPU核,32GB記憶體,存儲類型為高性能SSD,具體規格選用參考:

https://help.aliyun.com/document_detail/35406.html?spm=a2c4g.11174283.6.548.146c7605Xo9w3A

另外在同一個域裡面建了一個ECS(放在與ADBPG執行個體相同的VPC中),在上面運作pgbench工具來生成TPC-B負載,向ADBPG發送請求。

3.3 叢集配置參數

需要擷取極緻的TP性能,需要對一下參數進行修改。其中有些參數使用者無法自行設定,請聯系ADBPG值班人員進行修改。

參數 說明
set optimizer = off 關閉ADBPG針對AP場景的orca優化器,對TP性能更友好。
set shared_buffers = 8GB

将ADBPG的資料共享緩存調大。

修改該參數需要重新開機執行個體。

set wal_buffers = 256MB 将ADBPG的WAL日志緩存調大。
set log_statement = none 将日志輸出關閉。
set random_page_cost = 10 将随機通路代價開銷調小,有利于查詢走索引。

set gp_resqueue_priority = off

set resource_scheduler = off 

将ADBPG的resource queue關閉。

需要重新開機執行個體

4 測試結果

測試在不同并發度情況下,ADBPG6.0的性能結果,結果如下圖所示,其中橫坐标代表不同的并發數,縱坐标代表測試性能(機關為TPS,transactions per second)。除了對ADBPG的TPC-B的性能測試之外,還使用pgbench對隻讀、隻更新和隻插入進行了測試。從下面的測試性能結果圖中可以看出,ADBPG的TPC-B峰值性能可以達到 5923.833804 TPS,隻讀峰值性能為 150084.180541 TPS, 隻更新峰值性能為31023.373105 TPS,隻插入的峰值性能為60367.182157TPS。

  • TPC-B性能
AnalyticDB for PostgreSQL TPC-B性能測試1 前言2 TPC-B簡介3 測試環境4 測試結果5 如何使用pgbench進行ADBPG的TPC-B測試
  • 隻讀性能
AnalyticDB for PostgreSQL TPC-B性能測試1 前言2 TPC-B簡介3 測試環境4 測試結果5 如何使用pgbench進行ADBPG的TPC-B測試
  • 隻更新性能
AnalyticDB for PostgreSQL TPC-B性能測試1 前言2 TPC-B簡介3 測試環境4 測試結果5 如何使用pgbench進行ADBPG的TPC-B測試
  • 隻插入性能
AnalyticDB for PostgreSQL TPC-B性能測試1 前言2 TPC-B簡介3 測試環境4 測試結果5 如何使用pgbench進行ADBPG的TPC-B測試

5 如何使用pgbench進行ADBPG的TPC-B測試

5.1 工具下載下傳安裝

有兩種方式對pgbench工具進行安裝:

  1. 源碼安裝:下載下傳開源資料庫PostgreSQL源碼,然後到pgbench對應的目錄中單獨對pgbench進行編譯生成可執行的二進制檔案。
  2. 二進制安裝:可以先直接yum install postgresql-server來安裝PostgreSQL程式,此過程會自動安裝pgbench工具。

5.2 資料生成加載

執行如下指令,會自動将資料生成加載到ADBPG執行個體中

# 其中-F參數就是上文說的裝填因子,-s值得是比例因子
./pgbench -i -F 100 -s 11424 -p port -h con_addr -U user_name db_name           

5.3 執行測試

  • 執行TPC-B負載
# -c指定了連接配接資料庫client數量,-j指定了建立連接配接使用的線程數量,推薦将兩者設定成一樣
# -T指定了測試執行時間,機關為秒
./pgbench -h con_addr -p port -r -n -c 96 -j 96 -T 120 -f all.sql -U user_name db_name           

其中all.sql為TPC-B負載,其内容如下:

\set scale 11424
\set nbranches 1 * :scale
\set ntellers 10 * :scale
\set naccounts 100000 * :scale
\setrandom aid 1 :naccounts
\setrandom bid 1 :nbranches
\setrandom tid 1 :ntellers
\setrandom delta -5000 5000

BEGIN;
 UPDATE pgbench_accounts SET abalance = abalance + :delta WHERE aid = :aid;
 SELECT abalance FROM pgbench_accounts WHERE aid = :aid;
 UPDATE pgbench_tellers SET tbalance = tbalance + :delta WHERE tid = :tid;
 UPDATE pgbench_branches SET bbalance = bbalance + :delta WHERE bid = :bid;
 INSERT INTO pgbench_history (tid, bid, aid, delta, mtime) VALUES (:tid, :bid, :aid, :delta, CURRENT_TIMESTAMP);
END;           
  • 執行隻讀負載
# -c指定了連接配接資料庫client數量,-j指定了建立連接配接使用的線程數量,推薦将兩者設定成一樣
# -T指定了測試執行時間,機關為秒
./pgbench -h con_addr -p port -r -n -c 96 -j 96 -T 120 -f select.sql -U user_name db_name           

其中select.sql為隻讀負載,其内容如下:

\set scale 11424
--\set scale 1
\set naccounts 100000 * :scale
\setrandom aid 1 :naccounts

SELECT abalance FROM pgbench_accounts WHERE aid = :aid;
           
  • 執行隻更新負載
# -c指定了連接配接資料庫client數量,-j指定了建立連接配接使用的線程數量,推薦将兩者設定成一樣
# -T指定了測試執行時間,機關為秒
./pgbench -h con_addr -p port -r -n -c 96 -j 96 -T 120 -f update.sql -U user_name db_name           

其中update.sql為隻更新負載,其内容如下:

\set scale 11424
\set naccounts 100000 * :scale
\setrandom aid 1 :naccounts
\setrandom delta -5000 5000

UPDATE pgbench_accounts SET abalance = abalance + :delta WHERE aid = :aid;           
  • 執行隻插入負載
# -c指定了連接配接資料庫client數量,-j指定了建立連接配接使用的線程數量,推薦将兩者設定成一樣
# -T指定了測試執行時間,機關為秒
./pgbench -h con_addr -p port -r -n -c 96 -j 96 -T 120 -f insert.sql -U user_name db_name           

其中insert.sql為隻插入負載,其内容如下:

\set scale 11424
\set nbranches 1 * :scale
\set ntellers 10 * :scale
\set naccounts 100000 * :scale
\setrandom aid 1 :naccounts
\setrandom bid 1 :nbranches
\setrandom tid 1 :ntellers
\setrandom delta -5000 5000

INSERT INTO pgbench_history (tid, bid, aid, delta, mtime) VALUES (:tid, :bid, :aid, :delta, CURRENT_TIMESTAMP);