1. 程式人生 > 實用技巧 >效能測試筆記

效能測試筆記

1.效能測試一般有:
負載測試:通過逐步加壓的方法,達到既定的效能閥值的目標,閩值的設定應是小於等於某個值,如cpu使用率小於等於80%

壓力測試:通過逐步加壓的方法,使得系統的某些資源達到飽和,甚至失效的狀態,簡單粗暴的解釋就是什麼條件能把系統壓崩潰。

併發測試:在同一時間內,多個虛擬使用者同時訪問同一模組、同一功能,通常的測試方法是設定集合點。

容量測試:通常是指資料庫層面的,目標是獲取資料庫的最佳容量的能力。又稱之為容量預估。具體測試方法為在一定的併發使用者,不同的基礎資料量下,
觀察資料庫的處理能力,即獲取資料庫的各項效能指標。

可靠性測試:又稱之為穩定性測試或疲勞測試。是指系統在高壓情況下,長時間的執行系統是否穩定。如
cpu使用率在80%以上,7*24小時執行,系統是否穩定。(常見記憶體溢位)

異常測試:又稱之為失敗測試。是指系統架構方面的測試。如在負載均衡架構中,要測試宕機、節點掛掉等情況系統的反映

2.效能測試步驟一般是:
需求分析--->效能指標制定--->指令碼開發--->場景設定--->監控部署--->測試執行--->效能分析--->效能調優--->測試報告


3.效能測試指標定義:
事務:從客戶端發起的一個或多個請求(這些請求組成一個完整的操作),到客戶端接收到從伺服器返回的響應(銀行轉賬)

事務響應時間:事務可能是由一個或多個請求組成的,事務響應時間主要是針對於使用者的角度而言,如轉賬。

TPS:每秒鐘系統能夠處理的事務數

請求響應時間:從客戶端發起的一個請求開始,到客戶端接收到從伺服器返回的響應。整個過程所耗費的時間。

併發:沒有嚴格意義上的併發。併發總有先後,無論差距是1毫秒或者是1微秒,總有一個時間差。所以併發講的是一個時間範圍內,比如1秒內。

併發使用者數:同一單位時間內對系統發起請求的使用者數量

吞吐量:一次效能測試過程中網路上傳輸的資料量的總和

吞吐率:單位時間內網路上傳輸的資料量 吞吐率=吞吐量/傳輸時間

點選率:每秒鐘使用者向伺服器提交的請求數。這個指標是web應用程式特有的一個指標,可以想象為每秒鐘使用者總共在頁面上進行多少次點選動作,
但是需要注意的是一次滑鼠單擊的操作後,客戶端有可能向伺服器傳送了多次請求。

資源使用率:對不同的系統資源的使用情況,如cpu、記憶體、io

Jmeter實現多併發
◆執行緒組:負載發生器,用多執行緒或多程序的方式來模擬使用者的使用行為。JMeter是以執行緒的方式來進行模擬使用者的併發訪問的

Jmeter實現邏輯分之控制
◆邏輯控制器:用來控制測試指令碼的邏輯判斷,也可以理解為如何控制指令碼的執行。例如:如果控制器,就是當滿足什麼樣的條件後執行哪一步操作。

Jmeter實現配置管理
◆配置元件:用來提供一些配置相關的資訊,如Http請求頭、cookie管理,提供引數化資料。還可以進行使用者自定義變數等配,用以來定義常量等。


實時監控
top:能夠實時監控系統的執行狀態,並且可以按照cpu及記憶體等進行排序。語法:top-hv|-bcHiOSs-d secs-n max-ulU user-p pids-o field-w[cols]

vmstat:可以監控作業系統的程序狀態、記憶體、虛擬記憶體、磁碟IOCP U的資訊。語法:vmstat[-a][-n][-S unit][delay[count]]

free:能夠監控系統的記憶體使用狀態。其中,total:總計實體記憶體的大小;Used:已使用多大;Free:可用有多少;shared:多個程序共享的記憶體總額;buffers/cached:磁碟快取的大小。

mpstatmpstat最大的特點是:可以檢視多核心cpu中每個計算核心的統計資料。語法:mpstat[-P{IALL][internal[count]
mpstat引數
-P{IALL}表示監控哪個CPUcpu[0cpu個數-1]中取值internal 相鄰的兩次取樣的間隔時間
count 取樣的次數,count只能和delay一起使用

netstat:命令用於顯示本機網路連結、執行埠、路由表等資訊
netstat引數說明
-n:拒絕顯示別名,能顯示數字的全部轉化成數字。
-1:僅列出有在Listen(監聽)的服務狀態
·-p:顯示建立相關連結的程式名
-ttcp):顯示tcp相關選項
-uudp):僅顯示udp相關選項
-i:顯示自動匹配介面的資訊.
-c:每隔一個固定時間,執行該netstat命令。

iostat:是對系統磁碟IO操作進行監控,它的輸出主要顯示磁碟的讀寫操作的統計資訊。同時給出cpu的使用情況
iostat用法
iostat[-c|-d][-k|-m][-t][-V][-x][device[..J|ALL]
[-p[device |ALL]][interval[count]]
-xdevice 輸出指定要統計的磁碟裝置名稱,預設為所有磁碟裝置.

sar簡介
◆(System Activity Reporter系統活動情況報告)是目前Linux上最為全面的系統性能分析工具之一,可以從多方面對系統的活動進行報告
sar的效能監控範圍
◆檔案的讀寫情況、系統呼叫的使用情況、磁碟I/OCPU效率、
記憶體使用狀況、程序活動及IPC有關的活動等
sar語法
sar[options][-A][-o file]t[n]
sar語法說明
◆在命令列中,nt兩個引數組合起來定義取樣間隔和次數,t為取樣間隔,是必須有的引數,n為取樣次數,是可選的,預設值是1
-ofile表示將命令結果以二進位制格式存放在檔案中,file在此處不是關鍵字,是檔名。options為命令列選項。
sar選項
-A:所有報告的總和。
-u:CPU利用率
-V:程序、節點、檔案和鎖表狀態。
-r:顯示系統記憶體的使用情況。
-B:記憶體分頁情況
-b:緩衝區使用情況。

strace簡介
strace命令是一個集診斷、除錯、統計與一體的工具,我們可以使用strace對應用的系統呼叫和訊號傳遞的跟蹤結果來對應用進行分析,以達到解決問題或者是瞭解應用工作過程的目的。
strace選項
-p:跟蹤指定的程序。
-f:跟蹤由fork子程序系統呼叫
-c統計每一系統呼叫的所執行的時間,次數和出錯的次數等
-t:在輸出中的每一行前加上時間資訊。-tt時間確定到微秒級。
-e expr:輸出過濾器,通過表示式,可以過濾掉你不想要輸
-ofilename:預設strace將結果輸出到stdout。通過-o可以將輸出寫入到filename檔案中。

Linux監控工具:
nmon
nmon是一種在Linux作業系統上廣泛使用的監控與分析工具,nmon所記錄的資訊是比較全面的,它能在系統執行過程中實時地捕捉系統資源的使用情況,
並且能輸出結果到檔案中,然後通過nmon_analyzer工具產生資料檔案與圖形化結果。
nmon用法
-f這是nmon必選引數,並且必須放在第一個,就是輸出檔案的意思;用該引數的話,nmon輸出的檔名就是預設名稱:
hostname_date_time.nmon
-F<filename>這個引數和-f相同,只不過使用者可以自己定義檔名稱;
-s採集資料頻率,也就是儲存資料的頻率;
-c採集資料次數;
-t輸出最消耗資源的程序資料;
-h檢視幫助;

nmon_analyzer
nmon analyser的作用就是分析nmon資料採集後的結果,nmon analyser需要藉助Excel的巨集,WPS預設沒有安裝巨集,需要下載外掛
nmon_analyzer重點sheet
SYS_SUMM系統彙總頁,包含cpu佔有率變化情況,磁碟IO的變化情況等資訊;
AAA關於作業系統以及nmon本身的一些資訊;
CPUnn顯示執行時間內CPU佔用情況;
CPU_ALL 所有CPU概述,顯示所有CPU平均佔用情況;CPU_SUMM每一個CPU在執行時間內的佔用情況;
DGBUSY磁碟組每個hdisk裝置平均佔用情況;
DGREAD每個磁碟組的平均讀情況;
DGSIZE每個磁碟組的平均讀寫情況;
DGWRITE每個磁碟組的平均寫情況;
DGXFER每個磁碟組的I/O每秒操作;
MEM記憶體相關的主要資訊,使用、空閒記憶體大小等。
NET顯示系統中每個網路介面卡的資料傳輸速率(幹位元組/
PAGEsheet統計相關頁資訊的記錄

Linux定時任務:
crontab
linux系統是由cron這個系統服務來控制的。Linux系統上包含很多的計劃性工作。使用者自己也可以設定計劃任務,所以Linux系統提供了使用者控制計劃任務的命令。
/sbin/service crond status 檢視定時任務的服務是否啟動
start/stop/restart 啟動服務/停止服務/重新啟動服務
reload 重新載入配置
crontab的服務許可權
crontab的許可權管理儲存在cron.allow檔案與cron.deny檔案中。如果沒有可建立在etc目錄下
cron.allow檔案儲存的是允許哪些使用者使用crontab
cron.deny檔案儲存的是不允許哪些使用者使用crontab
crontab的使用場景說明
◆當兩個檔案都不存在時,那麼只允許root使用者使用crontab
◆當cron.allow檔案存在,而cron.deny檔案不存在時,那麼只允許cron.allow檔案中的使用者使用crontab3
◆當cron.deny檔案存在,而cron.allow檔案不存在時,那麼只要是沒有列在cron.deny檔案中的使用者都可以使用crontab
◆如果兩個檔案都存在,而一個使用者在兩個檔案中都有,那麼以cron.allow檔案中的為準,只要cron.allow檔案用有該使用者,則該使用者就可以使用crontab
crontab的使用
◆命令:crontab-e在編輯頁面輸入命令即可
crontab的編輯格式
◆基本格式:minute hour day month week command
◆對應單位:分時日月周命令
crontab的時間單位說明
◆第1列表示分鐘00~59每分鐘用*或者*/1表示
◆第2列表示小時00~230表示0點)
◆第3列表示日期01~31
◆第4列表示月份01~12
◆第5列標識號星期0~60表示星期天)
◆第6列要執行的命令
*代表取值範圍內的所有值
/代表每的意思
crontab的符號說明
-代表從某個數字到某個數字
◆,分隔開幾個不同的數字

什麼是資料驅動
定義
◆從資料檔案中讀取測試資料,驅動測試過程的一種測試方法
◆資料驅動可以理解為更高階的引數化
特點
◆測試資料與測試程式碼分離
◆資料控制過程
好處
◆減少測試程式碼量
◆降低指令碼開發和維護的成本
◆便於用例的修改和維護(不用修改程式碼)
要求
◆較強的程式碼能力
◆較強的分層架構設計思維
◆對開發框架要有一定的瞭解

資料驅動的使用場:
◆複雜的業務流程
◆根據業務場景分流
◆符合條件的併發場景

Jmeter中的資料驅動
控制方式
◆引數化
◆邏輯控制器


資料庫:
主要內容
◆資料庫效能測試的目的及範圍
◆資料庫的常用架構
◆資料庫主從同步的工作原理
◆資料庫分庫分表的設計方法

資料庫的效能測試範圍
sql語句-慢查詢等
◆資源使用率
◆資料庫架構合理性
◆資料庫效能指標

主從同步工作原理:
master將改變記錄到二進位制日誌(binary log

·slavemasterbinary log events拷貝到它的中繼日誌(relay log
slave重做中繼日誌中的事件,將改變反映它自己的資料

資料庫拆庫拆表拆分的原因:
◆單表或庫資料量太大
◆硬體不能升級或無法升級


MySQL效能測試:
主要內容
MySQL資料庫介紹
MySQL資料庫監控指標
MySQL慢查詢工作原理及操作
SQL的分析與調優方法
MySQL索引的概念及作用
MySQL索引的工作原理與設計規範
MySQL儲存引擎
MySQL實時監控
MySQL叢集監控方案
MySQL效能測試的用例準備
◆使用Jmeter開發MySQL效能測試指令碼
◆執行測試

MySQL資料庫重點監控指標
QPS
queries per seconds 每秒鐘查詢數量
show global status like‘Question%'
Queries/seconds

TPS
Tranaction per seconds
TPS=(Com_commit+Com_rollback)/seconds
show global status like 'Com_commit';
show global status like 'Com_rollback';

執行緒連線數
show global status like 'Max_ used_ connections';
show global status like 'Threads%';
show variables like'max_connections';

Query Cache
查詢快取用於快取select查詢結果
當下次接收到相同查詢請求時,不再執行實際查詢處理而直接返回結果
適用於大量查詢、很少改變表中資料
修改my.cnf
query_cache_size設定為具體的大小,具體大小是多少取決於查詢的實際情況,但最好設定為1024的倍數,參考值32M
增加一行:query_cache_type=0/1/2
如果設定為1,將會快取所有的結果,除非你的select語句使用SQL_NO_CACHE禁用了查詢快取。
如果設定為2,則只快取在select語句中通過SQL_CACHE指定需要快取的查詢

Query Cache命中率
show status like 'Qcache%;
Query _cache_hits =(Qcahce_hits/(Qcache_hits+Qcache_inserts ))*100%;

鎖定狀態
show global status like %lock%';
Table_locks_waited/Tble_locks_immediate 值越大代表表鎖造成的阻塞越嚴重
Innodb_row_lock_waits innodb 行鎖,太大可能是間隙鎖造成的

主從延時
查詢主從延時時間: show slave status

---------------------------------------------------------------------------------------------------------------------
MySql慢查詢:
執行速度超過定義時間的查詢
不同的系統定義不同的慢查詢指標
慢查詢的開啟:
編輯/etc/my.cnf,[mysqlld]域中新增:
開啟慢查詢:slow_query_log=1
慢查詢日誌路勁:slow_query_log_file=/data/mysql/slow.log
慢查詢的時長:long_query_time=1
未使用索引的查詢也被記錄到慢查詢日誌中:log_queries_not_using_indexes=1
慢查詢日誌分析:
mysqldumpslow 命令
-s 是表示按照何種方式排序
c 訪問計數
i 鎖定時間
r 返回記錄
t 查詢時間
al 平均鎖定時間
ar 平均返回記錄數
at 平均查詢時間
-t top n 的意思,即為返回前面多少條的資料
-g 後邊可以寫一個正則匹配模式,大小寫不敏感的
慢查詢分析例子:
得到返回記錄集最多的10SQL : mysqldumpslow -s r -t 10 slow.log
得到訪問次數最多的10SQL : mysqldumpslow -s c -t 10 slow.log
得到按照時間排序的前10條裡面含有做連結的查詢語句 : mysqldumpslow -s t -t 10 -g "left join" slow.log

SQL語句的效能分析
explain SELECT * FROM `apporder_yongli`
explain 返回結果分析
第一列 id:
select 識別符,代表語句的執行順序,一般在select巢狀查詢時會不同
id列數字越大越先執行,如果說數字一樣大,那麼就從上往下依次執行
id列為null的就表示這是一個結果集,不需要使用它來進行查詢
第二列 select_type
simple 表示不需要union操作或者不包含子查詢的簡單select查詢,有連線查詢時,外層的查詢為simple,且只有一個
primary 一個需要union操作或者含有子查詢的select,位於最外層的單位查詢的select_typeprimary。且只有一個
union 連線的兩個select查詢,第一個查詢是dervied派生表,除了第一個表外,第二個以後的表select_type都是union
dependent union union一樣,出現unionunion all 語句中,但是這個查詢要受到外部查詢的影響
union result 包含union的結果集,在unionunion all語句中,因為它不需要參加查詢,所以id欄位為null
subquery 除了from字句中包含的子查詢外,其他地方出現的子查詢都可能是subquery
dependent subquery dependent union 類似,表示這個subquery的查詢要受到外部表查詢的影響
derived from字句中出現子查詢,也叫做派生表,其他資料庫中可能叫做內聯檢視或巢狀select
第三列 table
顯示的查詢表名,如果查詢使用了別名,那麼這裡就顯示的別名
如果不涉及對資料表的操作,那麼這裡顯示null
如果顯示尖括號括起來的<derived N>就表示這個是臨時表
第五列 type
依次好到差:system,const,eq_ref,ref,fulltext,ref_or_null,unique_subquery,index_subquery,range,index_merge,index,ALL
除了all之外,其他的type都可以使用到索引,除了index_merge之外,其他的type只可以用到一個索引
system 表中只有一行資料或者是空表,且只能用於myisammemory表。如果是Innodb引擎表,type列在這個情況通常都是all或者index
const 使用唯一索引或者主鍵,返回記錄一定是1行記錄的等值where條件時,通常typeconst。其他資料庫也叫作唯一索引掃描
eq_ref 出現要連線過這個表的查詢計劃中,驅動表只返回一行資料,且這行資料是第二個表的主鍵或者唯一索引,且必須為not null,唯一索引
和主鍵是多列時,只有所有的列都用作比較時才會出現eq_ref
ref 不像eq_ ref那樣要求連線順序,也沒有主鍵和唯一索引的要求,只要使用相等條件檢索時就可能出現,常見與輔助索引的等值查詢。或者多列
主鍵、唯一索引中,使用第一個列之 外的列作為等值查詢也會出現,總之,返回資料不唯一-的等值查詢就可能出現。
fulltext :全文索引檢索,要注意,全文索引|的優先順序很高,若全文索弓|和普通索引同時存在時, mysql不管代價,優先選擇使用全文索引
ref_ or_ null :ref方法類似,只是增加了nul值的比較。實際用的不多。
unique_ subquery :用於where中的in形式子查詢,子查詢返回不重複值唯一值
index_subquery :用於in形式子查詢使用到了輔助索引|或者in常數列表,子查詢可能返回重複值,可以使用索引|將子查詢去重。
range :索引範圍掃描,常見於使用>, <,is null,between ,in ,like等運算子的查詢中。
index_merge :表示查詢使用了兩個以上的索引,最後取交集或者index_merge :表示查詢使用了兩個以上的索引,最後取交集或者ref_or_null
之後,但是實際上由於要讀取所個索引,效能可能大部分時間都不如range
index :索引全表掃描,把索引從頭到尾掃一-,常見於使用索引列就可以處理不需要讀取資料檔案的查詢、可以使用索弓引|排序或者分組的查詢。
all :這個就是全表掃描資料檔案,然後再在server層進行過濾返回符合要求的記錄。
第六列 possible_ keys
查詢可能使用到的索引弓|都會在這裡列出來
第七列 key
查詢真正使用到的索引, select_typeindex_merge,這裡可能出現兩個以上的索引,其他的select_type這裡只會出現一個。
第八列 key_len
用於處理查詢的索引長度,如果是單列索引, 那就整個索引長度算進去,如果是多列索引,那麼查詢不一定都能使用到所有的列,具體使用到了多少個
列的索引,這裡就會計算進去,沒有使用到的列這裡不會計算進去
第九列 ref
如果是使用的常數等值查詢,這裡會顯示const ,如果是連線查詢,被驅動表的執行計劃這裡會顯示驅動表的關聯欄位,如果是條件使用了表示式或者
函式,或者條件列發生了內部隱式轉換,這裡可能顯示為func
第十列 rows
這裡是執行計劃中估算的掃描行數,不是精確值
第十二列 Extra
distinct :select部分使用了distinct關鍵字
no tables used :不帶from字句的查詢或者From dual查詢
using filesort :排序時無法使用到索引時,就會出現這個。常見於order bygroup by語句中
using index :查詢時不需要回表查詢,直接通過索引|就可以獲取查詢的資料。
using intersect :表示使用and的各個索弓|的條件時,該資訊表示:是從處理結果獲取交集
using union :表示使用or連線各個使用索引的條件時,該資訊表示從處理結果獲取並集
using where :表示儲存弓|擎返回的記錄並不是所有的都滿足查詢條件,需要在server層進行過濾

MySQL索引
索引型別:主鍵索引,唯一索引,普通索引,全文索引,組合索引
主鍵索引:它是一-種特殊的唯一索引,不允許有空值。一般是在建表的時候同時建立 主鍵索引
唯一索引:索弓|列的值必須唯一, 但允許有空值
普通索引:最基本的索引,它沒有任何限制
全文索引:fulltext是一種只適用於MyISAM表的一個索引型別。被索引列的資料型別只能是以下三種的組合charvarchartext
MySQL是通過match()against()這兩個函式來實現它的全文索引查詢的功能。
組合索引:也叫多列索引,就是在多列上同時建立索引,使得多列的組合值唯一,建立組合索引的好處是比分別建立多個單列索引的查詢速度要快很多。
組合索引建立遵循最左字首規則如三列: idnameage建立組合索引,則相當於分別建立了idnameage , idname , id
這三個索引
索引建立規範
索引是一把雙刃劍,它可以提高查詢效率但也會降低插入和更新的速度並佔用磁碟空間。在插入與更新資料時,要重寫索引檔案
1.單張表中索引數量不超過5個(個人經驗最合適的)
2.單個索引中的欄位數不超過5
3.不使用更新頻繁地列作為主鍵
4.合理建立組合索引(避免冗餘)
5.不在低基數列.上建立索引,例如'性別'
6.不在索弓|列進行數學運算和函式運算,會使索引失效
7.不使用%前導的查詢,like "%xxx" 無法使用索引。
8.不使用反向查詢,notin/notlike,無法使用索引,導致全表掃描
9.選擇越小的資料型別越好,因為通常越小的資料型別通常在磁碟,記憶體,cpu,快取中佔用的空間很少,處理起來更快
10.在經常需要排序(order by),分組(group by)和的distinct列上加索引(單獨order by用不了索引,索引考慮加where或加limit)
11.在表與表的而連線條件.上加,上索引,可以加快連線查詢的速度
12.使用短索引,如果你的一個欄位是Char(32)或者int(32),在建立索弓|的時候指定字首長度比如前10個字元(前提是多數值是唯一的)那麼短索引可
以提高查詢速度並且可以減少磁碟的空間,也可以減少I/0操作.

MySQL儲存引擎
MyISAM
優點:
1.讀的效能比InnoDB高很多
2.索引與資料分開,使用了壓縮,從而提高了記憶體使用率
缺點:
1.不支援事務
2.寫入資料時,直接鎖表
InnoDB
優點:
1.支援事務
2.支援外來鍵
3.支援行級鎖
缺點:
1.不支援fulltext索引(全文索引)
2.行級所並不絕對,當不確定掃描範圍時,鎖全表
3.索引與資料是緊密捆綁的,沒有使用壓縮導致體積龐大

MySQL實時監控(單臺)
工具orzdba
MySQL叢集監控-天免LEPUS(自己搭建使用***
為所有資料庫管理者、網際網路企業資料庫監控而設計
無需部署Agent ,輕鬆監控1000+資料庫例項,完善靈活的告警配置,詳細的效能分析指標

用例準備
要點:使用sql模擬使用者使用場景
Jmeter開發mysql效能測試指令碼
步驟:1.JDBC Connection Configuration配置mysq|配置
2.JDBC Requestsq|指令碼

效能測試的要素:
1.被測系統及版本
2.測試資料
3.測試場景(包含異常場景)
4.預期結果
5.預期效能指標
效能測試報告:
1.被測系統
2.版本號
3.執行環境/配置
4.測試場景(併發定義)
5.預期效能指標
6.實際結果
7.測試結論
8.測試人員
9.如果不通過說明結論
10.如果通過了說明最大的效能指標
11.容量規劃
12.彙報物件是誰,採取相關說明(易懂/專業1
Jmeret擴充套件元件開發--擴充套件開發實現的兩種方式
1.◆繼承AbstractJavaSamplerClient抽象類
2.◆實現JavaSamplerClient介面









1.效能測試一般有:
負載測試:通過逐步加壓的方法,達到既定的效能閥值的目標,閩值的設定應是小於等於某個值,如cpu使用率小於等於80%

壓力測試:通過逐步加壓的方法,使得系統的某些資源達到飽和,甚至失效的狀態,簡單粗暴的解釋就是什麼條件能把系統壓崩潰。

併發測試:在同一時間內,多個虛擬使用者同時訪問同一模組、同一功能,通常的測試方法是設定集合點。

容量測試:通常是指資料庫層面的,目標是獲取資料庫的最佳容量的能力。又稱之為容量預估。具體測試方法為在一定的併發使用者,不同的基礎資料量下,
觀察資料庫的處理能力,即獲取資料庫的各項效能指標。

可靠性測試:又稱之為穩定性測試或疲勞測試。是指系統在高壓情況下,長時間的執行系統是否穩定。如cpu使用率在80%以上,7*24小時執行,系統是否穩定。(常見記憶體溢位)

異常測試:又稱之為失敗測試。是指系統架構方面的測試。如在負載均衡架構中,要測試宕機、節點掛掉等情況系統的反映

2.效能測試步驟一般是:
需求分析--->效能指標制定--->指令碼開發--->場景設定--->監控部署--->測試執行--->效能分析--->效能調優--->測試報告


3.效能測試指標定義:
事務:從客戶端發起的一個或多個請求(這些請求組成一個完整的操作),到客戶端接收到從伺服器返回的響應(銀行轉賬)

事務響應時間:事務可能是由一個或多個請求組成的,事務響應時間主要是針對於使用者的角度而言,如轉賬。

TPS:每秒鐘系統能夠處理的事務數

請求響應時間:從客戶端發起的一個請求開始,到客戶端接收到從伺服器返回的響應。整個過程所耗費的時間。

併發:沒有嚴格意義上的併發。併發總有先後,無論差距是1毫秒或者是1微秒,總有一個時間差。所以併發講的是一個時間範圍內,比如1秒內。

併發使用者數:同一單位時間內對系統發起請求的使用者數量

吞吐量:一次效能測試過程中網路上傳輸的資料量的總和

吞吐率:單位時間內網路上傳輸的資料量 吞吐率=吞吐量/傳輸時間

點選率:每秒鐘使用者向伺服器提交的請求數。這個指標是web應用程式特有的一個指標,可以想象為每秒鐘使用者總共在頁面上進行多少次點選動作,
但是需要注意的是一次滑鼠單擊的操作後,客戶端有可能向伺服器傳送了多次請求。

資源使用率:對不同的系統資源的使用情況,如cpu、記憶體、io

Jmeter實現多併發
◆執行緒組:負載發生器,用多執行緒或多程序的方式來模擬使用者的使用行為。JMeter是以執行緒的方式來進行模擬使用者的併發訪問的

Jmeter實現邏輯分之控制
◆邏輯控制器:用來控制測試指令碼的邏輯判斷,也可以理解為如何控制指令碼的執行。例如:如果控制器,就是當滿足什麼樣的條件後執行哪一步操作。

Jmeter實現配置管理
◆配置元件:用來提供一些配置相關的資訊,如Http請求頭、cookie管理,提供引數化資料。還可以進行使用者自定義變數等配,用以來定義常量等。


實時監控
top:能夠實時監控系統的執行狀態,並且可以按照cpu及記憶體等進行排序。語法:top-hv|-bcHiOSs-d secs-n max-ulU user-p pids-o field-w[cols]

vmstat:可以監控作業系統的程序狀態、記憶體、虛擬記憶體、磁碟IOCP U的資訊。語法:vmstat[-a][-n][-S unit][delay[count]]

free:能夠監控系統的記憶體使用狀態。其中,total:總計實體記憶體的大小;Used:已使用多大;Free:可用有多少;shared:多個程序共享的記憶體總額;buffers/cached:磁碟快取的大小。

mpstatmpstat最大的特點是:可以檢視多核心cpu中每個計算核心的統計資料。語法:mpstat[-P{IALL][internal[count]
mpstat引數
-P{IALL}表示監控哪個CPUcpu[0cpu個數-1]中取值internal 相鄰的兩次取樣的間隔時間
count 取樣的次數,count只能和delay一起使用

netstat:命令用於顯示本機網路連結、執行埠、路由表等資訊
netstat引數說明
-n:拒絕顯示別名,能顯示數字的全部轉化成數字。
-1:僅列出有在Listen(監聽)的服務狀態
·-p:顯示建立相關連結的程式名
-ttcp):顯示tcp相關選項
-uudp):僅顯示udp相關選項
-i:顯示自動匹配介面的資訊.
-c:每隔一個固定時間,執行該netstat命令。

iostat:是對系統磁碟IO操作進行監控,它的輸出主要顯示磁碟的讀寫操作的統計資訊。同時給出cpu的使用情況
iostat用法
iostat[-c|-d][-k|-m][-t][-V][-x][device[..J|ALL]
[-p[device |ALL]][interval[count]]
-xdevice 輸出指定要統計的磁碟裝置名稱,預設為所有磁碟裝置.

sar簡介
◆(System Activity Reporter系統活動情況報告)是目前Linux上最為全面的系統性能分析工具之一,可以從多方面對系統的活動進行報告
sar的效能監控範圍
◆檔案的讀寫情況、系統呼叫的使用情況、磁碟I/OCPU效率、
記憶體使用狀況、程序活動及IPC有關的活動等
sar語法
sar[options][-A][-o file]t[n]
sar語法說明
◆在命令列中,nt兩個引數組合起來定義取樣間隔和次數,t為取樣間隔,是必須有的引數,n為取樣次數,是可選的,預設值是1
-ofile表示將命令結果以二進位制格式存放在檔案中,file在此處不是關鍵字,是檔名。options為命令列選項。
sar選項
-A:所有報告的總和。
-u:CPU利用率
-V:程序、節點、檔案和鎖表狀態。
-r:顯示系統記憶體的使用情況。
-B:記憶體分頁情況
-b:緩衝區使用情況。

strace簡介
strace命令是一個集診斷、除錯、統計與一體的工具,我們可以使用strace對應用的系統呼叫和訊號傳遞的跟蹤結果來對應用進行分析,以達到解決問題或者是瞭解應用工作過程的目的。
strace選項
-p:跟蹤指定的程序。
-f:跟蹤由fork子程序系統呼叫
-c統計每一系統呼叫的所執行的時間,次數和出錯的次數等
-t:在輸出中的每一行前加上時間資訊。-tt時間確定到微秒級。
-e expr:輸出過濾器,通過表示式,可以過濾掉你不想要輸
-ofilename:預設strace將結果輸出到stdout。通過-o可以將輸出寫入到filename檔案中。

Linux監控工具:
nmon
nmon是一種在Linux作業系統上廣泛使用的監控與分析工具,nmon所記錄的資訊是比較全面的,它能在系統執行過程中實時地捕捉系統資源的使用情況,
並且能輸出結果到檔案中,然後通過nmon_analyzer工具產生資料檔案與圖形化結果。
nmon用法
-f這是nmon必選引數,並且必須放在第一個,就是輸出檔案的意思;用該引數的話,nmon輸出的檔名就是預設名稱:
hostname_date_time.nmon
-F<filename>這個引數和-f相同,只不過使用者可以自己定義檔名稱;
-s採集資料頻率,也就是儲存資料的頻率;
-c採集資料次數;
-t輸出最消耗資源的程序資料;
-h檢視幫助;

nmon_analyzer
nmon analyser的作用就是分析nmon資料採集後的結果,nmon analyser需要藉助Excel的巨集,WPS預設沒有安裝巨集,需要下載外掛
nmon_analyzer重點sheet
SYS_SUMM系統彙總頁,包含cpu佔有率變化情況,磁碟IO的變化情況等資訊;
AAA關於作業系統以及nmon本身的一些資訊;
CPUnn顯示執行時間內CPU佔用情況;
CPU_ALL 所有CPU概述,顯示所有CPU平均佔用情況;CPU_SUMM每一個CPU在執行時間內的佔用情況;
DGBUSY磁碟組每個hdisk裝置平均佔用情況;
DGREAD每個磁碟組的平均讀情況;
DGSIZE每個磁碟組的平均讀寫情況;
DGWRITE每個磁碟組的平均寫情況;
DGXFER每個磁碟組的I/O每秒操作;
MEM記憶體相關的主要資訊,使用、空閒記憶體大小等。
NET顯示系統中每個網路介面卡的資料傳輸速率(幹位元組/
PAGEsheet統計相關頁資訊的記錄

Linux定時任務:
crontab
linux系統是由cron這個系統服務來控制的。Linux系統上包含很多的計劃性工作。使用者自己也可以設定計劃任務,所以Linux系統提供了使用者控制計劃任務的命令。
/sbin/service crond status 檢視定時任務的服務是否啟動
start/stop/restart 啟動服務/停止服務/重新啟動服務
reload 重新載入配置
crontab的服務許可權
crontab的許可權管理儲存在cron.allow檔案與cron.deny檔案中。如果沒有可建立在etc目錄下
cron.allow檔案儲存的是允許哪些使用者使用crontab
cron.deny檔案儲存的是不允許哪些使用者使用crontab
crontab的使用場景說明
◆當兩個檔案都不存在時,那麼只允許root使用者使用crontab
◆當cron.allow檔案存在,而cron.deny檔案不存在時,那麼只允許cron.allow檔案中的使用者使用crontab3
◆當cron.deny檔案存在,而cron.allow檔案不存在時,那麼只要是沒有列在cron.deny檔案中的使用者都可以使用crontab
◆如果兩個檔案都存在,而一個使用者在兩個檔案中都有,那麼以cron.allow檔案中的為準,只要cron.allow檔案用有該使用者,則該使用者就可以使用crontab
crontab的使用
◆命令:crontab-e在編輯頁面輸入命令即可
crontab的編輯格式
◆基本格式:minute hour day month week command
◆對應單位:分時日月周命令
crontab的時間單位說明
◆第1列表示分鐘00~59每分鐘用*或者*/1表示
◆第2列表示小時00~230表示0點)
◆第3列表示日期01~31
◆第4列表示月份01~12
◆第5列標識號星期0~60表示星期天)
◆第6列要執行的命令
*代表取值範圍內的所有值
/代表每的意思
crontab的符號說明
-代表從某個數字到某個數字
◆,分隔開幾個不同的數字

什麼是資料驅動
定義
◆從資料檔案中讀取測試資料,驅動測試過程的一種測試方法
◆資料驅動可以理解為更高階的引數化
特點
◆測試資料與測試程式碼分離
◆資料控制過程
好處
◆減少測試程式碼量
◆降低指令碼開發和維護的成本
◆便於用例的修改和維護(不用修改程式碼)
要求
◆較強的程式碼能力
◆較強的分層架構設計思維
◆對開發框架要有一定的瞭解

資料驅動的使用場:
◆複雜的業務流程
◆根據業務場景分流
◆符合條件的併發場景

Jmeter中的資料驅動
控制方式
◆引數化
◆邏輯控制器


資料庫:
主要內容
◆資料庫效能測試的目的及範圍
◆資料庫的常用架構
◆資料庫主從同步的工作原理
◆資料庫分庫分表的設計方法

資料庫的效能測試範圍
sql語句-慢查詢等
◆資源使用率
◆資料庫架構合理性
◆資料庫效能指標

主從同步工作原理:
master將改變記錄到二進位制日誌(binary log

·slavemasterbinary log events拷貝到它的中繼日誌(relay log
slave重做中繼日誌中的事件,將改變反映它自己的資料

資料庫拆庫拆表拆分的原因:
◆單表或庫資料量太大
◆硬體不能升級或無法升級


MySQL效能測試:
主要內容
MySQL資料庫介紹
MySQL資料庫監控指標
MySQL慢查詢工作原理及操作
SQL的分析與調優方法
MySQL索引的概念及作用
MySQL索引的工作原理與設計規範
MySQL儲存引擎
MySQL實時監控
MySQL叢集監控方案
MySQL效能測試的用例準備
◆使用Jmeter開發MySQL效能測試指令碼
◆執行測試

MySQL資料庫重點監控指標
QPS
queries per seconds 每秒鐘查詢數量
show global status like‘Question%'
Queries/seconds

TPS
Tranaction per seconds
TPS=(Com_commit+Com_rollback)/seconds
show global status like 'Com_commit';
show global status like 'Com_rollback';

執行緒連線數
show global status like 'Max_ used_ connections';
show global status like 'Threads%';
show variables like'max_connections';

Query Cache
查詢快取用於快取select查詢結果
當下次接收到相同查詢請求時,不再執行實際查詢處理而直接返回結果
適用於大量查詢、很少改變表中資料
修改my.cnf
query_cache_size設定為具體的大小,具體大小是多少取決於查詢的實際情況,但最好設定為1024的倍數,參考值32M
增加一行:query_cache_type=0/1/2
如果設定為1,將會快取所有的結果,除非你的select語句使用SQL_NO_CACHE禁用了查詢快取。
如果設定為2,則只快取在select語句中通過SQL_CACHE指定需要快取的查詢

Query Cache命中率
show status like 'Qcache%;
Query _cache_hits =(Qcahce_hits/(Qcache_hits+Qcache_inserts ))*100%;

鎖定狀態
show global status like %lock%';
Table_locks_waited/Tble_locks_immediate 值越大代表表鎖造成的阻塞越嚴重
Innodb_row_lock_waits innodb 行鎖,太大可能是間隙鎖造成的

主從延時
查詢主從延時時間: show slave status

---------------------------------------------------------------------------------------------------------------------
MySql慢查詢:
執行速度超過定義時間的查詢
不同的系統定義不同的慢查詢指標
慢查詢的開啟:
編輯/etc/my.cnf,[mysqlld]域中新增:
開啟慢查詢:slow_query_log=1
慢查詢日誌路勁:slow_query_log_file=/data/mysql/slow.log
慢查詢的時長:long_query_time=1
未使用索引的查詢也被記錄到慢查詢日誌中:log_queries_not_using_indexes=1
慢查詢日誌分析:
mysqldumpslow 命令
-s 是表示按照何種方式排序
c 訪問計數
i 鎖定時間
r 返回記錄
t 查詢時間
al 平均鎖定時間
ar 平均返回記錄數
at 平均查詢時間
-t top n 的意思,即為返回前面多少條的資料
-g 後邊可以寫一個正則匹配模式,大小寫不敏感的
慢查詢分析例子:
得到返回記錄集最多的10SQL : mysqldumpslow -s r -t 10 slow.log
得到訪問次數最多的10SQL : mysqldumpslow -s c -t 10 slow.log
得到按照時間排序的前10條裡面含有做連結的查詢語句 : mysqldumpslow -s t -t 10 -g "left join" slow.log

SQL語句的效能分析
explain SELECT * FROM `apporder_yongli`
explain 返回結果分析
第一列 id:
select 識別符,代表語句的執行順序,一般在select巢狀查詢時會不同
id列數字越大越先執行,如果說數字一樣大,那麼就從上往下依次執行
id列為null的就表示這是一個結果集,不需要使用它來進行查詢
第二列 select_type
simple 表示不需要union操作或者不包含子查詢的簡單select查詢,有連線查詢時,外層的查詢為simple,且只有一個
primary 一個需要union操作或者含有子查詢的select,位於最外層的單位查詢的select_typeprimary。且只有一個
union 連線的兩個select查詢,第一個查詢是dervied派生表,除了第一個表外,第二個以後的表select_type都是union
dependent union union一樣,出現unionunion all 語句中,但是這個查詢要受到外部查詢的影響
union result 包含union的結果集,在unionunion all語句中,因為它不需要參加查詢,所以id欄位為null
subquery 除了from字句中包含的子查詢外,其他地方出現的子查詢都可能是subquery
dependent subquery dependent union 類似,表示這個subquery的查詢要受到外部表查詢的影響
derived from字句中出現子查詢,也叫做派生表,其他資料庫中可能叫做內聯檢視或巢狀select
第三列 table
顯示的查詢表名,如果查詢使用了別名,那麼這裡就顯示的別名
如果不涉及對資料表的操作,那麼這裡顯示null
如果顯示尖括號括起來的<derived N>就表示這個是臨時表
第五列 type
依次好到差:system,const,eq_ref,ref,fulltext,ref_or_null,unique_subquery,index_subquery,range,index_merge,index,ALL
除了all之外,其他的type都可以使用到索引,除了index_merge之外,其他的type只可以用到一個索引
system 表中只有一行資料或者是空表,且只能用於myisammemory表。如果是Innodb引擎表,type列在這個情況通常都是all或者index
const 使用唯一索引或者主鍵,返回記錄一定是1行記錄的等值where條件時,通常typeconst。其他資料庫也叫作唯一索引掃描
eq_ref 出現要連線過這個表的查詢計劃中,驅動表只返回一行資料,且這行資料是第二個表的主鍵或者唯一索引,且必須為not null,唯一索引
和主鍵是多列時,只有所有的列都用作比較時才會出現eq_ref
ref 不像eq_ ref那樣要求連線順序,也沒有主鍵和唯一索引的要求,只要使用相等條件檢索時就可能出現,常見與輔助索引的等值查詢。或者多列
主鍵、唯一索引中,使用第一個列之 外的列作為等值查詢也會出現,總之,返回資料不唯一-的等值查詢就可能出現。
fulltext :全文索引檢索,要注意,全文索引|的優先順序很高,若全文索弓|和普通索引同時存在時, mysql不管代價,優先選擇使用全文索引
ref_ or_ null :ref方法類似,只是增加了nul值的比較。實際用的不多。
unique_ subquery :用於where中的in形式子查詢,子查詢返回不重複值唯一值
index_subquery :用於in形式子查詢使用到了輔助索引|或者in常數列表,子查詢可能返回重複值,可以使用索引|將子查詢去重。
range :索引範圍掃描,常見於使用>, <,is null,between ,in ,like等運算子的查詢中。
index_merge :表示查詢使用了兩個以上的索引,最後取交集或者index_merge :表示查詢使用了兩個以上的索引,最後取交集或者ref_or_null
之後,但是實際上由於要讀取所個索引,效能可能大部分時間都不如range
index :索引全表掃描,把索引從頭到尾掃一-,常見於使用索引列就可以處理不需要讀取資料檔案的查詢、可以使用索弓引|排序或者分組的查詢。
all :這個就是全表掃描資料檔案,然後再在server層進行過濾返回符合要求的記錄。
第六列 possible_ keys
查詢可能使用到的索引弓|都會在這裡列出來
第七列 key
查詢真正使用到的索引, select_typeindex_merge,這裡可能出現兩個以上的索引,其他的select_type這裡只會出現一個。
第八列 key_len
用於處理查詢的索引長度,如果是單列索引, 那就整個索引長度算進去,如果是多列索引,那麼查詢不一定都能使用到所有的列,具體使用到了多少個
列的索引,這裡就會計算進去,沒有使用到的列這裡不會計算進去
第九列 ref
如果是使用的常數等值查詢,這裡會顯示const ,如果是連線查詢,被驅動表的執行計劃這裡會顯示驅動表的關聯欄位,如果是條件使用了表示式或者
函式,或者條件列發生了內部隱式轉換,這裡可能顯示為func
第十列 rows
這裡是執行計劃中估算的掃描行數,不是精確值
第十二列 Extra
distinct :select部分使用了distinct關鍵字
no tables used :不帶from字句的查詢或者From dual查詢
using filesort :排序時無法使用到索引時,就會出現這個。常見於order bygroup by語句中
using index :查詢時不需要回表查詢,直接通過索引|就可以獲取查詢的資料。
using intersect :表示使用and的各個索弓|的條件時,該資訊表示:是從處理結果獲取交集
using union :表示使用or連線各個使用索引的條件時,該資訊表示從處理結果獲取並集
using where :表示儲存弓|擎返回的記錄並不是所有的都滿足查詢條件,需要在server層進行過濾

MySQL索引
索引型別:主鍵索引,唯一索引,普通索引,全文索引,組合索引
主鍵索引:它是一-種特殊的唯一索引,不允許有空值。一般是在建表的時候同時建立 主鍵索引
唯一索引:索弓|列的值必須唯一, 但允許有空值
普通索引:最基本的索引,它沒有任何限制
全文索引:fulltext是一種只適用於MyISAM表的一個索引型別。被索引列的資料型別只能是以下三種的組合charvarchartext
MySQL是通過match()against()這兩個函式來實現它的全文索引查詢的功能。
組合索引:也叫多列索引,就是在多列上同時建立索引,使得多列的組合值唯一,建立組合索引的好處是比分別建立多個單列索引的查詢速度要快很多。
組合索引建立遵循最左字首規則如三列: idnameage建立組合索引,則相當於分別建立了idnameage , idname , id
這三個索引
索引建立規範
索引是一把雙刃劍,它可以提高查詢效率但也會降低插入和更新的速度並佔用磁碟空間。在插入與更新資料時,要重寫索引檔案
1.單張表中索引數量不超過5個(個人經驗最合適的)
2.單個索引中的欄位數不超過5
3.不使用更新頻繁地列作為主鍵
4.合理建立組合索引(避免冗餘)
5.不在低基數列.上建立索引,例如'性別'
6.不在索弓|列進行數學運算和函式運算,會使索引失效
7.不使用%前導的查詢,like "%xxx" 無法使用索引。
8.不使用反向查詢,notin/notlike,無法使用索引,導致全表掃描
9.選擇越小的資料型別越好,因為通常越小的資料型別通常在磁碟,記憶體,cpu,快取中佔用的空間很少,處理起來更快
10.在經常需要排序(order by),分組(group by)和的distinct列上加索引(單獨order by用不了索引,索引考慮加where或加limit)
11.在表與表的而連線條件.上加,上索引,可以加快連線查詢的速度
12.使用短索引,如果你的一個欄位是Char(32)或者int(32),在建立索弓|的時候指定字首長度比如前10個字元(前提是多數值是唯一的)那麼短索引可
以提高查詢速度並且可以減少磁碟的空間,也可以減少I/0操作.

MySQL儲存引擎
MyISAM
優點:
1.讀的效能比InnoDB高很多
2.索引與資料分開,使用了壓縮,從而提高了記憶體使用率
缺點:
1.不支援事務
2.寫入資料時,直接鎖表
InnoDB
優點:
1.支援事務
2.支援外來鍵
3.支援行級鎖
缺點:
1.不支援fulltext索引(全文索引)
2.行級所並不絕對,當不確定掃描範圍時,鎖全表
3.索引與資料是緊密捆綁的,沒有使用壓縮導致體積龐大

MySQL實時監控(單臺)
工具orzdba
MySQL叢集監控-天免LEPUS(自己搭建使用***
為所有資料庫管理者、網際網路企業資料庫監控而設計
無需部署Agent ,輕鬆監控1000+資料庫例項,完善靈活的告警配置,詳細的效能分析指標

用例準備
要點:使用sql模擬使用者使用場景
Jmeter開發mysql效能測試指令碼
步驟:1.JDBC Connection Configuration配置mysq|配置
2.JDBC Requestsq|指令碼

效能測試的要素:
1.被測系統及版本
2.測試資料
3.測試場景(包含異常場景)
4.預期結果
5.預期效能指標
效能測試報告:
1.被測系統
2.版本號
3.執行環境/配置
4.測試場景(併發定義)
5.預期效能指標
6.實際結果
7.測試結論
8.測試人員
9.如果不通過說明結論
10.如果通過了說明最大的效能指標
11.容量規劃
12.彙報物件是誰,採取相關說明(易懂/專業1
Jmeret擴充套件元件開發--擴充套件開發實現的兩種方式
1.◆繼承AbstractJavaSamplerClient抽象類
2.◆實現JavaSamplerClient介面