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