Postgres EXPLAIN ANALYZE 每个连接的第一个查询的计划时间很慢

Postgres EXPLAIN ANALYSE Planning Time slow for first query per connection

运行在psql中第一次查询时,有点慢。第二次由于计划时间大幅下降,速度快了很多。

> EXPLAIN ANALYSE SELECT * FROM public.my_custom_function(10, 10, 'Personal');

第一次:

                                                                QUERY PLAN                                                                 
--------------------------------------------------------------------------------------------------------------------------------------------
 Function Scan on my_custom_function  (cost=0.25..10.25 rows=1000 width=32) (actual time=4.900..4.901 rows=1 loops=1)
 Planning Time: 30.870 ms
 Execution Time: 3.410 ms
(3 rows)

所有后续查询:

                                                                QUERY PLAN                                                                 
--------------------------------------------------------------------------------------------------------------------------------------------
 Function Scan on my_custom_function  (cost=0.25..10.25 rows=1000 width=32) (actual time=4.900..4.901 rows=1 loops=1)
 Planning Time: 0.620 ms
 Execution Time: 4.920 ms
(3 rows)

每当我与数据库建立新连接时都是这种情况,第一个调用需要相当长的计划时间,而其他所有都很好。

其他上下文

部署: Docker

Postgres 版本: 12

SQL 逻辑: 执行索引 JOIN 和 WHERE 查找。我知道那里的逻辑快速而可靠,需要优化的不是查询本身。

无论我 运行 查询本身还是通过函数,同样的计划时间问题仍然存在。

问题:

我有一个 HTTP API 为每个请求创建一个连接,调用函数一次然后返回。因此,每个 API 请求都具有非计划查询的性能。

问题:

我怎样才能让这个查询一次又一次地被计划?也许使用 PREPARE 语句?

虽然可能有一些方法可以加快速度(如果我们可以看到您的函数),但从根本上说,如果您对性能非常敏感,那么您需要选择一些不会为每个请求创建一个连接的技术。像 mod_perl 或 FastCGI 或者 pgbouncer。