私は1日に約7万回の訪問があり、約45の異なるテーブルでUNION's
を使用する多くのクエリを使用していると思われるサイトで作業しています。これらのテーブルは、通常、約15,000行から約500k行の範囲です。各テーブルで。
query cache
を可能な限り最適化しましたが、テーブルの1つが変更され、キャッシュ内のデータを削除する必要がある場合は常に、サーバーがロックを開始し、mysql tmp dir
がいっぱいになり、サーバーの負荷が非常に高くなり、問題を解決するには次のことを行う必要があります。
レプリケーションがおそらく最良のアイデアですが、おそらく最も高価でもあることを私は知っています。それで、 http://sphinxsearch.com/ からSphinx
を利用することが大いに役立つかどうか疑問に思いますか?
以前に別のサイトで使用したので、INNODBテーブルで全文検索を取得できるので、その仕組みについては少し知識がありますが、このようなものをどのように処理するかはわかりません。
独自のキャッシュ方法を利用していますか?これに変更したくないので、Sphinxでも同じ問題が発生します。
編集:以下はEXPLAIN
のスクリーンショットです(最初の行がない、スクリーンショットプログラムに問題がありました)
更新:サイトは現在1日あたり30/kの訪問者しか取得していません。
データベースの問題を特定して解決する必要があります。1日あたり7万回の訪問はそれほど多くなく、MySQLはその量の作業を処理できます。 mysqlreport
または同様のツールをダウンロードして使用し、MySQL MyISAMおよびInnoDBバッファーの使用状況を分析および調整する必要があります(MyISAMをまだ使用している場合は、InnoDBに切り替えることもお勧めします)。次のステップは、MySQLでの低速クエリログを有効にし、pt-query-digest
ツールとEXPLAIN
MySQLコマンドを使用して低速クエリログを毎日分析することです。おそらく、データベースに適切なインデックスがありません。