0

私は常に1秒ごとにmysqlサーバーでLIMIT 1を使用してSELECTクエリを作成するc ++サービスをプログラミングしています。何かが計算され、INSERTが作成され、これが永遠にループします。

サーバーの過負荷を検出して、たとえば LIMIT 10 などのより大きな LIMIT で SELECT を作成し、5 秒ごとなどのより大きな inetrvals で実行したいと考えています。私のソリューションがサーバーの過負荷を軽減するかどうかはわかりません。

私の問題は、これらのオーバーロードを検出する方法であり、オーバーロードの意味がわかりません:)何でもかまいませんが、私のアプリケーションはphp(チャット)のWebアプリケーションであるため、オーバーロードはApache2側またはmysql側で検出できます。または、時間間隔で何人のユーザーが何回の入力 (チャット メッセージ) を行ったかを検出します。知らない :/

ありがとうございました!

EDIT:さて、私は自分のC++アプリケーションからソケットサーバーを作成しましたが、その方法は非常に高速です。現在、メモリリークに苦しんでいますが、それは別の話です。

私の問題について有益な考えをしてくれた@brianbeuningに感謝します。

4

2 に答える 2

1

それを永遠に解決するほうがいいです、それは良い考えではありません。

そのループが本当に必要な場合は、キャッシュ技術を使用してください。

「過負荷」 (MySQL の CPU 使用率が高い) を検出するには、オペレーティング システムでサポートされている外部コマンドを呼び出してみてください。

たとえば、これをLinuxで使用する場合は、 psコマンドで再生します。


編集:

あなたがチャットサーバーをプログラミングしていることに気づきました。MySQL を仲介者として使用することはお勧めできません。MySQL を使用せずにこれを解決してみてください。その後、チャット ログを保存する必要がある場合は、時々 (たとえば 10 秒ごとに) MySQL に保存してください。

集中的なユーザーが 20 人しかいないのに、今のところ CPU を食い尽くしているに違いありません。

サーバーを必要とせずに、クライアントからクライアントへの直接通信を試みます (サーバーは、2 つのクライアント間の通信を確立するためだけに使用します)。

于 2013-02-22T00:32:03.540 に答える
1

もう 1 つの方法は、アプリ内のデータをバッファリングし、ある種の接続プールを使用して負荷を管理することです。挿入する必要があるデータのローリング バッファを保持し、バッファのサイズに基づいて「制限」を管理します。

于 2013-02-22T13:30:09.367 に答える