使用预加载库优化 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考试

相关推荐
豆沙沙包?10 小时前
2025年--Lc182--sql(排序和分组)--Java版
java·数据库·sql
CryptoRzz10 小时前
欧美(美股、加拿大股票、墨西哥股票)股票数据接口文档
java·服务器·开发语言·数据库·区块链
APItesterCris11 小时前
构建弹性数据管道:利用淘宝商品 API 进行流式数据采集与处理
linux·数据库·windows
九河云11 小时前
TOS + 数字孪生:集装箱码头的智能进化密码
大数据·服务器·网络·数据库·数字化转型
手握风云-11 小时前
MySQL数据库精研之旅第十九期:存储过程,数据处理的全能工具箱(二)
数据库·mysql
孟意昶11 小时前
Doris专题17- 数据导入-文件格式
大数据·数据库·分布式·sql·doris
你可以永远相信功夫熊猫12 小时前
金蝶云·星瀚 | 生产制造成本核算终极实操手册(从0到1,含两套完整案例)
数据库·erp
Thepatterraining12 小时前
MySQL零基础教程:DDL/DCL/DML详解,从建库到存储过程一篇搞定!
数据库·sql·mysql
想ai抽12 小时前
深入starrocks-怎样实现多列联合统计信息
java·数据库·数据仓库
Y40900112 小时前
MySQL中的“事务”
数据库·mysql