PostgreSQL11preview-pgbench變數、函式擴充套件-暨pgbench自定義benchmark講解
標籤
PostgreSQL , pgbench , 壓測 , 變數 , tpc-b , 自定義壓測
背景
pgbench是PostgreSQL軟體包中的一款benchmark軟體,純C編碼,效率高,壓測方便。
內建TPC-B benchmark測試,同時支援自定義benchmark。
詳細文件見
https://www.postgresql.org/docs/10/static/pgbench.html
pgbench 自定義benchmark指令碼支援的語法
變數賦值的語法
壓測需要生成輸入變數,才能使得壓測覆蓋更廣的資料範圍。
1、pgbench 命令列輸入變數
-D varname=value
--define=varname=value
Define a variable for use by a custom script (see below). Multiple -D options are allowed.
2、benchmark指令碼內變數,表示式的值賦予給變數
set varname express
3、pgbench 自帶的兩個變數(一個是指client id, 每個連線一個,另一個是scale factor,即pgbench -s 輸入的值。)
表示式語法
1、資料型別
INT,浮點型別
2、支援的操作符
unary operators (+, -)
binary operators (+, -, *, /, %)
括號
3、函式呼叫
睡眠語法
模擬真實環境,APP處理消耗時間,再次發起請求的間隔。
sleep number [ us | ms | s ]
shell呼叫語法1
呼叫shell並將標準輸出賦予變數,用於在測試過程中呼叫SHELL命令。
setshell varname command [ argument ... ]
setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon
shell呼叫語法2
呼叫shell並拋棄結果,用於在測試過程中呼叫SHELL命令。
shell command [ argument ... ]
shell command literal_argument :variable ::literal_starting_with_colon
生成隨機值的幾個函式
1、隨機分佈隨機數
在取值區間內,所有值的概率一致。
set varname random(min, max)
set id random(1,100000)
2、高斯分佈隨機數
set varname random_gaussian(lb, ub, parameter)
在取值區間內,
約67%的值分佈在以min,max數學期望為中心的 “1.0 / 引數” 這個區間。
約95%的值分佈在以min,max數學期望為中心的 “2.0 / 引數” 這個區間。
引數越大,鈡的曲線越陡峭
引數越小,鈡的曲線越平緩
3、指數分佈隨機數
set varname random_exponential(lb, ub, parameter)
在取值區間內,”1%” 的高頻詞,在最靠近min的區間,出現 “引數%” 次。
引數越大,越趨向生成更小的值(越靠近min,出現概率越高)。
引數越小,越趨向隨機分佈。
4、也可以使用shell呼叫生成隨機數。
1 -----------------------
setshell varname command [ argument ... ]
Sets variable varname to the result of the shell command command with the given argument(s).
The command must return an integer value through its standard output.
command and each argument can be either a text constant or a :variablename reference to a variable.
If you want to use an argument starting with a colon, write an additional colon at the beginning of argument.
Example:
setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon
2 -----------------------
shell command [ argument ... ]
Same as setshell, but the result of the command is discarded.
Example:
shell command literal_argument :variable ::literal_starting_with_colon
pgbench 例子
tpc-b benchmark 例子
1、初始化測試資料(如已有,可忽略)
-s 100 單位為10萬行,100表示1000萬行資料。
pgbench -i -s 100
2、壓測
32個連線,測試120秒。
pgbench -M prepared -n -r -P 1 -c 32 -j 32 -T 120
自定義 benchmark 例子
1、建立測試指令碼
vi test.sql
set aid random(1, 100000 * :scale)
set bid random(1, 1 * :scale)
set tid random(1, 10 * :scale)
set delta random(-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;
2、壓測
32個連線,測試120秒。
pgbench -M prepared -n -r -f ./test.sql -P 1 -c 32 -j 32 -T 120
PostgreSQL 11 preview
增加 pow 函式
https://commitfest.postgresql.org/15/1357/
增加 操作符
https://commitfest.postgresql.org/15/985/
Here is a simple patch which adds a bunch of operators :
bitwise: & | ^ ~,
comparisons: =/== <>/!= < <= > >=,
logical: and/&& or/|| xor/^^ not/!
functions (exp ln if)
to pgbench. I`ve tried to be pg`s SQL compatible
where appropriate.
參考
《PostgreSQL 使用 pgbench 測試 sysbench 相關case》
《PostgreSQL pgbench SQL RT 與 事務RT 淺析》
其他例子
《HTAP資料庫 PostgreSQL 場景與效能測試之 43 – (OLTP+OLAP) unlogged table 含索引多表批量寫入》
《HTAP資料庫 PostgreSQL 場景與效能測試之 42 – (OLTP+OLAP) unlogged table 不含索引多表批量寫入》
《HTAP資料庫 PostgreSQL 場景與效能測試之 41 – (OLTP+OLAP) 含索引多表批量寫入》
《HTAP資料庫 PostgreSQL 場景與效能測試之 40 – (OLTP+OLAP) 不含索引多表批量寫入》
《HTAP資料庫 PostgreSQL 場景與效能測試之 39 – (OLTP+OLAP) 含索引多表單點寫入》
《HTAP資料庫 PostgreSQL 場景與效能測試之 38 – (OLTP+OLAP) 不含索引多表單點寫入》
《HTAP資料庫 PostgreSQL 場景與效能測試之 37 – (OLTP+OLAP) 含索引單表批量寫入》
《HTAP資料庫 PostgreSQL 場景與效能測試之 36 – (OLTP+OLAP) 不含索引單表批量寫入》
《HTAP資料庫 PostgreSQL 場景與效能測試之 35 – (OLTP+OLAP) 含索引單表單點寫入》
《HTAP資料庫 PostgreSQL 場景與效能測試之 34 – (OLTP+OLAP) 不含索引單表單點寫入》
《HTAP資料庫 PostgreSQL 場景與效能測試之 33 – (OLAP) 物聯網 – 線性欄位區間實時統計》
《HTAP資料庫 PostgreSQL 場景與效能測試之 32 – (OLTP) 高吞吐資料進出(堆存、行掃、無需索引) – 閱後即焚(JSON + 函式流式計算)》
《HTAP資料庫 PostgreSQL 場景與效能測試之 31 – (OLTP) 高吞吐資料進出(堆存、行掃、無需索引) – 閱後即焚(讀寫大吞吐並測)》
《HTAP資料庫 PostgreSQL 場景與效能測試之 30 – (OLTP) 秒殺 – 高併發單點更新》
《HTAP資料庫 PostgreSQL 場景與效能測試之 29 – (OLTP) 高併發空間位置更新(含空間索引)》
《HTAP資料庫 PostgreSQL 場景與效能測試之 28 – (OLTP) 高併發點更新》
《HTAP資料庫 PostgreSQL 場景與效能測試之 27 – (OLTP) 物聯網 – FEED日誌, 流式處理 與 閱後即焚 (CTE)》
《HTAP資料庫 PostgreSQL 場景與效能測試之 26 – (OLTP) NOT IN、NOT EXISTS 查詢》
《HTAP資料庫 PostgreSQL 場景與效能測試之 25 – (OLTP) IN , EXISTS 查詢》
《HTAP資料庫 PostgreSQL 場景與效能測試之 24 – (OLTP) 物聯網 – 時序資料併發寫入(含時序索引BRIN)》
《HTAP資料庫 PostgreSQL 場景與效能測試之 23 – (OLAP) 平行計算》
《HTAP資料庫 PostgreSQL 場景與效能測試之 22 – (OLTP) merge insert|upsert|insert on conflict|合併寫入》
《HTAP資料庫 PostgreSQL 場景與效能測試之 21 – (OLTP+OLAP) 排序、建索引》
《HTAP資料庫 PostgreSQL 場景與效能測試之 20 – (OLAP) 使用者畫像圈人場景 – 多個欄位任意組合條件篩選與透視》
《HTAP資料庫 PostgreSQL 場景與效能測試之 19 – (OLAP) 使用者畫像圈人場景 – 陣列相交查詢與聚合》
《HTAP資料庫 PostgreSQL 場景與效能測試之 18 – (OLAP) 使用者畫像圈人場景 – 陣列包含查詢與聚合》
《HTAP資料庫 PostgreSQL 場景與效能測試之 17 – (OLTP) 陣列相似查詢》
《HTAP資料庫 PostgreSQL 場景與效能測試之 16 – (OLTP) 文字特徵向量 – 相似特徵(海明…)查詢》
《HTAP資料庫 PostgreSQL 場景與效能測試之 15 – (OLTP) 物聯網 – 查詢一個時序區間的資料》
《HTAP資料庫 PostgreSQL 場景與效能測試之 14 – (OLTP) 字串搜尋 – 全文檢索》
《HTAP資料庫 PostgreSQL 場景與效能測試之 13 – (OLTP) 字串搜尋 – 相似查詢》
《HTAP資料庫 PostgreSQL 場景與效能測試之 12 – (OLTP) 字串搜尋 – 前後模糊查詢》
《HTAP資料庫 PostgreSQL 場景與效能測試之 11 – (OLTP) 字串搜尋 – 字尾查詢》
《HTAP資料庫 PostgreSQL 場景與效能測試之 10 – (OLTP) 字串搜尋 – 字首查詢》
《HTAP資料庫 PostgreSQL 場景與效能測試之 9 – (OLTP) 字串模糊查詢 – 含索引實時寫入》
《HTAP資料庫 PostgreSQL 場景與效能測試之 8 – (OLTP) 多值型別(陣列)含索引實時寫入》
《HTAP資料庫 PostgreSQL 場景與效能測試之 7 – (OLTP) 全文檢索 – 含索引實時寫入》
《HTAP資料庫 PostgreSQL 場景與效能測試之 6 – (OLTP) 空間應用 – KNN查詢(搜尋附近物件,由近到遠排序輸出)》
《HTAP資料庫 PostgreSQL 場景與效能測試之 5 – (OLTP) 空間應用 – 空間包含查詢》
《HTAP資料庫 PostgreSQL 場景與效能測試之 4 – (OLAP) 大表OUTER JOIN統計查詢》
《HTAP資料庫 PostgreSQL 場景與效能測試之 3 – (OLAP) 大表JOIN統計查詢》
《HTAP資料庫 PostgreSQL 場景與效能測試之 2 – (OLTP) 多表JOIN》
《HTAP資料庫 PostgreSQL 場景與效能測試之 1 – (OLTP) 點查》
相關文章
- HIVE自定義函式的擴充套件Hive函式套件
- JMeter擴充套件開發:自定義函式JMeter套件函式
- kotlin 擴充套件(擴充套件函式和擴充套件屬性)Kotlin套件函式
- 【Kotlin】擴充套件屬性、擴充套件函式Kotlin套件函式
- [原]JUnit 自定義擴充套件思路套件
- Kotlin擴充套件函式Kotlin套件函式
- Z 函式(擴充套件KMP)函式套件KMP
- 擴充套件WCF自定義行為(二)套件
- 基於shiro的自定義註解的擴充套件套件
- 使用Kotlin擴充套件函式擴充套件Spring Data案例Kotlin套件函式Spring
- JMeter 擴充套件開發:自定義 Java SamplerJMeter套件Java
- es6-函式擴充套件函式套件
- spring4.1.8擴充套件實戰之一:自定義環境變數驗證Spring套件變數
- Android自定義字型--自定義TextView(可擴充套件不同ttf字Android自定義字型TextView套件
- django實現自定義manage命令的擴充套件Django套件
- 自定義擴充套件jQuery功能簡單介紹套件jQuery
- Kotlin-常用擴充套件函式Kotlin套件函式
- Kotlin基礎 — 擴充套件函式Kotlin套件函式
- MySQL使用自定義變數模擬分析函式MySql變數函式
- 程式碼演示Mybatis-Generator 擴充套件自定義生成MyBatis套件
- tep0.9.5支援自定義擴充套件request套件
- ES6之函式的擴充套件函式套件
- PHP的Sodium加密擴充套件函式了解PHP加密套件函式
- Kotlin的幾個擴充套件函式Kotlin套件函式
- PHP的SPL擴充套件庫(四)函式PHP套件函式
- 開發函式計算的正確姿勢———為 PHP 執行時新增自定義擴充套件函式PHP套件
- 擴充套件表示式套件
- .Net Core AutoMapper自定義擴充套件方法的使用APP套件
- day88-ElasticSearch-分詞- 自定義擴充套件詞庫Elasticsearch分詞套件
- DcatAdmin 擴充套件: 自定義表單(動態表單)套件
- Swift 小貼士:語言的擴充套件和自定義Swift套件
- node-exporter 擴充套件用法 – shell 自定義 exporter 監控Export套件
- PHP的Mhash擴充套件函式的學習PHP套件函式
- 寫擴充套件性好的程式碼:函式套件函式
- Kotlin委託 & 擴充套件 & 高階函式Kotlin套件函式
- 編寫自己的php擴充套件函式 (轉)PHP套件函式
- 尤拉函式、整除分塊和擴充套件歐幾里得函式套件
- AbpVnext使用分散式IDistributedCache Redis快取(自定義擴充套件方法)分散式Redis快取套件