mysql壓力測試在京東雲ssd雲盤(tpccmysql壓測)
一、環境:京東雲Centos6.8 ,cpu16核,記憶體32G,SAS 3G,轉速未知 ,SSD雲盤300G
mysql 版本是:5.7.20 ,預設rpm安裝,單例項。
壓測工具是:tpcc-mysql5.0
mysql壓力測試在京東雲ssd雲盤
首先載入資料,載入10個warehouse,現在資料庫tpcc1000有9張表,warehouse10條記錄,stock表有100萬,item表有10萬,order_line299萬,new_orders11萬,orders30萬, customer30萬。
二、測試一下雲盤的iops。
三、所有引數不改變,預設安裝,以此作為壓力測試的基準線,進行對比分析,同時附上iostat 和壓測結果
四、更改幾個核心引數,可以看到tps大幅度提高到1217(75035/60).
五、測試3,增加引數innodb_io_capacity,按照理論,tps應該增加的,但是反而下降。
六、增加併發連線到128個
七、開啟二進位制日誌功能,以及刷盤方式,對tps影響都是巨大的。這個結論也可以理解,不停的寫二進位制日誌。假如整個資料庫只用innodb一種引擎,又寫二進位制日誌,又寫innodb日誌,不是重複嗎?但是線上日誌對資料庫的效能影響是絕對巨頭的,甚至可以認為是決定性的。
八、把資料量增加到50個warehouse.這個時候,資料量是這樣的:
現在資料庫tpcc1000有9張表,warehouse10條記錄,stock表有500萬,item表有10萬,order_line1499萬,new_orders45萬,orders150萬, customer150萬,檢視一下實際表空間的大小3.9G:
九、來做一個壓測,這裡要說明一下測試7引數配置和測試6配置一樣。從結果來看,增加資料量,對tps影響不大。主要引數如下:
innodb_buffer_pool_size = 22938M
innodb_buffer_pool_instances = 8
skip-name-resolve
transaction_isolation=READ-COMMITTED
innodb_log_file_size = 512M
innodb_log_buffer_size = 128M
innodb_log_files_in_group=5
innodb_temp_data_file_path=ibtmp1:512M:autoextend
#autocommit=0
server_id=1
binlog_format=row
log_bin = binlog
sync_binlog=0
十、把warehouse 增加到500個,
把資料量增加到50個warehouse.這個時候,資料量是這樣的:
現在資料庫tpcc1000有9張表,warehouse10條記錄,stock表有5000萬,item表有10萬,order_line1.49億,new_orders450萬,orders1500萬, customer1500萬,檢視一下實際表空間的大小38G:
十一、先做一個測試線,看看情況有報錯,報錯如下:
1461, 42000, Can't create more than max_prepared_stmt_count statements (current value: 16382)
mysql 版本是:5.7.20 ,預設rpm安裝,單例項。
壓測工具是:tpcc-mysql5.0
mysql壓力測試在京東雲ssd雲盤
首先載入資料,載入10個warehouse,現在資料庫tpcc1000有9張表,warehouse10條記錄,stock表有100萬,item表有10萬,order_line299萬,new_orders11萬,orders30萬, customer30萬。
-
現在資料庫tpcc1000有9張表,warehouse10條記錄,stock表有100萬,item表有10萬,order_line1186萬,new_orders11萬,orders118萬, customer30萬,檢視一下實際表空間的大小:
-
[mysql@mysql3 mysql1]$ ls -lhS tpcc1000/
-
total 2.3G
-
-rw-r----- 1 mysql mysql 1.6G Jan 5 18:51 order_line.ibd
-
-rw-r----- 1 mysql mysql 352M Jan 5 18:51 stock.ibd
-
-rw-r----- 1 mysql mysql 188M Jan 5 18:51 customer.ibd
-
-rw-r----- 1 mysql mysql 96M Jan 5 18:51 history.ibd
-
-rw-r----- 1 mysql mysql 68M Jan 5 18:51 orders.ibd
-
-rw-r----- 1 mysql mysql 17M Jan 5 17:47 item.ibd
-
-rw-r----- 1 mysql mysql 13M Jan 5 18:51 new_orders.ibd
-
-rw-r----- 1 mysql mysql 96K Jan 5 18:51 district.ibd
-
-rw-r----- 1 mysql mysql 96K Jan 5 18:51 warehouse.ibd
-
-rw-r----- 1 mysql mysql 9.2K Jan 5 17:44 customer.frm
-
-rw-r----- 1 mysql mysql 9.0K Jan 5 17:44 stock.frm
-
-rw-r----- 1 mysql mysql 8.8K Jan 5 17:44 order_line.frm
-
-rw-r----- 1 mysql mysql 8.8K Jan 5 17:44 district.frm
-
-rw-r----- 1 mysql mysql 8.7K Jan 5 17:44 warehouse.frm
-
-rw-r----- 1 mysql mysql 8.7K Jan 5 17:44 orders.frm
-
-rw-r----- 1 mysql mysql 8.7K Jan 5 17:44 history.frm
-
-rw-r----- 1 mysql mysql 8.5K Jan 5 17:44 item.frm
-
-rw-r----- 1 mysql mysql 8.5K Jan 5 17:44 new_orders.frm
- -rw-r----- 1 mysql mysql 65 Jan 5 17:40 db.opt
二、測試一下雲盤的iops。
點選(此處)摺疊或開啟
-
在京東雲上面的高效雲盤測試,首先測試雲盤的SSD的iops隨機讀寫是4144
-
[root@mysql3 data]# fio --name=myjob --filename=/dev/vdb --ioengine=libaio --direct=1 --bs=4k --rw=randrw --iodepth=32 --runtime=60
-
myjob: (g=0): rw=randrw, bs=4K-4K/4K-4K/4K-4K, ioengine=libaio, iodepth=32
-
fio-2.0.13
-
Starting 1 process
-
Jobs: 1 (f=1): [m] [100.0% done] [1408K/1332K/0K /s] [352 /333 /0 iops] [eta 00m:00s]
-
myjob: (groupid=0, jobs=1): err= 0: pid=10136: Fri Jan 5 16:31:42 2018
-
read : io=999840KB, bw=16578KB/s, iops=4144 , runt= 60310msec
-
slat (usec): min=2 , max=191 , avg= 6.23, stdev= 3.63
-
clat (usec): min=177 , max=727001 , avg=3576.38, stdev=23287.21
-
lat (usec): min=208 , max=727011 , avg=3583.03, stdev=23287.50
-
clat percentiles (usec):
-
| 1.00th=[ 270], 5.00th=[ 302], 10.00th=[ 322], 20.00th=[ 350],
-
| 30.00th=[ 374], 40.00th=[ 394], 50.00th=[ 418], 60.00th=[ 438],
-
| 70.00th=[ 466], 80.00th=[ 502], 90.00th=[ 572], 95.00th=[ 660],
-
| 99.00th=[150528], 99.50th=[171008], 99.90th=[246784], 99.95th=[350208],
-
| 99.99th=[399360]
-
bw (KB/s) : min= 680, max=81632, per=100.00%, avg=16654.07, stdev=29344.48
-
write: io=976.74MB, bw=16584KB/s, iops=4145 , runt= 60310msec
-
slat (usec): min=2 , max=768 , avg= 8.32, stdev= 6.68
-
clat (usec): min=126 , max=730161 , avg=4122.61, stdev=24096.23
-
lat (usec): min=360 , max=730172 , avg=4131.36, stdev=24096.59
-
clat percentiles (usec):
-
| 1.00th=[ 482], 5.00th=[ 540], 10.00th=[ 580], 20.00th=[ 620],
-
| 30.00th=[ 660], 40.00th=[ 692], 50.00th=[ 724], 60.00th=[ 756],
-
| 70.00th=[ 788], 80.00th=[ 836], 90.00th=[ 932], 95.00th=[ 1080],
-
| 99.00th=[154624], 99.50th=[175104], 99.90th=[248832], 99.95th=[350208],
-
| 99.99th=[399360]
-
bw (KB/s) : min= 720, max=81520, per=100.00%, avg=16658.87, stdev=29264.19
-
lat (usec) : 250=0.12%, 500=40.73%, 750=36.85%, 1000=17.52%
-
lat (msec) : 2=2.07%, 4=0.16%, 10=0.03%, 20=0.04%, 50=0.64%
-
lat (msec) : 100=0.01%, 250=1.75%, 500=0.10%, 750=0.01%
-
cpu : usr=2.24%, sys=8.53%, ctx=142694, majf=0, minf=24
-
IO depths : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.1%, 16=0.1%, 32=100.0%, >=64=0.0%
-
submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
-
complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.1%, 64=0.0%, >=64=0.0%
-
issued : total=r=249960/w=250039/d=0, short=r=0/w=0/d=0
-
-
Run status group 0 (all jobs):
-
READ: io=999840KB, aggrb=16578KB/s, minb=16578KB/s, maxb=16578KB/s, mint=60310msec, maxt=60310msec
-
WRITE: io=976.74MB, aggrb=16583KB/s, minb=16583KB/s, maxb=16583KB/s, mint=60310msec, maxt=60310msec
-
-
Disk stats (read/write):
- vdb: ios=250022/250028, merge=0/0, ticks=881619/1016273, in_queue=1902612, util=99.90%
三、所有引數不改變,預設安裝,以此作為壓力測試的基準線,進行對比分析,同時附上iostat 和壓測結果
點選(此處)摺疊或開啟
- 測試1 基準測試線。使用mysql5.7.20,所有的引數不改變,預設安裝,開始壓測,做為基準線。
-
[root@mysql3 tpcc-mysql]# ./tpcc_start -hlocalhost -dtpcc1000 -utpcc_user -ptpcc_password -w10 -c64 -r60 -l180 -ftpcc_mysql_20180102.log
-
***************************************
-
*** ###easy### TPC-C Load Generator ***
-
***************************************
-
option h with value 'localhost'
-
option d with value 'tpcc1000'
-
option u with value 'tpcc_user'
-
option p with value 'tpcc_password'
-
option w with value '10'
-
option c with value '64'
-
option r with value '60'
-
option l with value '180'
-
option f with value 'tpcc_mysql_20180102.log'
-
<Parameters>
-
[server]: localhost
-
[port]: 3306
-
[DBname]: tpcc1000
-
[user]: tpcc_user
-
[pass]: tpcc_password
-
[warehouse]: 10
-
[connection]: 64
-
[rampup]: 60 (sec.)
-
[measure]: 180 (sec.)
-
-
RAMP-UP TIME.(60 sec.)
-
-
-
<Raw Results>
-
[0] sc:35014 lt:1 rt:0 fl:0
-
[1] sc:35002 lt:0 rt:0 fl:0
-
[2] sc:3501 lt:0 rt:0 fl:0
-
[3] sc:3497 lt:0 rt:0 fl:0
-
[4] sc:3501 lt:0 rt:0 fl:0
-
in 180 sec.
-
-
<Raw Results2(sum ver.)>
-
[0] sc:35014 lt:1 rt:0 fl:0
-
[1] sc:35015 lt:0 rt:0 fl:0
-
[2] sc:3501 lt:0 rt:0 fl:0
-
[3] sc:3497 lt:0 rt:0 fl:0
-
[4] sc:3501 lt:0 rt:0 fl:0
-
-
<Constraint Check> (all must be [OK])
-
[transaction percentage]
-
Payment: 43.47% (>=43.0%) [OK]
-
Order-Status: 4.35% (>= 4.0%) [OK]
-
Delivery: 4.34% (>= 4.0%) [OK]
-
Stock-Level: 4.35% (>= 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>
- 11671.667 TpmC
- iostat 統計資訊
-
avg-cpu: %user %nice %system %iowait %steal %idle
17.86 0.00 5.91 9.87 0.02 66.34
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await r_await w_await svctm %util
vda 0.00 0.00 0.00 0.12 0.00 1.00 8.00 0.00 3.00 0.00 3.00 3.00 0.04
vdb 0.00 19211.00 0.00 6432.75 0.00 202909.00 31.54 11.59 1.80 0.00 1.80 0.15 95.75
四、更改幾個核心引數,可以看到tps大幅度提高到1217(75035/60).
點選(此處)摺疊或開啟
- 測試2:增加引數,tps大幅增加,是有原因的,增大了記憶體
-
innodb_buffer_pool_size = 22938M
innodb_buffer_pool_instances = 8
skip-name-resolve
transaction_isolation=READ-COMMITTED -
innodb_log_file_size = 512M
innodb_log_buffer_size = 128M
innodb_log_files_in_group=5
innodb_temp_data_file_path=ibtmp1:512M:autoextend -
[root@mysql3 tpcc-mysql]# ./tpcc_start -hlocalhost -dtpcc1000 -utpcc_user -ptpcc_password -w10 -c64 -r60 -l180 -ftpcc_mysql_20180102.log
-
***************************************
-
*** ###easy### TPC-C Load Generator ***
-
***************************************
-
option h with value 'localhost'
-
option d with value 'tpcc1000'
-
option u with value 'tpcc_user'
-
option p with value 'tpcc_password'
-
option w with value '10'
-
option c with value '64'
-
option r with value '60'
-
option l with value '180'
-
option f with value 'tpcc_mysql_20180102.log'
-
<Parameters>
-
[server]: localhost
-
[port]: 3306
-
[DBname]: tpcc1000
-
[user]: tpcc_user
-
[pass]: tpcc_password
-
[warehouse]: 10
-
[connection]: 64
-
[rampup]: 60 (sec.)
-
[measure]: 180 (sec.)
-
-
RAMP-UP TIME.(60 sec.)
-
-
MEASURING START.
-
-
<Raw Results>
-
[0] sc:219107 lt:0 rt:0 fl:0
-
[1] sc:219072 lt:0 rt:0 fl:0
-
[2] sc:21909 lt:0 rt:0 fl:0
-
[3] sc:21908 lt:0 rt:0 fl:0
-
[4] sc:21912 lt:0 rt:0 fl:0
-
in 180 sec.
-
-
<Raw Results2(sum ver.)>
-
[0] sc:219108 lt:0 rt:0 fl:0
-
[1] sc:219108 lt:0 rt:0 fl:0
-
[2] sc:21909 lt:0 rt:0 fl:0
-
[3] sc:21911 lt:0 rt:0 fl:0
-
[4] sc:21912 lt:0 rt:0 fl:0
-
-
<Constraint Check> (all must be [OK])
-
[transaction percentage]
-
Payment: 43.47% (>=43.0%) [OK]
-
Order-Status: 4.35% (>= 4.0%) [OK]
-
Delivery: 4.35% (>= 4.0%) [OK]
-
Stock-Level: 4.35% (>= 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>
- 73035.664 TpmC
iostat 統計資料
avg-cpu: %user %nice %system %iowait %steal %idle
74.08 0.00 11.53 1.19 0.01 13.19
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
vda 0.00 0.75 0.00 0.50 0.00 5.00 20.00 0.00 0.00 0.00 0.00 0.00 0.00
vdb 0.00 5584.00 0.00 1509.38 0.00 28306.00 37.51 1.43 0.95 0.00 0.95 0.49 73.60
avg-cpu: %user %nice %system %iowait %steal %idle
74.08 0.00 11.53 1.19 0.01 13.19
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
vda 0.00 0.75 0.00 0.50 0.00 5.00 20.00 0.00 0.00 0.00 0.00 0.00 0.00
vdb 0.00 5584.00 0.00 1509.38 0.00 28306.00 37.51 1.43 0.95 0.00 0.95 0.49 73.60
- 測試3:增加引數,主要增加innodb_io_capacity,按照理論,tps應該增加的,但是反而下降10000,具體檢視下,看看是有沒有鎖。
-
innodb_io_capacity = 10000
innodb_io_capacity_max = 20000
innodb_flush_neighbors = 0
innodb_write_io_threads = 8
innodb_read_io_threads = 8
innodb_purge_threads = 4
innodb_page_cleaners = 4
innodb_open_files = 65535
innodb_max_dirty_pages_pct = 50
-
[root@mysql3 tpcc-mysql]# ./tpcc_start -hlocalhost -dtpcc1000 -utpcc_user -ptpcc_password -w10 -c64 -r60 -l180 -ftpcc_mysql_20180102.log
-
***************************************
-
*** ###easy### TPC-C Load Generator ***
-
***************************************
-
option h with value 'localhost'
-
option d with value 'tpcc1000'
-
option u with value 'tpcc_user'
-
option p with value 'tpcc_password'
-
option w with value '10'
-
option c with value '64'
-
option r with value '60'
-
option l with value '180'
-
option f with value 'tpcc_mysql_20180102.log'
-
<Parameters>
-
[server]: localhost
-
[port]: 3306
-
[DBname]: tpcc1000
-
[user]: tpcc_user
-
[pass]: tpcc_password
-
[warehouse]: 10
-
[connection]: 64
-
[rampup]: 60 (sec.)
-
[measure]: 180 (sec.)
-
-
RAMP-UP TIME.(60 sec.)
-
-
MEASURING START.
-
-
<Raw Results>
-
[0] sc:201891 lt:0 rt:0 fl:0
-
[1] sc:201850 lt:0 rt:0 fl:0
-
[2] sc:20190 lt:0 rt:0 fl:0
-
[3] sc:20187 lt:0 rt:0 fl:0
-
[4] sc:20186 lt:0 rt:0 fl:0
-
in 180 sec.
-
-
<Raw Results2(sum ver.)>
-
[0] sc:201895 lt:0 rt:0 fl:0
-
[1] sc:201884 lt:0 rt:0 fl:0
-
[2] sc:20190 lt:0 rt:0 fl:0
-
[3] sc:20189 lt:0 rt:0 fl:0
-
[4] sc:20187 lt:0 rt:0 fl:0
-
-
<Constraint Check> (all must be [OK])
-
[transaction percentage]
-
Payment: 43.47% (>=43.0%) [OK]
-
Order-Status: 4.35% (>= 4.0%) [OK]
-
Delivery: 4.35% (>= 4.0%) [OK]
-
Stock-Level: 4.35% (>= 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>
- 67297.000 TpmC
iostat 的統計資訊
avg-cpu: %user %nice %system %iowait %steal %idle
70.27 0.00 11.00 1.60 0.01 17.12
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
vda 0.00 1.33 0.00 2.00 0.00 13.33 13.33 0.00 0.00 0.00 0.00 0.00 0.00
vdb 0.00 8142.89 0.00 2545.33 0.00 42552.89 33.44 5.40 2.12 0.00 2.12 0.31 77.98
avg-cpu: %user %nice %system %iowait %steal %idle
70.27 0.00 11.00 1.60 0.01 17.12
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
vda 0.00 1.33 0.00 2.00 0.00 13.33 13.33 0.00 0.00 0.00 0.00 0.00 0.00
vdb 0.00 8142.89 0.00 2545.33 0.00 42552.89 33.44 5.40 2.12 0.00 2.12 0.31 77.98
這次tps下降了。所以我們要恢復原來的引數。把這些引數清除繼續下面的測試
六、增加併發連線到128個
- 測試4.引數不調整,但是增加併發連線到128個。看tps77476,沒有很大的提高,併發可以撐得住。對系統影響較小
-
[root@mysql3 tpcc-mysql]# ./tpcc_start -hlocalhost -dtpcc1000 -utpcc_user -ptpcc_password -w10 -c128 -r60 -l180 -ftpcc_mysql_20180102.log
-
***************************************
-
*** ###easy### TPC-C Load Generator ***
-
***************************************
-
option h with value 'localhost'
-
option d with value 'tpcc1000'
-
option u with value 'tpcc_user'
-
option p with value 'tpcc_password'
-
option w with value '10'
-
option c with value '128'
-
option r with value '60'
-
option l with value '180'
-
option f with value 'tpcc_mysql_20180102.log'
-
<Parameters>
-
[server]: localhost
-
[port]: 3306
-
[DBname]: tpcc1000
-
[user]: tpcc_user
-
[pass]: tpcc_password
-
[warehouse]: 10
-
[connection]: 128
-
[rampup]: 60 (sec.)
- [measure]: 180 (sec.)
- RAMP-UP TIME.(60 sec.)
- MEASURING START.
-
- STOPPING THREADS................................................................................................................................
-
<Raw Results>
-
[0] sc:232429 lt:0 rt:0 fl:0
-
[1] sc:232379 lt:0 rt:0 fl:0
-
[2] sc:23247 lt:0 rt:0 fl:0
-
[3] sc:23246 lt:0 rt:0 fl:0
-
[4] sc:23246 lt:0 rt:0 fl:0
-
in 180 sec.
-
-
<Raw Results2(sum ver.)>
-
[0] sc:232430 lt:0 rt:0 fl:0
-
[1] sc:232417 lt:0 rt:0 fl:0
-
[2] sc:23247 lt:0 rt:0 fl:0
-
[3] sc:23246 lt:0 rt:0 fl:0
-
[4] sc:23246 lt:0 rt:0 fl:0
-
-
<Constraint Check> (all must be [OK])
-
[transaction percentage]
-
Payment: 43.47% (>=43.0%) [OK]
-
Order-Status: 4.35% (>= 4.0%) [OK]
-
Delivery: 4.35% (>= 4.0%) [OK]
-
Stock-Level: 4.35% (>= 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>
- 77476.336 TpmC
- iostat 統計資訊
-
avg-cpu: %user %nice %system %iowait %steal %idle
78.48 0.00 11.64 0.77 0.00 9.11
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await r_await w_await svctm %util
vda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
vdb 0.00 6027.25 0.00 1488.25 0.00 59964.00 40.29 1.41 0.95 0.00 0.95 0.45 67.21
七、開啟二進位制日誌功能,以及刷盤方式,對tps影響都是巨大的。這個結論也可以理解,不停的寫二進位制日誌。假如整個資料庫只用innodb一種引擎,又寫二進位制日誌,又寫innodb日誌,不是重複嗎?但是線上日誌對資料庫的效能影響是絕對巨頭的,甚至可以認為是決定性的。
點選(此處)摺疊或開啟
- 測試5:增加引數,表示開啟二進位制日誌功能,tps效能大幅下跌到17523,我檢視binlog日誌,有個1.1Gbinlog.000001,還有一個276M的binlog.0000002日誌檔案。所有的效能損耗在寫二進位制日誌檔案上。測試6:如果sync_binlog變為0,我的tps測試結果為44691.332 TpmC 。所以說不控制的話,tps應該有提高,提高效果還是很明顯的哦。
-
server_id=1
-
binlog_format=row
-
log_bin = binlog
-
sync_binlog=1
-
[root@mysql3 tpcc-mysql]# ./tpcc_start -hlocalhost -dtpcc1000 -utpcc_user -ptpcc_password -w10 -c64 -r60 -l180 -ftpcc_mysql_20180102.log
-
***************************************
-
*** ###easy### TPC-C Load Generator ***
-
***************************************
-
option h with value 'localhost'
-
option d with value 'tpcc1000'
-
option u with value 'tpcc_user'
-
option p with value 'tpcc_password'
-
option w with value '10'
-
option c with value '64'
-
option r with value '60'
-
option l with value '180'
- option f with value 'tpcc_mysql_20180102.log'
-
-
<Raw Results>
-
[0] sc:52564 lt:5 rt:0 fl:0
-
[1] sc:52560 lt:0 rt:0 fl:0
-
[2] sc:5257 lt:0 rt:0 fl:0
-
[3] sc:5257 lt:0 rt:0 fl:0
-
[4] sc:5258 lt:0 rt:0 fl:0
-
in 180 sec.
-
-
<Raw Results2(sum ver.)>
-
[0] sc:52565 lt:5 rt:0 fl:0
-
[1] sc:52571 lt:0 rt:0 fl:0
-
[2] sc:5258 lt:0 rt:0 fl:0
-
[3] sc:5257 lt:0 rt:0 fl:0
-
[4] sc:5258 lt:0 rt:0 fl:0
-
-
<Constraint Check> (all must be [OK])
-
[transaction percentage]
-
Payment: 43.47% (>=43.0%) [OK]
-
Order-Status: 4.35% (>= 4.0%) [OK]
-
Delivery: 4.35% (>= 4.0%) [OK]
-
Stock-Level: 4.35% (>= 4.0%) [OK]
-
[response time (at least 90% passed)]
-
New-Order: 99.99% [OK]
-
Payment: 100.00% [OK]
-
Order-Status: 100.00% [OK]
-
Delivery: 100.00% [OK]
-
Stock-Level: 100.00% [OK]
-
-
<TpmC>
- 17523.000 TpmC
現在資料庫tpcc1000有9張表,warehouse10條記錄,stock表有500萬,item表有10萬,order_line1499萬,new_orders45萬,orders150萬, customer150萬,檢視一下實際表空間的大小3.9G:
-
[root@mysql3 ~]# ll /data/mysql1/tpcc1000/ -hS
-
total 3.9G
-
-rw-r----- 1 mysql mysql 1.7G Jan 10 11:13 stock.ibd
-
-rw-r----- 1 mysql mysql 1.1G Jan 10 11:40 order_line.ibd
-
-rw-r----- 1 mysql mysql 920M Jan 10 11:22 customer.ibd
-
-rw-r----- 1 mysql mysql 108M Jan 10 11:22 history.ibd
-
-rw-r----- 1 mysql mysql 68M Jan 10 11:40 orders.ibd
-
-rw-r----- 1 mysql mysql 20M Jan 10 11:40 new_orders.ibd
-
-rw-r----- 1 mysql mysql 17M Jan 10 11:03 item.ibd
-
-rw-r----- 1 mysql mysql 144K Jan 10 11:13 district.ibd
-
-rw-r----- 1 mysql mysql 96K Jan 10 11:11 warehouse.ibd
-
-rw-r----- 1 mysql mysql 9.2K Jan 10 11:01 customer.frm
-
-rw-r----- 1 mysql mysql 9.0K Jan 10 11:01 stock.frm
-
-rw-r----- 1 mysql mysql 8.8K Jan 10 11:01 order_line.frm
-
-rw-r----- 1 mysql mysql 8.8K Jan 10 11:01 district.frm
-
-rw-r----- 1 mysql mysql 8.7K Jan 10 11:01 warehouse.frm
-
-rw-r----- 1 mysql mysql 8.7K Jan 10 11:01 orders.frm
-
-rw-r----- 1 mysql mysql 8.7K Jan 10 11:01 history.frm
-
-rw-r----- 1 mysql mysql 8.5K Jan 10 11:01 item.frm
-
-rw-r----- 1 mysql mysql 8.5K Jan 10 11:01 new_orders.frm
- -rw-r----- 1 mysql mysql 67 Jan 8 16:28 db.opt
innodb_buffer_pool_size = 22938M
innodb_buffer_pool_instances = 8
skip-name-resolve
transaction_isolation=READ-COMMITTED
innodb_log_file_size = 512M
innodb_log_buffer_size = 128M
innodb_log_files_in_group=5
innodb_temp_data_file_path=ibtmp1:512M:autoextend
#autocommit=0
server_id=1
binlog_format=row
log_bin = binlog
sync_binlog=0
- 測試7.增加warehouse到50個
-
[root@mysql3 tpcc-mysql]# ./tpcc_start -hlocalhost -dtpcc1000 -utpcc_user -ptpcc_password -w50 -c128 -r30 -l90 -ftpcc_mysql_20180102.log
-
***************************************
-
*** ###easy### TPC-C Load Generator ***
-
***************************************
-
option h with value 'localhost'
-
option d with value 'tpcc1000'
-
option u with value 'tpcc_user'
-
option p with value 'tpcc_password'
-
option w with value '50'
-
option c with value '128'
-
option r with value '30'
-
option l with value '90'
-
option f with value 'tpcc_mysql_20180102.log'
-
<Parameters>
-
[server]: localhost
-
[port]: 3306
-
[DBname]: tpcc1000
-
[user]: tpcc_user
-
[pass]: tpcc_password
-
[warehouse]: 50
-
[connection]: 128
-
[rampup]: 30 (sec.)
-
[measure]: 90 (sec.)
-
-
RAMP-UP TIME.(30 sec.)
-
-
-
<Raw Results>
-
[0] sc:83245 lt:2 rt:0 fl:0
-
[1] sc:83233 lt:3 rt:0 fl:0
-
[2] sc:8324 lt:0 rt:0 fl:0
-
[3] sc:8322 lt:0 rt:0 fl:0
-
[4] sc:8323 lt:0 rt:0 fl:0
-
in 90 sec.
-
-
<Raw Results2(sum ver.)>
-
[0] sc:83245 lt:2 rt:0 fl:0
-
[1] sc:83250 lt:3 rt:0 fl:0
-
[2] sc:8324 lt:0 rt:0 fl:0
-
[3] sc:8322 lt:0 rt:0 fl:0
-
[4] sc:8323 lt:0 rt:0 fl:0
-
-
<Constraint Check> (all must be [OK])
-
[transaction percentage]
-
Payment: 43.48% (>=43.0%) [OK]
-
Order-Status: 4.35% (>= 4.0%) [OK]
-
Delivery: 4.35% (>= 4.0%) [OK]
-
Stock-Level: 4.35% (>= 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>
- 55498.000 TpmC
- iostat 統計
-
avg-cpu: %user %nice %system %iowait %steal %idle
70.65 0.00 10.26 2.04 0.01 17.04
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await r_await w_await svctm %util
vda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
vdb 0.00 11602.88 27.00 1049.25 1300.00 100851.00 94.91 2.44 2.30 5.16 2.22 0.60 64.59
把資料量增加到50個warehouse.這個時候,資料量是這樣的:
現在資料庫tpcc1000有9張表,warehouse10條記錄,stock表有5000萬,item表有10萬,order_line1.49億,new_orders450萬,orders1500萬, customer1500萬,檢視一下實際表空間的大小38G:
-
[root@mysql3 ~]# ll /data/mysql1/tpcc1000/ -hS
-
total 38G
-
-rw-r----- 1 mysql mysql 17G Jan 10 16:11 stock.ibd
-
-rw-r----- 1 mysql mysql 11G Jan 10 19:27 order_line.ibd
-
-rw-r----- 1 mysql mysql 8.9G Jan 10 16:52 customer.ibd
-
-rw-r----- 1 mysql mysql 988M Jan 10 16:52 history.ibd
-
-rw-r----- 1 mysql mysql 608M Jan 10 19:27 orders.ibd
-
-rw-r----- 1 mysql mysql 128M Jan 10 19:27 new_orders.ibd
-
-rw-r----- 1 mysql mysql 17M Jan 10 15:03 item.ibd
-
-rw-r----- 1 mysql mysql 9.0M Jan 10 16:11 district.ibd
-
-rw-r----- 1 mysql mysql 144K Jan 10 16:10 warehouse.ibd
-
-rw-r----- 1 mysql mysql 9.2K Jan 10 15:02 customer.frm
-
-rw-r----- 1 mysql mysql 9.0K Jan 10 15:02 stock.frm
-
-rw-r----- 1 mysql mysql 8.8K Jan 10 15:02 order_line.frm
-
-rw-r----- 1 mysql mysql 8.8K Jan 10 15:02 district.frm
-
-rw-r----- 1 mysql mysql 8.7K Jan 10 15:02 warehouse.frm
-
-rw-r----- 1 mysql mysql 8.7K Jan 10 15:02 orders.frm
-
-rw-r----- 1 mysql mysql 8.7K Jan 10 15:02 history.frm
-
-rw-r----- 1 mysql mysql 8.5K Jan 10 15:02 item.frm
-
-rw-r----- 1 mysql mysql 8.5K Jan 10 15:02 new_orders.frm
- -rw-r----- 1 mysql mysql 67 Jan 8 16:28 db.opt
1461, 42000, Can't create more than max_prepared_stmt_count statements (current value: 16382)
1040, 08004, Too many connections
這個問題比較好解決,更改兩個引數不報錯了。set global max_prepared_stmt_count=1048576;
壓力測試結果出來了,是5700TpmC.明顯,這個結果是非常低的。問題出在哪裡呢?
這個比較有意思。你對比iostat,和以前測試相比,r/s由0變成了2605,w/s由1488變成了615,avgqu-sz變成了48,等待佇列很多
%util變成了99.99,io是滿負荷的。這說明什麼呢?寫變少了,讀大量增加。為什麼呢?因為資料量變大了,查詢耗時了。
現在要解決的問題是,最佳化查詢語句後再進行壓力測試。
十二、我開啟了mysql的慢查詢,分析哪些語句執行慢。摘錄部分查詢結果如下:
我們看到,這裡面慢查詢都是發生在表orders,有執行7秒的,有執行4秒的,3秒的,有insert語句。我把這些語句單獨拿到
mysql中執行,執行非常快。列印出執行計劃,我看到了所有的語句都走了索引,而且每個語句執行速度很快。這個會是什麼原因呢?我猜測是併發執行緒多,有鎖住情況。但是mysql的查詢是非阻塞的,插入也是非阻塞的,這又是什麼原因呢?先做個驗證:使用256個併發執行緒連線,看看有什麼表現。
十三、我先後做如下壓測,後面附上tps:當庫存數量達到450的時候,效能急劇下降,不清楚mysql哪個指標受限制了。
最後點評:
- 測試8 資料量有38G,很大
-
[root@mysql3 tpcc-mysql]# ./tpcc_start -hlocalhost -dtpcc1000 -utpcc_user -ptpcc_password -w500 -c512 -r10 -l10 -ftpcc_mysql_20180102.log
-
***************************************
-
*** ###easy### TPC-C Load Generator ***
-
***************************************
-
option h with value 'localhost'
-
option d with value 'tpcc1000'
-
option u with value 'tpcc_user'
-
option p with value 'tpcc_password'
-
option w with value '500'
-
option c with value '512'
-
option r with value '10'
-
option l with value '10'
-
option f with value 'tpcc_mysql_20180102.log'
-
<Parameters>
-
[server]: localhost
-
[port]: 3306
-
[DBname]: tpcc1000
-
[user]: tpcc_user
-
[pass]: tpcc_password
-
[warehouse]: 500
-
[connection]: 512
-
[rampup]: 10 (sec.)
-
[measure]: 10 (sec.)
-
- RAMP-UP TIME.(10 sec.)
-
-
<Raw Results>
-
[0] sc:949 lt:1 rt:0 fl:0
-
[1] sc:865 lt:0 rt:0 fl:0
-
[2] sc:85 lt:0 rt:0 fl:0
-
[3] sc:67 lt:0 rt:0 fl:0
-
[4] sc:57 lt:0 rt:0 fl:0
-
in 10 sec.
-
-
<Raw Results2(sum ver.)>
-
[0] sc:949 lt:1 rt:0 fl:0
-
[1] sc:865 lt:0 rt:0 fl:0
-
[2] sc:85 lt:0 rt:0 fl:0
-
[3] sc:67 lt:0 rt:0 fl:0
-
[4] sc:57 lt:0 rt:0 fl:0
-
-
<Constraint Check> (all must be [OK])
-
[transaction percentage]
-
Payment: 42.74% (>=43.0%) [NG] *
-
Order-Status: 4.20% (>= 4.0%) [OK]
-
Delivery: 3.31% (>= 4.0%) [NG] *
-
Stock-Level: 2.82% (>= 4.0%) [NG] *
-
[response time (at least 90% passed)]
-
New-Order: 99.89% [OK]
-
Payment: 100.00% [OK]
-
Order-Status: 100.00% [OK]
-
Delivery: 100.00% [OK]
-
Stock-Level: 100.00% [OK]
-
-
<TpmC>
- 5700.000 TpmC
- iostat 統計資訊:
-
avg-cpu: %user %nice %system %iowait %steal %idle
14.18 0.00 4.84 63.26 0.01 17.71
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await r_await w_await svctm %util
vda 0.00 0.38 0.12 0.88 2.00 10.00 12.00 0.00 0.12 0.00 0.14 0.12 0.01
vdb 1.25 10116.38 2605.50 615.88 204808.00 86800.00 90.52 48.55 14.97 15.37 13.28 0.31 99.99
這個比較有意思。你對比iostat,和以前測試相比,r/s由0變成了2605,w/s由1488變成了615,avgqu-sz變成了48,等待佇列很多
%util變成了99.99,io是滿負荷的。這說明什麼呢?寫變少了,讀大量增加。為什麼呢?因為資料量變大了,查詢耗時了。
現在要解決的問題是,最佳化查詢語句後再進行壓力測試。
%util變成了99.99,io是滿負荷的。這說明什麼呢?寫變少了,讀大量增加。為什麼呢?因為資料量變大了,查詢耗時了。
現在要解決的問題是,最佳化查詢語句後再進行壓力測試。
十二、我開啟了mysql的慢查詢,分析哪些語句執行慢。摘錄部分查詢結果如下:
-
# Query_time: 4.743248 Lock_time: 0.000053 Rows_sent: 0 Rows_examined: 0
-
SET timestamp=1515661062;
-
INSERT INTO orders (o_id, o_d_id, o_w_id, o_c_id, o_entry_d, o_ol_cnt, o_all_local) VALUES(3002, 4, 138, 2870, '2018-01-11 16:57:37', 7, 1);
-
-
# Query_time: 3.139345 Lock_time: 0.000102 Rows_sent: 1 Rows_examined: 3001
-
SET timestamp=1515661062;
-
SELECT o_id, o_entry_d, COALESCE(o_carrier_id,0) FROM orders WHERE o_w_id = 345 AND o_d_id = 8 AND o_c_id = 1069 AND o_id = (SELECT MAX(o_id) FROM orders WHERE o_w_id = 345 AND o_d_id = 8 AND o_c_id = 1069);
-
-
# Query_time: 4.433704 Lock_time: 0.000241 Rows_sent: 1 Rows_examined: 3002
-
SET timestamp=1515661062;
-
SELECT o_id, o_entry_d, COALESCE(o_carrier_id,0) FROM orders WHERE o_w_id = 408 AND o_d_id = 7 AND o_c_id = 760 AND o_id = (SELECT MAX(o_id) FROM orders WHERE o_w_id = 408 AND o_d_id = 7 AND o_c_id = 760);
-
-
# Query_time: 7.391263 Lock_time: 0.000151 Rows_sent: 1 Rows_examined: 3003
-
SET timestamp=1515661062;
- SELECT o_id, o_entry_d, COALESCE(o_carrier_id,0) FROM orders WHERE o_w_id = 253 AND o_d_id = 4 AND o_c_id = 1272 AND o_id = (SELECT MAX(o_id) FROM orders WHERE o_w_id = 253 AND o_d_id = 4 AND o_c_id = 1272)
我們看到,這裡面慢查詢都是發生在表orders,有執行7秒的,有執行4秒的,3秒的,有insert語句。我把這些語句單獨拿到
mysql中執行,執行非常快。列印出執行計劃,我看到了所有的語句都走了索引,而且每個語句執行速度很快。這個會是什麼原因呢?我猜測是併發執行緒多,有鎖住情況。但是mysql的查詢是非阻塞的,插入也是非阻塞的,這又是什麼原因呢?先做個驗證:使用256個併發執行緒連線,看看有什麼表現。
mysql中執行,執行非常快。列印出執行計劃,我看到了所有的語句都走了索引,而且每個語句執行速度很快。這個會是什麼原因呢?我猜測是併發執行緒多,有鎖住情況。但是mysql的查詢是非阻塞的,插入也是非阻塞的,這又是什麼原因呢?先做個驗證:使用256個併發執行緒連線,看看有什麼表現。
mysql中執行,執行非常快。列印出執行計劃,我看到了所有的語句都走了索引,而且每個語句執行速度很快。這個會是什麼原因呢?我猜測是併發執行緒多,有鎖住情況。但是mysql的查詢是非阻塞的,插入也是非阻塞的,這又是什麼原因呢?先做個驗證:使用256個併發執行緒連線,看看有什麼表現。
十三、我先後做如下壓測,後面附上tps:當庫存數量達到450的時候,效能急劇下降,不清楚mysql哪個指標受限制了。
-
-
測試9 ./tpcc_start -hlocalhost -dtpcc1000 -utpcc_user -ptpcc_password -w100 -c64 -r10 -l30 -ftpcc_mysql_20180104.log
-
33200.000 TpmC
-
-
測試10 ./tpcc_start -hlocalhost -dtpcc1000 -utpcc_user -ptpcc_password -w100 -c256 -r10 -l30 -ftpcc_mysql_20180104.log
-
32594.000 TpmC
-
-
測試11 ./tpcc_start -hlocalhost -dtpcc1000 -utpcc_user -ptpcc_password -w250 -c256 -r10 -l30 -ftpcc_mysql_20180104.log
- 30148.000 TpmC
-
測試12 ./tpcc_start -hlocalhost -dtpcc1000 -utpcc_user -ptpcc_password -w450 -c256 -r10 -l30 -ftpcc_mysql_20180104.log
- 17996.000 TpmC
當庫存數量達到450的時候,效能急劇下降,不清楚mysql哪個指標受限制了。
最後點評:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30393770/viewspace-2149755/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- mysql壓力測試在京東雲ssd雲盤sysbench版本MySql
- mysql叢集壓力測試在京東雲盤:sysbench版本MySql
- mysql壓力測試在青雲PCIE盤sysbench版本MySql
- Mysql 壓力測試工具sysbenchMySql
- ORACLE壓力測試Oracle
- laravel壓力測試Laravel
- MACOSXApacheab壓力測試MacApache
- NGINX壓力測試Nginx
- mysqlslap壓力測試MySql
- 壓力測試工具
- MySQL字元函式的壓力測試MySql字元函式
- MySQL基準壓力測試工具MySQLSlapMySql
- apache ab壓力測試工具-批次壓測指令碼Apache指令碼
- nginx壓力測試方法:Nginx
- 壓力測試指令碼指令碼
- (一)效能測試(壓力測試、負載測試)負載
- mysql單例項壓力測試在青雲MySql單例
- 用mysqlslap對MySQL進行壓力測試MySql
- RestCloud測試平臺,支援壓力測試RESTCloud
- 讓測試事半功倍軟體壓力測試工具分享,壓力測試報告怎麼收費?測試報告
- Apache Bench Web 壓力測試ApacheWeb
- oracle壓力測試之orastress!OracleAST
- 壓力測試工具之FIO
- webbench進行壓力測試Web
- mysqlslap壓力測試介紹MySql
- 壓力測試工具之mysqlslapMySql
- 網站壓力測試工具網站
- Oracle壓力測試:HammeroraOracle
- Jmeter效能測試 —— 壓力模式JMeter模式
- 軟體壓力測試怎麼做?出具壓力測試報告軟體測評中心測試報告
- mysql之 mysql資料庫壓力測試工具(mysqlslap)MySql資料庫
- 雲伺服器nginx和webman壓力測試伺服器NginxWeb
- MYSQL壓縮表測試MySql
- Taurus.MVC 效能壓力測試(ap 壓測 和 linux 下wrk 壓測):.NET 版本MVCLinux
- 用雲壓力測試工具,如何完成一次測試任務
- 軟體壓力測試流程和測試工具分享,讓你寫壓力測試報告再也不愁測試報告
- Taurus.MVC 效能壓力測試(ap 壓測 和 linux 下wrk 壓測):.NET Core 版本MVCLinux
- 10大主流壓力測試工具