実データでの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



試験結果


列の説明



ベース/ウォッチETimeRTimeTRateコンクわかったLA思い出
Mysql 5.1 MyISAM252.983.953.8315.159696.981055
Mysql 5.5 MyISAM500.197.481.8013.5090214.671265
Mysql 5.6 MyISAM289.895.553.4301/199946.591000
Percona 5.6 MyISAM510.718.421.8015.1591911.761657
MariaDB 10.0 MyISAM351.746.102.7416.7196410.23889
MariaDB 10.0 Ariaページ= 8k Trans904.7612.070.748.8966627.861545
MariaDB 10.0 Ariaページ= 1k NonTrans781.4310.470.949.8973827.761465
Mysql 5.1 InnoDB368.215.912.5508/159407.231241
Mysql 5.6 InnoDB229.924.544.3519.7610006.661414
MariaDB InnoDB223.354.384.4819.6110006.241813
Percona 5.6 XtraDB223.784.424.4719.7510005.091176
MariaDB 10.0 XtraDB222.554.384.4919.6610006.391176


チャート





テストデータから、Maria DBとXtraDB上のPercona Serverを選択します。 私はパーコナにお辞儀をします。 わずかなパフォーマンスの向上に加えて、テーブルクエリに関する拡張された統計と優れたユーティリティセットもあります。

PSテストには約5時間かかりました。ほとんどの場合、軍用車両からデータを転送し、パッケージをインストール/削除するのに時間がかかりました。 一般的に、私のホスト(flops.ru)を使用すると、仮想マシンのクローンを作成できます。約1分かかり、仮想マシン間でIPを転送します。 戦闘用仮想マシン上の古いソフトウェアがなければ、クローンを作成してテストすることができます(お金は消費のために引き落とされます)。 それで時間を大幅に節約できます。

PPS次のステップは、戦闘モードでのテストの手配、仮想マシンのクローンの作成、テストスライスのセットアップ、および1日間の戦闘からのIPアドレスの転送だと思います。

Source: https://habr.com/ru/post/J242337/


All Articles