从nodejs后端,我在postgres数据库上使用连接池执行了许多codec查询。执行查询所需的时间随着查询的数量而增加,尽管它应该是并行的。有什么解决方案可以加速并行查询?我已经检查了postgres max connections对于我的用例是足够的。
下面是我尝试的代码
import { Pool } from 'pg';
import 'dotenv/config';
const pool = new Pool({
user: process.env.RAW_DATA_DB_USER,
host: process.env.RAW_DATA_DB_HOST,
database: process.env.RAW_DATA_DB_NAME,
password: process.env.RAW_DATA_DB_PASSWORD,
port: parseInt(process.env.RAW_DATA_DB_PORT || '5432', 10),
min: 10,
max: 100,
});
const query = async (text: string, params = []) => {
const start = performance.now();
const res = await pool.query(text, params)
const end = performance.now();
console.log(`Query ${text} took ${end - start} milliseconds.`)
return res
}
const requestsCount = 10;
const ps = Array(requestsCount).fill(async () => {
const queryStr = "<MY SQL QUERY>";
const res = (await query(queryStr)).rows;
return res;
});
const start = performance.now();
const res = await Promise.all(ps.map(p => p()));
const end = performance.now();
console.log("Res is : ", res);
console.log('Total time elapsed : ', end - start);
字符串
1条答案
按热度按时间bqujaahr1#
max_connections
不是唯一的限制。数据库运行在具有一定数量CPU内核和一定I/O容量的计算机上。因此,并行启动许多语句只能扩展到某个点,超过这个点,您就不能指望从并行化中获益。