1

MySQLデータベースを使用して、Node.jsおよびExpressでアプリケーションを実行しています。私が使用しているドライバーはnode-orm2です。ユーザーから「接続が多すぎます」というエラーが報告され続けています。問題を診断しましたが、修正方法がわかりません。

基本的に何が起こっているかというと、新しいユーザーがサイトにアクセスするたびに、ドライバーが新しいスレッド/プロセスを作成します。データベースでクエリを実行するSHOW PROCESSLISTと、そこにTimeofが表示され0ます。

ユーザーがデータベースを必要とする別のアクションを実行すると、同じスレッドが再利用されTimeに戻り0ます。ただし、そうでない場合、スレッドは存続し (CommandSleep)、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);
4

1 に答える 1