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來代替此功能。