对 Postgres DB 的异步(并发)调用导致延迟

问题描述 投票:0回答:1

我有一个 Postgres 数据库。当我使用多个查询异步(并发)查询同一个表时,每个查询比仅调用一次查询或以同步(顺序)方式调用查询花费的时间更长。我尝试通过 REST API 进入 EJB 服务器并直接使用 psql 访问数据库。

对于同一个查询,每次调用 10 次,这是每次调用的结果。这是使用的命令:

docker exec -i container-name psql -Uusername -d databasename -c "..."

同步(顺序)

Finished 01 in 0h 0m 5s 134 ms.
Finished 02 in 0h 0m 5s 139 ms.
Finished 03 in 0h 0m 5s 181 ms.
Finished 04 in 0h 0m 5s 270 ms.
Finished 05 in 0h 0m 5s 157 ms.
Finished 06 in 0h 0m 5s 163 ms.
Finished 07 in 0h 0m 5s 178 ms.
Finished 08 in 0h 0m 5s 205 ms.
Finished 09 in 0h 0m 5s 169 ms.
Finished 10 in 0h 0m 5s 155 ms.

异步(并发)

Finished 03 in 0h 0m 12s 634 ms.
Finished 04 in 0h 0m 18s 87 ms.
Finished 07 in 0h 0m 21s 209 ms.
Finished 01 in 0h 0m 21s 279 ms.
Finished 05 in 0h 0m 21s 302 ms.
Finished 02 in 0h 0m 21s 659 ms.
Finished 09 in 0h 0m 22s 127 ms.
Finished 06 in 0h 0m 22s 394 ms.
Finished 08 in 0h 0m 22s 667 ms.
Finished 10 in 0h 0m 22s 671 ms.

我发现这篇文章(Postgres:连接中的并发查询)提到了并发查询,但我真的不知道如何从这里继续。我在异步查询时查看了

pg_stat_activity
表,每个查询都有一行,但我不确定这是否意味着多个连接或每个连接仅多个查询。

新:这是我用来异步或并发运行的脚本。如果删除“&”,那么它将按顺序/同步运行对函数的每个调用。

#!/usr/bin/env bash

set -e

function runScript1() {
    _START_T=$(date +%s%N)
    docker exec -i container-name psql -Uusername -d databse -c "SELECT ... FROM ..."
    _END_T=$(date +%s%N)
    _ELAPSED_MS=$(((_END_T - _START_T) / 1000000))
    _SECONDS=$(( _ELAPSED_MS / 1000 ))
    _MILLISECONDS=$(( _ELAPSED_MS % 1000 ))
    _MINUTES=$(( _SECONDS / 60 ))
    _HOURS=$(( _MINUTES / 60 ))

    # Print the result
    echo "Finished $1 in ${_HOURS}h $((_MINUTES % 60))m $((_SECONDS % 60))s $_MILLISECONDS ms."
}

_START_TOTAL=$(date +%s%N)
runScript1 "01" &
runScript1 "02" &
runScript1 "03" &
runScript1 "04" &
runScript1 "05" &
runScript1 "06" &
runScript1 "07" &
runScript1 "08" &
runScript1 "09" &
runScript1 "10" &
_END_TOTAL=$(date +%s%N)
postgresql asynchronous concurrency
1个回答
0
投票

我认为这篇文章解释了为什么会发生这种情况: PostgreSQL - 如果我同时运行多个查询,在什么情况下我会看到加速?在什么情况下我会看到速度放缓?我无法真正总结答案,因为它已经是一个相当概括的答案。

对于我当前的用例,我将看看是否可以提高查询速度,因为这将使我们整个系统的速度提高。我还必须更多地研究如何处理更大、更耗时的查询。

© www.soinside.com 2019 - 2024. All rights reserved.