1.網絡請求時間
2.數據庫查詢的時間
數據庫性能指標
TPS:每秒事務數(一秒鍾服務器處理的事務數,事務指,請求出去到響應回來的整個過程的時間)
QPS:每秒查詢量(就是數據庫每秒執行的SQL數量,包含insert/select/update/delete)
連接數(連接數是否釋放)
查詢緩存(不進行select,直接從緩存拿數據,緩存機制可以設置)
事務數的計算:Com_commit 提交次數(成功的事務) Com_rollback回滾次數(失敗的事務)相加
QPS的計算 Questions / Uptime 即可得到的該指標的值
QPS查詢:mysql>show global status like 'Questions';
mysql>show global status like 'Uptime'
數據庫容易出現的問題:
1.連接池容易爆掉
2.慢查詢
Jmeter需要一個插件才能連接數據庫,一個mysql-connector-java-5.1.7-bin.jar包,放在apache-jmeter-4.0>lib>ext下即可
連接數據庫第一步:
1.“添加”-》“配置元件”-》“JDBC Connection Configuration”
QPS(Queries Per Second,每秒查詢數)
TPS(Transactions Per Second,每秒處理事務數)
通過show status命令查看數據庫運行狀態,會有300多條狀態信息記錄,其中有幾個值幫可以我們計算出QPS和TPS,如下:
Uptime:服務器已經運行的時間,單位秒
Questions:已經發送給數據庫查詢數
Com_select:查詢次數,實際操作數據庫的
Com_insert:插入次數
Com_delete:刪除次數
Com_update:更新次數
Com_commit:事務次數
Com_rollback:回滾次數
計算方法:
1、基於Questions計算出QPS
mysql> show global status like 'Questions';
mysql> show global status like 'Uptime';
QPS = Questions / Uptime
2、基於Com_commit和Com_rollback計算出TPS:
mysql> show global status like 'Com_commit';
mysql> show global status like 'Com_rollback';
mysql> show global status like 'Uptime';
TPS = (Com_commit + Com_rollback) / Uptime
3、另一種QPS計算方式:
基於Com_select、Com_insert、Com_delete、Com_update計算出QPS:
mysql> show global status where Variable_name in('com_select','com_insert','com_delete','com_update');
等待1秒再執行,獲取間隔差值,第二次每個變量值減去第一次對應的變量值,就是QPS。
4、另一種TPS計算方式:
mysql> show global status where Variable_name in('com_insert','com_delete','com_update');
計算TPS,就不算查詢操作了,計算出插入、刪除、更新四個值即可。
配置JDBC Request:
1、重要參數說明:
Variable Name:數據庫連接池的名字,需要與JDBC Connection Configuration的Variable Name Bound Pool名字保持一致
Query:填寫的sql語句未尾不要加“;”
Parameter valus:參數值
Parameter types:參數類型,可參考:Javadoc for java.sql.Types
Variable names:保存sql語句返回結果的變量名
Result variable name:創建一個對象變量,保存所有返回的結果
Query timeout:查詢超時時間
Handle result set:定義如何處理由callable statements語句返回的結果
配置JDBC Connection Configuration
(1) Variable Name Bound to Pool
Variable Name, 創建池的變量名 。這個變量在后面介紹的 JDBC Request 請求中用到。
(2) Connection Pool Configuration
Max Number of Connections 池中允許的最大連接數。在大多數情況下,將其設置為零(0),這意味着每個線程都將擁有自己的池,其中只有一個連接,即線程之間不共享連接。如果您真的想使用共享池,那么將 max count 設置為與線程數量相同,以確保線程不會彼此等待。
Max Wait (ms) 在連接池中取回連接最大等待時間
中文:如果在試圖檢索連接過程中(取回連接)超過所設置期限,連接池拋出一個錯誤
Time Between Eviction Runs (ms) 疏散時間
中文:在空閑對象驅逐線程運行期間,可以休眠的毫秒數。當非正值時,將運行無空閑對象驅逐器線程。(默認為“60000”,1分鍾)(如果當前連接池中某個連接在空閑了time Between Eviction Runs Millis時間后任然沒有使用,則被物理性的關閉掉。)
Auto Commit 自動提交sql語句
中文:打開或關閉連接的自動提交。
原文:Turn auto commit on or off for the connections.
(3) Connection Validation by Pool
這是Jmeter用來檢驗數據庫連接是否有效的一種機制,超過5秒沒有使用的話,就會用validation query去測試下這個連接是否有效
Test While Idle 當空閑的時候測試連接是否斷開
中文:測試連接池的空閑連接,驗證查詢將會被使用去測試。
原文:Test idle connections of the pool, see BasicDataSource.html#getTestWhileIdle . Validation Query will be used to test it.
Soft Min Evictable Idle Time(ms)
中文:最少的時間連接可能在池中閑置,然后才有資格被閑置的對象驅逐出去,額外的條件是至少在池中保持連接。默認值為5000(5秒)
Validation Query :驗證查詢 。一個簡單的查詢,用來確定數據庫是否仍在響應。 這個驗證查詢在池創建中使用,即使“空閑測試”建議查詢只在空閑連接上使用,也可以驗證它。
驗證查詢的列表可以配置 jdbc.config.check。查詢屬性,默認情況下:
hsqldb:select 1 from INFORMATION_SCHEMA.SYSTEM_USERS
Oracle:select 1 from dual
DB2:select 1 from sysibm.sysdummy1
MySQL:select 1
Microsoft SQL Server (MS JDBC driver):select 1
PostgreSQL:select 1
Ingres:select 1
Derby:values 1
H2:select 1
Firebird:select 1 from rdb$database
(4) Database Connection Configuration
Database URL: jdbc:mysql://服務器地址:3306/數據庫名
(比如:jdbc:mysql://ip:3306/數據庫名?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true)
備注:“&allowMultiQueries=true” 這句話的意思呢 是為了在JDBC中執行多條select語句的時候用的!
JDBC Driver class:數據庫JDBC驅動類名:com.mysql.jdbc.Driver
Username:數據庫連接用戶名
password:數據庫連接密碼
例如(上面url或class如有問題,可試一試下面的):
Database URL: jdbc:mysql://localhost:3306/information_schema?serverTimezone=GMT%2B8
JDBC Driver class: com.mysql.cj.jdbc.Driver
Username:root
password:xxx