我有一个简单的休息api,用express,knex和书架构建。
我正在使用Jmeter进行一些性能测试,我注意到如果我调用执行以下查询的API,则没有问题:
public static async fetchById(id: number): Promise<DatasetStats> {
return DatasetStats.where<DatasetStats>({ id }).fetch();
}
DatasetStats是Bookshelf模型
但是如果我设置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对象?
答案 0 :(得分:2)
是。如果为每个请求创建新的knex实例,则无法控制到mysql数据库的并发连接总数。此外,您将无法重新使用来自knex连接池的已打开连接,因此在每个查询上打开与数据库的新TCP连接非常低效。此外,如果您在查询后没有销毁您的knex实例,连接将保持打开状态,直到某些空闲超时+应用程序泄漏内存。