在Postgres中,我有一个表,它运行一个函数来返回最上面的结果。这个函数需要使用2ms来完成没有缓存数据的,这正是我所需要的。
然后,我将PostgREST放到混合中,因为我需要一个HTTP,它允许服务运行这个函数并使用它的结果。
当我对PostgREST API做卷曲时,响应时间为0.29秒,为290 is,速度慢得离谱。
为什么PostgREST这么慢?
设置
Postgres 12和PostgREST 7.0.1运行在同一台机器上,我的请求来自同一台机器,因此网络延迟应该很小。
代码
curl -d rating_min=5 -d rating_max=8 http://localhost:7045/rpc/get_json_data -w " %{time_starttransfer}\n"
> [{"json": {"name": "Friend"} }] 0.291CREATE TABLE my_json_data (
"json" jsonb NULL,
mtime timestamp NULL,
rating float8 NULL
);
CREATE OR REPLACE FUNCTION get_json_data(rating_min float, rating_max float)
RETURNS TABLE(
"json" jsonb
) AS
$$
SELECT "json"
FROM my_json_data
WHERE rating BETWEEN rating_min and rating_max
ORDER BY rating
LIMIT 1
$$ LANGUAGE SQL IMMUTABLE;发布于 2020-07-02 12:30:22
您正在将查询速度(在postgresql客户机中)与“查询速度+ db连接时间”进行比较。也就是说,当您执行curl请求时,除了运行查询之外,postgrest还需要连接到数据库,这需要时间。默认情况下,连接在10 s后关闭(查看db池超时)。这就是为什么您的第一个调用是慢的,而第二个是快速的(与查询缓存计划无关)。如果您发出一个curl请求(第一个请求)--它将是缓慢的,第二个请求(如果是在后面立即发出)--它将是快速的,然后等待10-15s并发出第三个请求,您将看到它将再次慢下来(因为db连接已经关闭)。您想要的是将db池超时调整为30米,所有的调用都会很快(除了第一个)。
发布于 2020-06-30 13:39:44
这看起来像是网络问题。您自己说过,该函数正在DB中高效地运行。似乎运行curl的计算机与为Rest服务的计算机之间的网络延迟很高。或者,如果jsonb列非常大,则可能与网络带宽有关。
https://stackoverflow.com/questions/62657008
复制相似问题