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

在 POSTGRESQL 中执行函数和过程

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

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

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

尽早加载库

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

sql 复制代码
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                          
════╪════════════════════════════════════════════════════
  1 │ 0101000020E610000097515B9536C33140A252824D6FDC1440
(1 row)
 
Time: 2.809 ms
test=# SELECT * FROM hans.points WHERE id = 1;
 id │                         p                          
════╪════════════════════════════════════════════════════
  1 │ 0101000020E610000097515B9536C33140A252824D6FDC1440
(1 row)
 
Time: 0.674 ms

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

结论

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

相关推荐
清风66666610 分钟前
基于单片机的智能高温消毒与烘干系统设计
数据库·单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
Databend12 分钟前
Databend 十月月报:存储过程正式可用,数据流程全面自动化
数据库
wangjialelele24 分钟前
MySQL操作库
数据库·mysql·oracle
kpli901 小时前
OceanBase数据库SQL调优
数据库·sql·oceanbase
Koma-forever1 小时前
Oracle SQL Developer设置打开表的时候如何是新窗口中打开
数据库·sql·oracle
前端世界2 小时前
用Python打造智能成绩分析系统:从异常处理到断言验证的全流程实战
服务器·数据库·python
JavaArchJourney2 小时前
数据库分库分表
数据库·分布式
ZhangBlossom2 小时前
【Java】EasyExcel实现导入导出数据库中的数据为Excel
java·数据库·excel
不见长安在3 小时前
redis集群下如何使用lua脚本
数据库·redis·lua
可观测性用观测云3 小时前
阿里云 RDS PostgreSQL 可观测最佳实践
数据库