天天看點

mysql讀寫性能測試概述和測試環境 寫性能測試 讀性能測試 實驗結果 結論 轉載

<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>

上一篇: iptables備忘
下一篇: mysqlslap