MySQLデータベースを使用して、Node.jsおよびExpressでアプリケーションを実行しています。私が使用しているドライバーはnode-orm2です。ユーザーから「接続が多すぎます」というエラーが報告され続けています。問題を診断しましたが、修正方法がわかりません。
基本的に何が起こっているかというと、新しいユーザーがサイトにアクセスするたびに、ドライバーが新しいスレッド/プロセスを作成します。データベースでクエリを実行するSHOW PROCESSLIST
と、そこにTime
ofが表示され0
ます。
ユーザーがデータベースを必要とする別のアクションを実行すると、同じスレッドが再利用され、Time
に戻り0
ます。ただし、そうでない場合、スレッドは存続し (Command
のSleep
)、Time
ラックアップします。データベースの最大接続制限は250
で、タイムアウトは7200
です。
基本的に、2 時間以内に 250 人を超えるユーザーがサイトを使用すると、「接続が多すぎます」というエラーが表示されます。
接続プールを使用してみましたが、問題が悪化しました。新しいユーザーがデータベースを使用するたびに、10 個のスレッドが作成され、7200 秒のタイムアウトに達すると、スレッドが再生成されました。
ここにはどのようなオプションがありますか?
私の現在の方法では、30 分ごとにスケジュールされたジョブを実行して、長時間開いていたスレッドを閉じていますが、もっと良い方法はありますか?
次の設定を使用しています。
db.settings.set("properties.association_key", "{name}Id");
db.settings.set("instance.autoFetch", true);
db.settings.set("instance.returnAllErrors", true);
db.settings.set("instance.cache", false);