MySQLデータベースを使用して、Node.jsおよびExpressでアプリケーションを実行しています。私が使用しているドライバーはnode-orm2です。ユーザーから「接続が多すぎます」というエラーが報告され続けています。問題を診断しましたが、修正方法がわかりません。
基本的に何が起こっているかというと、新しいユーザーがサイトにアクセスするたびに、ドライバーが新しいスレッド/プロセスを作成します。データベースでクエリを実行するSHOW PROCESSLISTと、そこにTimeofが表示され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);