web-dev-qa-db-ja.com

Sphinxは、サーバーが大量のMySQL読み取りで行き詰まるのを解決するための優れたソリューションでしょうか?

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

query cacheを可能な限り最適化しましたが、テーブルの1つが変更され、キャッシュ内のデータを削除する必要がある場合は常に、サーバーがロックを開始し、mysql tmp dirがいっぱいになり、サーバーの負荷が非常に高くなり、問題を解決するには次のことを行う必要があります。

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

レプリケーションがおそらく最良のアイデアですが、おそらく最も高価でもあることを私は知っています。それで、 http://sphinxsearch.com/ からSphinxを利用することが大いに役立つかどうか疑問に思いますか?

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

独自のキャッシュ方法を利用していますか?これに変更したくないので、Sphinxでも同じ問題が発生します。

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

更新:サイトは現在1日あたり30/kの訪問者しか取得していません。

enter image description here

1
Brett

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

3
Alex