web-dev-qa-db-ja.com

WordPress MySQLのパフォーマンス

今日、40,000-50,000ページビューを取得するWebサイト(www.americanbankingnews.com)があります。現在、8GBのRAMを備えた専用のクアッドコアXeonサーバー上にあります。このサイトはWordPressとMySQL(同じサーバー上にある)を使用しており、現在、ページとMySQLクエリキャッシングにW3 Total Cacheを使用しています。

残念ながら、それだけでは十分ではないようです。トラフィックのピーク時には、サーバーでHTTP 500エラーがいくつか発生し、キャッシュされていないページの読み込みが遅くなります。

現在、Xcacheやその他のPHPキャッシュ/加速ツールを使用していません。

MySQLとPHPのパフォーマンスを最適化するためにとるべき追加の手順はありますか?または、追加のサーバーに分岐する必要があります。具体的には、MySQLのパフォーマンスを改善するための追加の提案と、この状況でxcacheのようなツールが役立つかどうかに興味があります。

3
Matthew Paulson

マシンについて気にする前に、WordPressインストールのプラグイン、テンプレートなどの徹底的な監査をまだ行っていますか?

sharedホストに30〜40k /日の範囲のクライアントがあり、サイトの大部分が読み取りに認証を必要としているため、完全な「静的」なSuperCaching )、および彼らはまだ重大なパフォーマンスの不満を持っています。

専用のマシンを1〜10k回しかアクセスしないで噛んでいる場合は、サーバーの能力が不足しているだけでなく、さらに進んでいる可能性があります。

3
Su'

APC (代替PHPキャッシュ)は、既にコンパイルされているPHPコードをキャッシュするため、CPUサイクルの節約に役立ちます。つまり、ページを読み込むたびに、PHPファイルが最初にコンパイルされてから仮想マシンによって実行されず、PHP仮想マシンに直接移動し、パフォーマンスが大幅に向上します( 2倍から12倍にパフォーマンスが向上しました)。

次のステップは、MySQLの最適化です。明らかなステップは、InnoDBを使用しているかどうかを確認することです。 InnoDBのbuffer_pool_sizeをRAMの約90%に増やすと、MySQLが動作するMySQLデータセットがRAMに直接格納されるため、ディスクIOは可能な限り回避されます。

ただし、理想的には、すべてのページをキャッシュすることをお勧めします(1日に投稿されるコンテンツ関連の新しいものはそれほど多くないと思います)。

それにはおそらくいくつかの作業が必要です(またはWordPress modがあるかもしれません。WPとそのプラグインに精通していないので、よくわかりません)。コンテンツをキャッシュすると、データベースの負荷が軽減されます。 1日4万〜5万ビューは読み取り率が高いため、書き込みではなく読み取りを最適化する必要があります。

また、Apacheにとどまり、nginxで PHP FPM を利用するのではなく、 nginx へのスワップを検討することもできます。これにより、パフォーマンスが大幅に向上します。

実際にサーバーに負担をかけるものを見ることなく(ApacheはMySQLに頻繁にアクセスする多くのプロセスを生成していると思います)、これらは現時点で頭に浮かぶ唯一のものです。

2
N.B.

トラフィックの多いサイトでは、現在配置されているコンテンツのすべてのMySQLバッファーを調整する必要があります。 WordPressのバージョンに関係なく、 MySQLレイヤーは設定を計算できます

実際、innodb_file_per_tableを有効にせずにInnoDBデータがある場合、 各テーブルを独自の物理テーブルスペースにセグメント化してInnoDBをクリーンアップする必要があります 。適切なMySQLチューニングを行うことは可能です ハードウェアが限られている場合でもそのようなInnoDB最適化を行うための多くのシナリオ があります。

私見、設定するデータの量を知らずにmy.cnfの適切な設定を計画することはできません。現在のデータセットを運用環境からステージング環境に定期的に読み込み、最適化を実行し、運用サーバーのmy.cnfで構成する数値を取得する必要があります。

1
RolandoMySQLDBA

キャッシングが正しく行われているかどうかを確認することもできます。私はあなたのホームページを見て、これらのポイントを思いつきました-

  1. サムネイルのほとんどは、phpスクリプトによってサイズ変更され、サーバー経由でのみ提供されます。このオーバーヘッドを節約しようとしたかもしれません。
  2. 繰り返し訪問者がいる場合(コンテンツを見る場合)、ブラウザー側のキャッシュを実装してサーバーへのリクエストを減らす必要があります。
  3. 大量のjavascript(広告、分析など)を実行しています。それらを延期し、それらのjsもキャッシュされるようにすることができます。
0
Prasad Ajinkya