2017-12-21 8 views
0

QPSが100であり、DBサーバーの接続制限が1000であると同時にdbサーバーの要求が多数ある場合、要求が遅くて最終的にinactivity timeoutになるクエリの場合、私はnpm packagemysqlが新しい接続を作成しないようにしますか?npmのmysqlライブラリを使用するとdbを保護する方法は?

npm packagemysqlinactivity timeoutのような致命的なエラーで接続オブジェクトプールから接続オブジェクトを削除し、新しい接続を作成するためのスペースを残しますので。

+0

100クエリ/秒はほぼ中央値です。 max_connections = 1000はかなり高いです。いくつかの非アクティブ期間(wait_timeout)後に接続を削除する必要があります。クライアントは、長時間(数時間)接続してはいけません。 「npm」以外の問題は何ですか? –

+0

@Rick Jamesさん、組み込みの接続プールは、プールからの '非アクティブなタイムアウト'のような致命的なエラーを起こす可能性のある不正な接続オブジェクトを削除し、ソケットは 'FIN'パケットを送り、プールは新しいものを作成します。タイムアウトクエリが何時間も続くと、dbサーバは最後に接続を使います。 – Aflext

答えて

0

負荷が高い場合は、接続が永続的な接続プールを使用する必要があります。これらは通常、ハイレベルクエリビルダとORM(knexsequelizeなど)で利用できます。

しかし、使用したくない場合は、native poolsでもお試しください。

+0

お返事ありがとうございます。しかし、[mysq](https://github.com/mysqljs/mysql#pooling-connections)のプールは、致命的なエラー接続を削除し、リクエストが続行されると新しい接続を作成します。これはdbの接続制限を使いますサーバ – Aflext

+0

接続の上限に達するのを避けるために、最大接続数、最大プール、および最大接続タイムアウトを設定する必要があります。手動で長時間実行する接続を強制終了することもできます。何とかこの問題を別の方法で解決する魔法はありません。 – Jehy

+0

負荷が高い場合は、最大接続数を10に設定しても多くの接続が作成される可能性があります。たとえば、QPS 1000を使用してdbを要求し、それぞれの要求は多くの 'count'私は40分要求をシミュレートする場合、DBサーバーは450の接続を得た! – Aflext

関連する問題