MySQL db に対して 30 秒ごとに次のクエリを実行しています。
SELECT message.id FROM message WHERE userto='13689' AND tstampviewed IS NULL AND message.status != 'VOID';
スロー クエリ ログに頻繁に表示されますが、可能な限り最適化されているように見えます。
EXPLAIN の結果:
SELECT_TYPE = シンプル
表 = メッセージ
タイプ = 参照
POSSIBLE_KEYS = ユーザー、tst、stat
KEY = ユーザー
キー_レン = 53
REF = 定数
行 = 1
EXTRA = "Where の使用"
キー userto、tst、および stat はすべて通常の BTREE インデックスであり、クエリの where 句で参照される varchar フィールドごとに 1 つです。これは、300K 行の MyISAM テーブルです。ユーザーは一貫してテーブルに書き込みますが、読み取りの可能性ははるかに高くなります (読み取りと書き込みの比率は 10/1)。db サーバーは、多数の CPU と高速ドライブを備えた Windows 2008 Enterprise です。
max_connections を 750 から 1500 に増やしたにもかかわらず、この 1 か月間、max_connection エラーが発生し続けています。リアルタイムでリスト)、1500 のクエリがその背後に積み重なって、接続が最大になります。これは明らかに他の多くの問題を引き起こします。
上記のクエリは、可能な限り最適化されていると思っていたにもかかわらず、スロー クエリ ログに一貫して表示されるクエリです。この問題を解決するために、誰かが私に別の方法で教えたり、正しい方向に向けたりすることはできますか?
前もって感謝します。