Sphinx は、大量の MySQL 読み取りによってサーバーが停止する問題を解決するのに適したソリューションでしょうか?

Sphinx は、大量の MySQL 読み取りによってサーバーが停止する問題を解決するのに適したソリューションでしょうか?

私は、1 日に約 7 万回のアクセスがあると思われるサイトに取り組んでおり、約 45 以上の異なるテーブルを使用する多くのクエリを使用していますUNION's。これらのテーブルは通常、各テーブルで約 15,000 行から約 500,000 行の範囲です。

query cache可能な限り最適化しましたが、テーブルの 1 つが変更され、キャッシュ内のデータを削除する必要があるたびに、サーバーがロックし始め、mysqltmp dirがいっぱいになり、サーバーの負荷が急上昇します。問題を解決するには、次の操作を行う必要があります。

  1. mysqlを停止します(負荷が通常に戻ります)
  2. データベーステーブルを修復する
  3. MySQLからキャッシュをクリアする
  4. memcache をフラッシュする
  5. データベーステーブルを再度修復する
  6. MySQLを再起動する

複製はおそらく最良のアイデアですが、おそらく最も高価でもありますSphinxhttp://sphinxsearch.com/とても助かります?

以前、別のサイトで INNODB テーブルの全文検索を行うために使用していたため、仕組みについては多少の知識がありますが、このような場合にどのように処理されるかはわかりません。

独自のキャッシュ方法を利用していますか? これを変更しても Sphinx と同じ問題が発生するのは望ましくありません。

編集:以下はスクリーンショットですEXPLAIN(最初の行が欠落しています。スクリーンショット プログラムに問題がありました)

アップデート:現在、このサイトには 1 日あたり 3 万人の訪問者しかいません。

ここに画像の説明を入力してください

答え1

データベースの問題を特定して解決する必要があります。1 日あたり 7 万回のアクセスはそれほど多くなく、MySQL はその量の作業を処理できます。MySQL mysqlreportMyISAM および InnoDB バッファーの使用状況を分析および調整するには、または同様のツールをダウンロードして使用する必要があります (まだ MyISAM を使用している場合は、InnoDB に切り替えることもお勧めします)。次のステップは、MySQL でスロー クエリのログを有効にし、pt-query-digestツールとEXPLAINMySQL コマンドを使用してスロー クエリ ログを毎日分析することです。おそらく、データベースには適切なインデックスがありません。

関連情報