<a href="http://my.oschina.net/javagg/blog/5060" target="_blank">用mysqlslap進行mysql壓力測試</a>
<a target="_blank" href="http://blog.csdn.net/c__ilikeyouma/article/details/8610925">mysqlslap菜鳥譯文</a>
壓測的目的是為了盡量模拟真實情況。測試的表都是由10個int型字段和10個字元串型字段組成。每個測試項目都測試了myisam和innodb兩個引擎。測試的方法都是用兩個線程并發,一共跑10000個請求。
壓測的機器用的是自己的筆記本。cpu是intel(r) core(tm)2 duo cpu p8400, 4g記憶體, sata硬碟。
mysql伺服器端和壓測的用戶端跑在同一台機器上。mysql的版本是5.5.
用到的mysqlslap參數解釋如下:
--concurrency=2 兩個線程
--iterations=1 執行一次
--number-int-cols=10 10個int型字段
--number-char-cols=10 10個字元串字段
-a 等同于--auto-generate-sql
--auto-generate-sql-add-autoincrement 建立auto increment的主鍵
--auto-generate-sql-secondary-indexes=2 建立2列索引
--auto-generate-sql-guid-primary 建立guid作為主鍵
--number-of-queries=10000 所有并發線程的請求次數和
--auto-generate-sql-load-type=write/key/read/update/mixed 測試的query類型
--engine=myisam,innodb 存儲引擎
測試指令:
<code>1</code>
<code>mysqlslap --concurrency=2\</code>
<code>2</code>
<code> </code><code>--iterations=1\</code>
<code>3</code>
<code> </code><code>--number-</code><code>int</code><code>-cols=10\</code>
<code>4</code>
<code> </code><code>--number-</code><code>char</code><code>-cols=10\</code>
<code>5</code>
<code> </code><code>-a\</code>
<code>6</code>
<code> </code><code>--auto-generate-sql-guid-primary\</code>
<code>7</code>
<code> </code><code>--number-of-queries=10000\</code>
<code>8</code>
<code> </code><code>--auto-generate-sql-load-type=write\</code>
<code>9</code>
<code> </code><code>--engine=myisam,innodb\</code>
結果:
<code>01</code>
<code>benchmark</code>
<code>02</code>
<code> </code><code>running</code><code>for</code><code>engine myisam</code>
<code>03</code>
<code> </code><code>average number of seconds to run all queries: 6.110 seconds</code>
<code>04</code>
<code> </code><code>minimum number of seconds to run all queries: 6.110 seconds</code>
<code>05</code>
<code> </code><code>maximum number of seconds to run all queries: 6.110 seconds</code>
<code>06</code>
<code> </code><code>number of clients running queries: 2</code>
<code>07</code>
<code> </code><code>average number of queries per client: 5000</code>
<code>08</code>
<code>09</code>
<code>10</code>
<code> </code><code>running</code><code>for</code><code>engine innodb</code>
<code>11</code>
<code> </code><code>average number of seconds to run all queries: 10.291 seconds</code>
<code>12</code>
<code> </code><code>minimum number of seconds to run all queries: 10.291 seconds</code>
<code>13</code>
<code> </code><code>maximum number of seconds to run all queries: 10.291 seconds</code>
<code>14</code>
<code>15</code>
用myisam每秒處理1639次。
用innodb每秒處理971次。
真實環境中一般會用binlog做資料備份與同步,是以性能會有所下降,有binlog的情況請繼續看後面的實驗。
測試指令與“寫性能測試1”相同,
結果如下:
<code> </code><code>average number of seconds to run all queries: 14.809 seconds</code>
<code> </code><code>minimum number of seconds to run all queries: 14.809 seconds</code>
<code> </code><code>maximum number of seconds to run all queries: 14.809 seconds</code>
<code> </code><code>average number of seconds to run all queries: 26.721 seconds</code>
<code> </code><code>minimum number of seconds to run all queries: 26.721 seconds</code>
<code> </code><code>maximum number of seconds to run all queries: 26.721 seconds</code>
myisam每秒處理675次
innodb每秒處理374次
現實情況中,有索引的情況較多。采用 --auto-generate-sql-secondary-indexes=2 建立兩列索引。
指令如下:
<code> </code><code>--auto-generate-sql-secondary-indexes=2\</code>
<code> </code><code>average number of seconds to run all queries: 16.693 seconds</code>
<code> </code><code>minimum number of seconds to run all queries: 16.693 seconds</code>
<code> </code><code>maximum number of seconds to run all queries: 16.693 seconds</code>
<code> </code><code>average number of seconds to run all queries: 30.418 seconds</code>
<code> </code><code>minimum number of seconds to run all queries: 30.418 seconds</code>
<code> </code><code>maximum number of seconds to run all queries: 30.418 seconds</code>
myisam每秒處理599次。
innodb每秒處理329次。
指令如下:
<code> </code><code>--auto-generate-sql-add-autoincrement\</code>
<code> </code><code>average number of seconds to run all queries: 16.785 seconds</code>
<code> </code><code>minimum number of seconds to run all queries: 16.785 seconds</code>
<code> </code><code>maximum number of seconds to run all queries: 16.785 seconds</code>
<code> </code><code>average number of seconds to run all queries: 28.809 seconds</code>
<code> </code><code>minimum number of seconds to run all queries: 28.809 seconds</code>
<code> </code><code>maximum number of seconds to run all queries: 28.809 seconds</code>
myisam每秒處理595次。
innodb每秒處理347次。
在真實的情況中,我們最主要的讀操作其實就是用主鍵去查找表中的一行。 我主要是對這種行為進行測試。是以采用的load-type = key ,而不是read。 read是對全表進行讀取,可是實際上這種情況很少出現。
<code> </code><code>--auto-generate-sql-unique-query-number=10000\</code>
<code> </code><code>--auto-generate-sql-load-type=key\</code>
<code> </code><code>average number of seconds to run all queries: 4.215 seconds</code>
<code> </code><code>minimum number of seconds to run all queries: 4.215 seconds</code>
<code> </code><code>maximum number of seconds to run all queries: 4.215 seconds</code>
<code> </code><code>average number of seconds to run all queries: 3.917 seconds</code>
<code> </code><code>minimum number of seconds to run all queries: 3.917 seconds</code>
<code> </code><code>maximum number of seconds to run all queries: 3.917 seconds</code>
myisam每秒處理2372次
innodb每秒處理2553次
指令如下
<code>mysqlslap --concurrency=1\</code>
<code> </code><code>average number of seconds to run all queries: 4.555 seconds</code>
<code> </code><code>minimum number of seconds to run all queries: 4.555 seconds</code>
<code> </code><code>maximum number of seconds to run all queries: 4.555 seconds</code>
<code> </code><code>number of clients running queries: 1</code>
<code> </code><code>average number of queries per client: 10000</code>
<code> </code><code>average number of seconds to run all queries: 4.402 seconds</code>
<code> </code><code>minimum number of seconds to run all queries: 4.402 seconds</code>
<code> </code><code>maximum number of seconds to run all queries: 4.402 seconds</code>
myisam每秒處理2195次。
innodb每秒處理2273次。
項目
myisam每秒吞吐量
innodb每秒吞吐量
寫性能測試1,不開binlog, guid主鍵, 無索引
1639
971
寫性能測試2,開binlog,guid主鍵,無索引
675
374
寫性能測試3, 開binlog, guid做主鍵, 有索引
599
329
寫性能測試4,開binglog,auto increment主鍵,有索引
595
347
讀性能測試1,guid主鍵
2372
2553
讀性能測試2,auto increment主鍵
2195
2273
1 在開啟了binlog後, mysql寫性能下降60%
2 myisam與innodb相比,寫的速度更快(快40%), 讀的速度差不多。
<a target="_blank" href="http://my.oschina.net/costaxu/blog/108568?from=20130215">轉載位址</a>