2017-11-24 4 views
0

私は簡単な休憩APIをexpress、knex、およびbookshelfで作成しました。ER_CON_COUNT_ERROR:接続が多すぎるknexと本棚

私はJMeterのといくつかのパフォーマンステストをやっていると私は、私は次のクエリを実行するAPIを呼び出す場合は問題ないことに気付きました:

public static async fetchById(id: number): Promise<DatasetStats> { 
     return DatasetStats.where<DatasetStats>({ id }).fetch(); 
} 

DatasetStatsは

本棚モデルです私は次のように呼び出すことのJMeterを設定した場合しかし、私はエラーを得た:ER_CON_COUNT_ERROR:分後にあまりにも多くの接続:

import * as knex from 'knex'; 

@injectable() 
export class MyRepo { 
    private knex: knex; 

    constructor() {this.knex = knex(DatabaseConfig); } 

    async fetchResourcesList(datasetName: string): Promise<any> { 
     return this.knex.distinct('resource').from(datasetName); 
    } 
} 

問題は、私はknexを作成することが考えられます各リクエストのオブジェクト?

答えて

1

はい。リクエストごとに新しいknexインスタンスを作成した場合、mysql dbへの同時接続の合計数を制御することはできません。また、すでに開いている接続をknexの接続プールから再利用することはできないため、すべてのクエリでデータベースへの新しいTCP接続を開くことは非常に非効率的です。また、クエリの後にあなたのknexインスタンスを破壊しない場合、いくつかのアイドルタイムアウト+アプリケーションがメモリをリークするまで、接続は開いたままになります。

関連する問題