ER_CON_COUNT_ERROR:knex和bookshelf连接太多

时间:2017-11-24 08:21:50

标签: mysql node.js express knex.js bookshelf.js

我有一个简单的休息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对象?

1 个答案:

答案 0 :(得分:2)

是。如果为每个请求创建新的knex实例,则无法控制到mysql数据库的并发连接总数。此外,您将无法重新使用来自knex连接池的已打开连接,因此在每个查询上打开与数据库的新TCP连接非常低效。此外,如果您在查询后没有销毁您的knex实例,连接将保持打开状态,直到某些空闲超时+应用程序泄漏内存。