天天看點

PostgreSQL 使用 pgbench 測試 sysbench 相關case

digoal

2016-10-31

postgresql , sysbench , pgbench

pgbench是postgresql的性能測試工具,c寫的,調用libpq,效率非常高。pgbench也支援自定義測試腳本,支援自定義随機算法,支援自定義腳本的weight設定等等,用途非常廣泛。

sysbench是一個比較流行的測試軟體架構,可測試記憶體,cpu,資料庫,存儲等。測試時調lua的腳本進行測試,支援多線程,并發測試。

相比pgbench, sysbench的效率略低,另外pgbench的功能也非常強大,是以如果能把sysbench test case遷移到pgbench,對pg的使用者來說不失為一樁美事。

題外話,pg還支援ecpg,嵌入式的開發,是以如果要測試更加複雜的場景,并且又要高效的話,可以嘗試使用ecpg。

sysbench自帶了一些lua腳本,用于測試資料庫。

<a href="https://github.com/akopytov/sysbench/tree/1.0/sysbench/tests/db">https://github.com/akopytov/sysbench/tree/1.0/sysbench/tests/db</a>

以oltp.lua為例,涉及的sql如下

都是很常見的語句,隻不過多了一個sb_rand_str函數,用于生成随機的字元。

可以使用如下c函數生成類似的随機字元。

建立了一個函數,用于生成随機數值,這個是sysbench中使用的。

安裝和測試

符合測試要求。

接下來使用select.lua作為測試對比的case

初始化

1. pgbench

測試

pgbench本身的cpu開銷

資料庫的開銷

2. sysbench

安裝軟體

<a href="https://github.com/akopytov/sysbench/blob/1.0/sysbench/tests/db/select.lua">https://github.com/akopytov/sysbench/blob/1.0/sysbench/tests/db/select.lua</a>

編輯select.lua,使用服務端綁定變量

sysbench本身的cpu開銷

sysbench自身的開銷更大,幾乎把cpu 64個核用滿了,而pgbench隻用了25%的cpu。

另一方面pgbench已經把pg資料庫的硬體資源全部用光,達到了峰值性能。

sysbench并沒有把postgresql資料庫的資源打滿,隻用了50%的硬體資源的樣子。

既然pgbench效率較好,是以簡單的講解一下pgbench的用法。

1. 自定義變量

2. 使用變量

3. 變量支援的表達式

表達式中支援的函數

4. 傳入變量

可以通過pgbench向script傳入變量,也可以使用内置的變量。

5. 随機值算法

6. 模拟程式互動式, 睡眠

7. 腳本weight

當使用多個腳本時,可以為每個腳本設定weight,即權重。如果不設定,預設為1.

詳見 man pgbench

<a href="https://www.postgresql.org/docs/9.6/static/pgbench.html">https://www.postgresql.org/docs/9.6/static/pgbench.html</a>

目前pgbench不支援動态表名,建議可以修改pgbench程式來實作動态表名,例如client_id是一個很不錯的選擇。

可以修改這個代碼來支援

pgbench如果要支援動态表名,需要調整代碼,此前,可以使用多個file來代替此功能。