使用预加载库优化 PostgreSQL 函数#postgresql认证

发布于:2024-07-05 ⋅ 阅读:(23) ⋅ 点赞:(0)

在 POSTGRESQL 中执行函数和过程

为了理解 PostgreSQL 的工作原理,我们首先要看一个简单的函数调用。下一个清单显示了一些简单的PostGIS代码:

PgSQL
test=# timing 
Timing is on.
test=# SELECT * FROM hans.points WHERE id = 1;
 id │                         p                          
════╪════════════════════════════════════════════════════
  10101000020E610000097515B9536C33140A252824D6FDC1440
(1 row)
 
Time: 10.004 ms
test=# SELECT * FROM hans.points WHERE id = 1;
 id │                  *       p                          
════╪════════════════════════════════════════════════════
  10101000020E610000097515B9536C33140A252824D6FDC1440
(1 row)
 
Time: 0.664 ms

在标准PostgreSQL数据库连接中,PostGIS 尚不可用。事实上,在连接中第一次使用 PostGIS 时必须加载它。我们看到第二次调用比第一次调用快得多,因为在第一次调用期间库被加载和初始化。数据库重启后,第一次调用可能是一个重大的性能问题。考虑一下:重启后缓存是冷的,库尚未加载,并且必须建立连接 - 这可能会导致一系列相当严重的问题,而且这些问题都同时发生。
在这里插入图片描述

尽早加载库

解决这个问题的一种方法是利用 PostgreSQL 中一个相当老的功能:session_preload_library 可以确保第一次使用连接时库已经存在。当然,我们将看到一些显著的性能改进:

PgSQL
> PGOPTIONS='-c session_preload_libraries=postgis-3' psql -U postgres
…
 
test=# timing 
Timing is on.
test=# SELECT * FROM hans.points WHERE id = 1;
 id │                         p                          
════╪════════════════════════════════════════════════════
  10101000020E610000097515B9536C33140A252824D6FDC1440
(1 row)
 
Time: 2.809 ms
test=# SELECT * FROM hans.points WHERE id = 1;
 id │                         p                          
════╪════════════════════════════════════════════════════
  10101000020E610000097515B9536C33140A252824D6FDC1440
(1 row)
 
Time: 0.674 ms

第一次调用比以前快得多。第二次调用仍然比第一次调用慢很多,因为我们仍然需要做一些初始化工作。但是,我们已经减少了第一次调用的大量开销,这在重新启动、集群故障等情况下非常有用。

结论

所有服务器端语言都作为库加载,扩展和许多其他东西也是如此。因此,session_preload_libraries 可以真正帮助加快数据库连接中的第一次调用。
#PG培训#PG考试#postgresql培训#postgresql考试
在这里插入图片描述


网站公告

今日签到

点亮在社区的每一天
去签到