ER_CON_COUNT_ERROR: Too many connections knex and bookshelf
ER_CON_COUNT_ERROR: Too many connections knex and bookshelf
我有一个简单的休息 api,用 express、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 对象?
是的。如果为每个请求创建新的 knex 实例,则无法控制与 mysql 数据库的并发连接总数。此外,您将无法重新使用 knex 连接池中已经打开的连接,因此在每次查询时打开到数据库的新 TCP 连接效率非常低。此外,如果您在查询后不销毁您的 knex 实例,连接将保持打开状态,直到一些空闲超时 + 应用程序将泄漏内存。
我有一个简单的休息 api,用 express、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 对象?
是的。如果为每个请求创建新的 knex 实例,则无法控制与 mysql 数据库的并发连接总数。此外,您将无法重新使用 knex 连接池中已经打开的连接,因此在每次查询时打开到数据库的新 TCP 连接效率非常低。此外,如果您在查询后不销毁您的 knex 实例,连接将保持打开状态,直到一些空闲超时 + 应用程序将泄漏内存。