0

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 のクエリがその背後に積み重なって、接続が最大になります。これは明らかに他の多くの問題を引き起こします。

上記のクエリは、可能な限り最適化されていると思っていたにもかかわらず、スロー クエリ ログに一貫して表示されるクエリです。この問題を解決するために、誰かが私に別の方法で教えたり、正しい方向に向けたりすることはできますか?

前もって感謝します。

4

1 に答える 1

0

問題はクエリではありません。データベースへの接続を開いて閉じていませんが、毎回新しい接続を開いています。

于 2012-11-06T00:32:15.120 に答える