Webアプリケーションでパフォーマンスの問題が発生しました。ボトルネックはdbだということを知りました。アプリケーションは、4つのCPUと2GBのRAMを搭載したLAMPサーバー(VPS)で動作しています。
新しいレコードをDB(約100.000レコードのテーブル)に挿入した後、selectクエリはしばらくの間減速します(時には数分です)。私は問題が再インデックス化していると思っていましたが、挿入後VPSでは実際には何の活動もありません。十分な記憶が残っており、交換する必要はありません。 CPUがアイドル状態です。INSERT後にMySQLの速度が低下する
真実は、選択は非常に複雑ですされています
SELECT COUNT(A.id), B.title FROM B JOIN A .... WHERE ..lot of stuff..
AとBの両方を約100Kレコードを持っています。 Aは多くの列を持ちますが、Bは少数ですが、ネストされた集合で表されるツリー構造です。 Bは頻繁に変わらないが、Aは変わる。条件は主にインデックスによってカバーされます。結果セットには通常約10〜30行あります。
実行できる最適化はありますか?
問題は、私が使用できるツールはVM内だけです。私もvmstatsをチェックし、マシンは実際にはアイドリングしているようです。 アプリが責任を持って実行されていますが、挿入後に問題が発生するのはdb関連です。私は、同時要求がない孤立した環境でテストしました。 複製が進行中ではないので、私はinnodbプールサイズを512MBに設定します。 apacheとmysqlは同じマシンにあります。 – puty