我正在努力更好地了解连接池在knex
中的工作方式。
将来,我想将我的应用程序部署到一个PaaS上,该PaaS具有按小时计费的MySQL数据存储。我担心的是,使用连接池(如knex
所做的那样)会导致我保持与不再需要的数据存储的连接打开,从而耗费实例数小时。
因此,我的问题是:knex
是否会在长时间不使用池中的连接后自动删除这些连接?此外,如果是没有缩减连接的情况,当池中的所有连接都处于非活动状态时,我应该怎么做才能确保我不会因未使用的实例小时数而被收取费用?
我想,如果没有自动缩减,我需要能够访问池中的活动连接,以确保我知道何时所有连接都处于非活动状态,然后销毁池。不幸的是,我不完全确定如何做到这一点(我在文档中找不到它)。
Knex使用Pool2进行池化,默认情况下至少打开2个连接(请参阅Knex.js池化)。因此,如果使用这些默认值,您的担忧是有效的。
要改变行为,请尝试以下操作:
var knex = require('knex')({
client: '<your driver, mysql?>',
connection: { <your connection parameters> },
pool: {
min: 0 /* no connections if idle */,
idleTimeout: 10*1000 /* 10 secs idle connections are closed */
}});