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

相关推荐
V1ncent Chen7 分钟前
MySQL 插入更新语句(insert…on duplicate key update语句 )
数据库·sql·mysql
web1508509664112 分钟前
给SQL server数据库表字段添加注释SQL,附修改、删除注释SQL及演示
数据库·sql·oracle
qwy71522925816313 分钟前
20-R 绘图 - 饼图
开发语言·数据库·r语言
guihong0041 小时前
深入理解Redis:从线程模型到应用场景的全面解析
数据库·redis·缓存
Suk-god1 小时前
【Redis原理】底层数据结构 && 五种数据类型
数据结构·数据库·redis
小白教程2 小时前
Python连接MySQL数据库图文教程,Python连接数据库MySQL入门教程
数据库·python·mysql·python链接数据库·python链接mysql
hzulwy2 小时前
mongodb的并发优化
数据库
new出对象2 小时前
数据库增删查改sql语句
数据库·sql·oracle
m0_748246612 小时前
超详细:数据库的基本架构
数据库·架构
Themberfue3 小时前
SQL ①-数据库 || MySQL
数据库·sql·mysql·数据库系统·数据库管理系统