Node.js Express应用单条PostgreSQL插入耗时240+ms排查求助
解决pg连接池首次查询慢的问题
pg的连接池默认采用惰性初始化策略——只有当首次执行查询操作时,才会与远程数据库建立连接。对于本地连接云服务器数据库的场景,首次连接的握手、网络延迟会叠加到首次操作耗时中,这就是你看到首次插入耗时远高于后续操作的原因。
提前初始化连接池的两种方法
方法1:主动获取并释放连接
在Mocha的before钩子中,创建连接池后主动触发一次连接操作,完成后将连接放回池内:
before(async () => { pool = new pg.Pool({ user: process.env.USER_NAME, host: process.env.HOST_NAME, database: process.env.DATABASE, password: process.env.PASSWORD, port: parseInt(process.env.DB_PORT!) }); // 主动建立连接并释放,触发连接池提前初始化 const client = await pool.connect(); client.release(); });
注意要将before改为异步函数,确保连接建立完成后再执行后续测试用例。
方法2:配置连接池最小连接数
直接在连接池配置中设置min参数(默认值为0),让连接池在初始化时就创建指定数量的连接:
before(() => { pool = new pg.Pool({ user: process.env.USER_NAME, host: process.env.HOST_NAME, database: process.env.DATABASE, password: process.env.PASSWORD, port: parseInt(process.env.DB_PORT!), min: 1 // 初始化时提前创建1个连接 }); });
这种方式更简洁,测试场景下设置min:1即可满足需求,避免首次查询的连接建立耗时。
内容的提问来源于stack exchange,提问作者user1790300
相关产品推荐
相关产品推荐

