はじめに
Webサーバーシステムのアップグレードは成熟しており、2007年以降、オンラインストアサイトはmysql 5.1 + perl + apache + nginxエンジンで実行されています。
いつものように、出席者の増加に伴い、すべてがデータベースに対して休み始めました。 彼は、現在のデータベースと互換性のある新しいデータベースを選択し始めました。 Mysql 5.5、Mysql 5.6、MariaDB 10、Percona Sever 5.6から選択しました。
ベンチマークの長い研究の後、実際のデータでパフォーマンスをテストする必要があることが明らかになりました。 第一に、ほとんどの場合、InnoDBとXtraDBが比較され、第二に、モンスターサーバーでほとんどクレイジーな負荷がテストされました。興味深いのは、グラフの狭い部分でした。
試験準備
- 仮想マシンを作成し、4つのコアと4GBのRAM、Debian 7.6を使用した単純な構成を選択しました。
- nginxとapacheを配置し、キャッシュとチューニングなしで設定をそのまま使用します。
- 包囲-ストレステストのユーティリティは、標準リポジトリにあります。
- サイトの統計を調べ、最も人気のあるページを選択して、サイトの動作を完全にテストします。 先月のヒットで最初の50ページを選択しました。これらのURLをurls.txtに保存します。Yandex.Metricaはこのデータをcsvにアップロードできます。
- 必要なドメインの仮想マシンを/ etc / hosts ipに登録します。
- Mysql、Maria、Perconaのリポジトリを接続します
deb http://mirror.timeweb.ru/mariadb/repo/10.0/debian wheezy main deb-src http://mirror.timeweb.ru/mariadb/repo/10.0/debian wheezy main deb http://repo.flops.ru/debian/ wheezy無料 deb http://repo.percona.com/apt wheezy main deb-src http://repo.percona.com/apt wheezy main deb http://repo.mysql.com/apt/debian/ wheezy mysql-5.6 deb-src http://repo.mysql.com/apt/debian/ wheezy mysql-5.6
Mysql 5.5は標準リポジトリにあります。
- 古いデータベースのダンプを転送し、ストレージを置き換えてさらに2つのダンプを作成します
sed -e 's / myisam / InnoDB / gi' dump_myisam.sql> dump_innodb.sql sed -e 's / myisam / XtraDB / gi' dump_myisam.sql> dump_xtradb.sql
テスト自体
データベースを順番に配置し、そこに作成されたダンプを埋め、包囲を使用してテストを実施します。 新しいデータベースをインストールするとき、以前のパッケージを完全に破棄し、変換を心配しないように、/ var / lib / mysqlディレクトリを削除してから、新しいものでダンプを埋めます。
包囲のパラメーターとして、/ usr / bin / siege -b -c 20 -r 50 -f urls.txt -vを選択しました
- -bはベンチマークモードをオンにし、リクエスト間で任意の一時停止を行いません。このオプションを自由に使用することはできません。
- -c 20は、同時要求の数を設定します。 20を選択しました。これは、私の場合の戦闘構成のピーク負荷にほぼ対応しています。
- -r 50は、各ストリームからのリクエストの数を設定します。すべてを検証するために、テスト用のURLの数を等しくすることは理にかなっています。
- -f urls.txt-テスト済みのサイトURLを使用してファイルを設定します。
その結果、siegeは20スレッドでサイトに1000リクエストを行います。
信頼できるベースのパラメーター
ディスクサイズ:300MB(MyIsam内)
読み取り/書き込み:98%/ 2%
メインテーブルには、40,000エントリ、約200列(商品とそのプロパティを保存)、追加パラメーターが結合されています:製造業者、為替レート、グループ、割引、その他の特別な機能、単位、コレクション...約10の結合。
my.cnf
key_buffer = 512M join_buffer_size = 158M max_allowed_packet = 16M thread_stack = 192K thread_cache_size = 8 myisam-recover = BACKUP max_connections = 100 table_cache = 500 query_cache_limit = 16M query_cache_size = 2G innodb_log_file_size = 50M innodb_buffer_pool_size = 512M innodb_log_buffer_size = 8M innodb_file_per_table = 1 innodb_open_files = 2548 innodb_io_capacity = 400 innodb_flush_method = O_DIRECT
試験結果
列の説明
- ETime-合計テスト時間(1000リクエスト)秒
- RTime-秒単位の平均応答時間
- TRate -1秒あたりのクエリの平均数
- Conc-同時に顧客の最大数
- OK-正常に処理されたリクエストの数(ステータス200 OK)
- LA-テスト中の最大負荷平均
- MEM -virtualka上の総占有メモリ
ベース/ウォッチ | ETime | RTime | TRate | コンク | わかった | LA | 思い出 |
---|---|---|---|---|---|---|---|
Mysql 5.1 MyISAM | 252.98 | 3.95 | 3.83 | 15.15 | 969 | 6.98 | 1055 |
Mysql 5.5 MyISAM | 500.19 | 7.48 | 1.80 | 13.50 | 902 | 14.67 | 1265 |
Mysql 5.6 MyISAM | 289.89 | 5.55 | 3.43 | 01/19 | 994 | 6.59 | 1000 |
Percona 5.6 MyISAM | 510.71 | 8.42 | 1.80 | 15.15 | 919 | 11.76 | 1657 |
MariaDB 10.0 MyISAM | 351.74 | 6.10 | 2.74 | 16.71 | 964 | 10.23 | 889 |
MariaDB 10.0 Ariaページ= 8k Trans | 904.76 | 12.07 | 0.74 | 8.89 | 666 | 27.86 | 1545 |
MariaDB 10.0 Ariaページ= 1k NonTrans | 781.43 | 10.47 | 0.94 | 9.89 | 738 | 27.76 | 1465 |
Mysql 5.1 InnoDB | 368.21 | 5.91 | 2.55 | 08/15 | 940 | 7.23 | 1241 |
Mysql 5.6 InnoDB | 229.92 | 4.54 | 4.35 | 19.76 | 1000 | 6.66 | 1414 |
MariaDB InnoDB | 223.35 | 4.38 | 4.48 | 19.61 | 1000 | 6.24 | 1813 |
Percona 5.6 XtraDB | 223.78 | 4.42 | 4.47 | 19.75 | 1000 | 5.09 | 1176 |
MariaDB 10.0 XtraDB | 222.55 | 4.38 | 4.49 | 19.66 | 1000 | 6.39 | 1176 |
チャート
テストデータから、Maria DBとXtraDB上のPercona Serverを選択します。 私はパーコナにお辞儀をします。 わずかなパフォーマンスの向上に加えて、テーブルクエリに関する拡張された統計と優れたユーティリティセットもあります。
PSテストには約5時間かかりました。ほとんどの場合、軍用車両からデータを転送し、パッケージをインストール/削除するのに時間がかかりました。 一般的に、私のホスト(flops.ru)を使用すると、仮想マシンのクローンを作成できます。約1分かかり、仮想マシン間でIPを転送します。 戦闘用仮想マシン上の古いソフトウェアがなければ、クローンを作成してテストすることができます(お金は消費のために引き落とされます)。 それで時間を大幅に節約できます。
PPS次のステップは、戦闘モードでのテストの手配、仮想マシンのクローンの作成、テストスライスのセットアップ、および1日間の戦闘からのIPアドレスの転送だと思います。