nodejs连接mariadb数据库,执行操作后无法关闭数据库连接?

写了一个用于操作mariadb的工具包,但是在但是在执行完操作后使用conn.end()conn.release()conn.destroy()都无法关闭数据库连接,用show full processlist查的话就会有一堆sleep状态的进程,随着操作越来越多,sleep进程也就越来越多,到最后就会too many connection,刚开始以为是设置的自动关闭连接的时间太长了,然后我就给设置成10秒了,然后我再用show full processlist查看时就会出现原本的进程在十秒后确实消失了,但是又会冒出来同样数量的进程,并且新进程的host都是新的,然后时间又开始从0计算,很奇怪。
代码:

const mariaDB = require('mariadb')
const dbConfig = require('./db.config')
class dbConnect {
    constructor(){
        this.pool = mariaDB.createPool(dbConfig)
    }
    async query(param) {
        const pool = this.pool
        // 用param组织SQL
        try {
            conn = await pool.getConnection()
            data = await conn.query(sql)
        } catch (err) {
            console.log(err)
            throw err
        } finally {
            if (conn) {
                conn.release()
                conn.end()
                conn.destroy()
            }
            return data
        }
    }
    // ...
}

进程列表:
image.png

阅读 3.2k
1 个回答

因为看不到你是如何使用dbConnect的,但是根据你的描述,猜测你每次进行查询的时候都是new一个dbConnect,如果是这样的话,则每次都会新建一个连接池,这样肯定就会连接爆炸了。先确定dbConnect 是不是单例吧

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题