実データでのMySQL forkパフォーマンステスト

はじめに



Webサーバーシステムのアップグレードは成熟しており、2007年以降、オンラインストアサイトはmysql 5.1 + perl + apache + nginxエンジンで実行されています。



いつものように、出席者の増加に伴い、すべてがデータベースに対して休み始めました。 彼は、現在のデータベースと互換性のある新しいデータベースを選択し始めました。 Mysql 5.5、Mysql 5.6、MariaDB 10、Percona Sever 5.6から選択しました。



ベンチマークの長い研究の後、実際のデータでパフォーマンスをテストする必要があることが明らかになりました。 第一に、ほとんどの場合、InnoDBとXtraDBが比較され、第二に、モンスターサーバーでほとんどクレイジーな負荷がテストされました。興味深いのは、グラフの狭い部分でした。



試験準備



  1. 仮想マシンを作成し、4つのコアと4GBのRAM、Debian 7.6を使用した単純な構成を選択しました。
  2. nginxとapacheを配置し、キャッシュとチューニングなしで設定をそのまま使用します。
  3. 包囲-ストレステストのユーティリティは、標準リポジトリにあります。
  4. サイトの統計を調べ、最も人気のあるページを選択して、サイトの動作を完全にテストします。 先月のヒットで最初の50ページを選択しました。これらのURLをurls.txtに保存します。Yandex.Metricaはこのデータをcsvにアップロードできます。
  5. 必要なドメインの仮想マシンを/ etc / hosts ipに登録します。
  6. 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は標準リポジトリにあります。

  7. 古いデータベースのダンプを転送し、ストレージを置き換えてさらに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を選択しました



その結果、siegeは20スレッドでサイトに1000リクエストを行います。



信頼できるベースのパラメーター



ディスクサイズ:300MB(MyIsam内)

読み取り/書き込み:98%/ 2%



メインテーブルには、40,000エントリ、約200列(商品とそのプロパティを保存)、追加パラメーターが結合されています:製造業者、為替レート、グループ、割引、その他の特別な機能、単位、コレクション...約10の結合。



my.cnf



 key_buffer = 512M
 join_buffer_size = 158M
 max_allowed_pa​​cket = 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 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アドレスの転送だと思います。



All Articles