壓力測試是指在MySQL上線前,需要進行大量的壓力測試,從而達到交付的標准。壓力測試不僅可以測試MySQL服務的穩定性,還可以測試出MySQL和系統的瓶頸。
TPCC測試:Transaction Processing Performance Council,要熟練使用
TPC是一系列事務處理和數據庫基准測試的規范。其中TPC-C是針對OLTP的基准測試模型,一方面可以衡量數據庫的性能,另一方面可以衡量硬件性價比,也是廣泛應用並關注的一種測試模型。
TPC-C模型是以一個在線零售業為例,設計的一種模型。具體架構如下所示:
https://rensanning.iteye.com/blog/2159732?utm_source=jiancool
SysBench
使用:
$ sysbench --test=oltp --db-driver=mysql --mysql-password=sbtest run
結果:
Running the test with following options:
Number of threads: 1
Doing OLTP test.
Running mixed OLTP test
Using Special distribution (12 iterations, 1 pct of values are returned in 75 pct cases)
Using "BEGIN" for starting transactions
TPC-C測試模型給基准測試提供了一種統一的測試標准,並非實際應用系統中的真實測試結果,但通過測試結果,可以大體觀察出MySQL數據庫服務穩定性、性能以及系統性能等一系列問題。TPC-C僅僅是一個測試模型,而在實際測試中,需要參考和使用一些測試工具,對系統和MySQL數據庫進行壓力測試、穩定性測試。
1.安裝bzr工具
[root@mysql1 /]# yum install bzr
2.下載tpcc-mysql
[root@mysql1 /]# bzr branch lp:~percona-dev/perconatools/tpcc-mysql
3.編譯安裝tpcc-mysql
[root@mysql1 /]# export PATH=/usr/local/mysql/bin:$PATH
[root@mysql1 /]# cd tpcc-mysql/src
[root@mysql1 src]# make
4.創建庫
[mysql@mysql1 ~]$ mysqladmin -usystem -p123456 -S /data/mysqldata/3306/mysql.sock create tpcc
5.創建表
[mysql@mysql1 ~]$ mysql -usystem -p123456 -S /data/mysqldata/3306/mysql.sock tpcc < /tpcc-mysql/create_table.sql
6.添加外鍵
[mysql@mysql1 ~]$ mysql -usystem -p123456 -S /data/mysqldata/3306/mysql.sock tpcc < /tpcc-mysql/add_fkey_idx.sql
7.加載數據
tpcc 默認會讀取 /var/lib/mysql/mysql.sock 這個socket位置,因此如果你的socket不在相應路徑的話,就需要做個軟連接
[root@mysql1 ~]# ln -s /data/mysqldata/3306/mysql.sock /var/lib/mysql/mysql.sock
[root@mysql1 ~]# ln -s /usr/local/mysql/lib/libmysqlclient.so.18 /usr/lib64
如果出現錯誤,嘗試上面的步驟
[mysql@mysql1 ~]$ /tpcc-mysql/tpcc_load localhost tpcc system "123456" 10
*************************************
*** ###easy### TPC-C Data Loader ***
*************************************
<Parameters>
[server]: localhost
[port]: 3306
[DBname]: tpcc
[user]: system
[pass]: 123456
[warehouse]: 10
TPCC Data Load Started...
Loading Item
.................................................. 5000
.................................................. 10000
.................................................. 15000
...DATA LOADING COMPLETED SUCCESSFULLY.
8.進行測試
[mysql@mysql1 ~]$ /tpcc-mysql/tpcc_start -h localhost -d tpcc -u system -p "123456" -w 1 -c 10 -r 10 -l 20 -f /home/mysql/tpcc_mysql.log -t /home/mysql/tpcc_mysql.rtx
-h:測試主機
-d:測試的數據庫
-u:測試的用戶
-p:測試用戶的密碼
-w:測試的warehouse數
-c:測試的連接線程數
-r:預熱時間,warmup_time,以秒為單位,默認是10秒,目的是為了將數據加載到內存
-l:測試時間,默認為20秒
-i:report_interval指定生成報告的間隔時間
-f:report_file將測試中各項操作的記錄輸出到指定文件內保存
-t:trx_file輸出更詳細的操作信息到指定文件內保存
下面是返回結果:
***************************************
*** ###easy### TPC-C Load Generator ***
***************************************
option h with value 'localhost'
option d with value 'tpcc'
option u with value 'system'
option p with value '123456'
option w with value '1'
option c with value '10'
option r with value '10'
option l with value '20'
option f with value '/home/mysql/tpcc_mysql.log'
option t with value '/home/mysql/tpcc_mysql.rtx'
<Parameters>
[server]: localhost
[port]: 3306
[DBname]: tpcc
[user]: system
[pass]: 123456
[warehouse]: 1
[connection]: 10
[rampup]: 10 (sec.)
[measure]: 20 (sec.)
RAMP-UP TIME.(10 sec.)
MEASURING START.
10, 686(0):2.044|3.593, 684(0):0.487|1.325, 68(0):0.136|0.212, 68(0):2.060|2.095, 69(0):5.817|6.441
20, 676(0):1.508|2.585, 679(0):0.352|1.618, 67(0):0.140|0.294, 68(0):1.585|1.762, 67(0):4.154|5.968
分為6項,依次為操作時間(秒)、創建訂單、訂單支付、查詢訂單、發貨以及查詢庫存
STOPPING THREADS..........
<Raw Results>
[0] sc:1362 lt:0 rt:0 fl:0
[1] sc:1363 lt:0 rt:0 fl:0
[2] sc:135 lt:0 rt:0 fl:0
[3] sc:136 lt:0 rt:0 fl:0
[4] sc:136 lt:0 rt:0 fl:0
in 20 sec.
<Raw Results2(sum ver.)>
[0] sc:1362 lt:0 rt:0 fl:0
[1] sc:1363 lt:0 rt:0 fl:0
[2] sc:135 lt:0 rt:0 fl:0
[3] sc:136 lt:0 rt:0 fl:0
[4] sc:136 lt:0 rt:0 fl:0
<Constraint Check> (all must be [OK])
[transaction percentage]
Payment: 43.52% (>=43.0%) [OK]
Order-Status: 4.31% (>= 4.0%) [OK]
Delivery: 4.34% (>= 4.0%) [OK]
Stock-Level: 4.34% (>= 4.0%) [OK]
[response time (at least 90% passed)]
New-Order: 100.00% [OK]
Payment: 100.00% [OK]
Order-Status: 100.00% [OK]
Delivery: 100.00% [OK]
Stock-Level: 100.00% [OK]
<TpmC>
4086.000 TpmC 每分鍾能夠處理的訂單數量
benchmarkSQL在使用時分為數據准備和測試執行兩個階段,其中數據准備階段完全在命令行環境,而執行測試則根據當前用戶狀態而自動選擇在命令行,或界面中執行。JDK1.7
二、數據准備:
1. 在lib中放置JDBC驅動;
2. 修改run目錄下:run開頭的3個文件,修改里面jdbc驅動名稱;
3. 修改配置文件,其中props.ora和props.pg分別是對應oracle和pg數據庫的;
第一個部分是JDBC連接信息。
第二個部分是場景設置,其中runTxnsPerTerminal是每分鍾執行事務數,runMins是執行多少分鍾,limitTxnsPerMin是每分鍾執行的事務總數,並且這里時間的單位是分鍾。場景執行的最低條件是第二項大於0。
第三個部分是TPCC中,五個事務執行的比例,總數等於100,通常不用修改。
1) 建表:
建表的前提是初始化數據庫
然后執行./runSQL kingbase.properties sqlTableCreates
sqlTableCreates是默認的建表語句,首先在庫中創建一個benchmarksql模式,所有表都創建在這個模式下。
*由於建表語句中沒有表空間的設置信息,因此如果創建比較大的表,系統會報錯,只要根據之前執行TPCC測試時的建表語句,稍加修改即可。
*在ISQL模式下,使用set search_path=模式名; 可以切換當前操作路徑,按默認的方式查看指定模式下的內容。
*在run中,對應建表,建索引,還有刪除表,復制表,刪除索引等幾個腳本,可以配合使用。
2) 加載數據:
在run下執行./runLoader.sh kingbase.properties numWarehouses 1300
注意如果表過大,需要提前修改建表語句,增加表空間。
3) 創建索引:
在run下執行./runSQL kingbase.properties sqlIndexCreates
4) 執行測試:
在run下執行./runBenchmark.sh kingbase.properties
系統開始滾屏,執行指定時間后顯示需要的統計信息:
一、BenchmarkSQL是什么?
BenchmarkSQL是一款經典的開源數據庫測試工具,內嵌了TPCC測試腳本,可以對EnterpriseDB、PostgreSQL、MySQL、Oracle以及SQL Server等數據庫直接進行測試。
二、測試前提
1. 安裝JDK。因為BenchmarkSQL本身是使用Java語言編寫的,所以如果在Linux系統下還沒有安裝JDK的話,我們首先需要對其進行安裝;
2. 安裝PostgreSQL數據庫系統。俗話說巧婦難為無米之炊,測試之前肯定需要有測試對象,本文是測試PG系統,故需安裝有PG;
3. 安裝BenchmarkSQL
可到http://sourceforge.net中搜索BenchmarkSQL即可下到,windows,linux版均有。我下載的是linux版的軟件包BenchmarkSQL-2.3.3.zip,unzip解壓后可以在README文件中看到該軟件的使用說明,下面用中文具體介紹一下它的使用方法。
三、測試步驟
1. 啟動待測試的數據庫系統,這里即指啟動PostgreSQL
2. 在BenchmarkSQL-2.3.3/run目錄下找到postgres.properties配置文件,修改該文件如下:
driver=org.postgresql.Driver
conn=jdbc:postgresql://localhost:5432/test #鏈接數據庫地址
user=postgres #鏈接數據庫用戶名
password=password #密碼
如果想測試其他數據庫系統,則修改其他相應的配置文件即可,如oracle.properties等等。
3. 創建TPC-C基礎表(即上篇博文中介紹的TPC-C模擬場景中9張表)
命令: runSQL.sh postgres.properties sqlTableCreates
4. 向數據庫中導入指定大小的數據(參考資料2中此步有個小問題,多寫一個等號)
命令:loadData.sh postgres.properties numWarehouses 10
numWarehouse指的是倉庫數(具體含義見上篇博文),默認為1,導入9張表的數據大小大概70多M,
當 numWarehouse為10時,數據大小可以近似當作1GB數據。
5. 為基礎表創建必要的索引
命令: runSQL.sh postgres.properties sqlIndexCreates
6. 運行runBenchmark.sh借助GUI程序測試數據庫
命令:runBenchmark.sh postgres.properties
注意:不要忘記設置圖形界面的倉庫數時要與第4步中設置的數量相符;此外,測試的結果報告除了顯示在圖形界面有顯示以外,還在run/reports目錄下有備份,隨時可以查閱。
數據庫TPCC benchmark測試工具對比
https://blog.csdn.net/luke_wang/article/details/71860667