postgresql Postgres多个并发查询

ndh0cuux  于 2023-11-18  发布在  PostgreSQL
关注(0)|答案(1)|浏览(158)

从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);

字符串

bqujaahr

bqujaahr1#

max_connections不是唯一的限制。
数据库运行在具有一定数量CPU内核和一定I/O容量的计算机上。因此,并行启动许多语句只能扩展到某个点,超过这个点,您就不能指望从并行化中获益。

相关问题