Apache JMeter 不僅能壓測 HTTP,透過 JDBC 組件可直接對資料庫執行 SQL、預備語句、呼叫預存程序,模擬真實業務負載。本文記錄從下載驅動、配置連線池、編寫取樣器、查看結果的完整流程。
mysql-connector-java-x.x.xx.jar(官方或 Maven 中央倉庫)。<JMeter_Home>/lib/(推薦)或 /lib/ext/。


myDB(自定義,供取樣器引用)。jdbc:mysql://192.168.1.141:3306/bugfree?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghaicom.mysql.cj.jdbc.Driver (8.0+) 或 com.mysql.jdbc.Driver (5.1)。True(單條 SQL),事務測試設 False 並搭配 Transaction Controller。

myDB)。Select Statement / Update Statement / Callable Statement / Prepared Statement / Prepared Select Statement。? 佔位符(Prepared 類型時)。? 的值與 JDBC 類型(如 VARCHAR, INTEGER),可引用 JMeter 變數 ${var} 或函數 __Random。dbResult),供後置處理器(JSON Extractor、正則)解析斷言。
| 場景 | 實現 |
|---|---|
| 參數化壓測(不同用戶、不同 ID) | CSV Data Set Config 讀取資料檔 → 變數 ${userId} → SQL SELECT * FROM t WHERE id = ? 參數綁定 ${userId} |
| 事務測試(轉帳、扣庫存) | Transaction Controller 包裹多個 JDBC Request,連線池 Auto Commit=False,最後加 Commit / Rollback 取樣器 |
| 預存程序呼叫 | Query Type = Callable Statement,SQL = {call proc_name(?, ?)} |
| 連線洩漏排查 | 添加 tearDown Thread Group 執行 SELECT COUNT(*) FROM information_schema.processlist WHERE USER='test' 驗證連線釋放 |
No suitable driver:jar 未放入 lib/ 或未重啟 JMeter。Communications link failure:URL/IP/Port/防火牆/skip-name-resolve。Public Key Retrieval is not allowed:URL 加 allowPublicKeyRetrieval=true(8.0+)。Maximum pool size exceeded:線程數 > 連線池 Max Connections,調大或限制線程。JMeter + JDBC 讓資料庫壓測脫離應用程式代碼,直擊 SQL 層效能瓶頸,是性能基線測試、新索引驗證、鎖競爭複現的利器。