加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

PostgreSQL是否像Oracle一样缓存准备好的语句

发布时间:2020-12-13 15:55:47 所属栏目:百科 来源:网络整理
导读:在与Oracle合作几年后,我刚刚搬到了PostgreSQL. 我一直在研究使用PostgreSQL数据库在应用程序( Java,JDBC)中准备好语句的一些性能问题. Oracle在其SGA中缓存预准备语句 – 准备好的语句池在数据库连接之间共享. PostgreSQL文档似乎没有表明这一点.这是文档中
在与Oracle合作几年后,我刚刚搬到了PostgreSQL.
我一直在研究使用PostgreSQL数据库在应用程序( Java,JDBC)中准备好语句的一些性能问题.

Oracle在其SGA中缓存预准备语句 – 准备好的语句池在数据库连接之间共享.

PostgreSQL文档似乎没有表明这一点.这是文档中的片段(https://www.postgresql.org/docs/current/static/sql-prepare.html) –

Prepared statements only last for the duration of the current database
session. When the session ends,the prepared statement is forgotten,
so it must be recreated before being used again. This also means that
a single prepared statement cannot be used by multiple simultaneous
database clients; however,each client can create their own prepared
statement to use.

我只是想确保我理解这一点,因为对于数据库来说,实现某种常用的预处理语句的公共池似乎是如此基础.

如果PostgreSQL没有缓存这些意味着每个需要大量数据库事务的应用程序需要开发某种可以跨连接重用的预准备语句池.

如果您之前曾使用过PostgreSQL,我将不胜感激.

解决方法

是的,你的理解是正确的.通常,如果您有一组准备好的查询,那么您应该调用一个自定义函数来设置连接.

这个afaik有三个主要原因:

>有一个很长的待办事项列表,当开发人员感兴趣/付费处理它们时,它们就会完成.据推测,没有人认为它值得资助或想出一个有效的方法.
> PostgreSQL在比Oracle更广泛的环境中运行.我猜想99%的安装系统都不会从中看到太多的好处.有很多设置没有高事务性能要求,或者DBA需要注意是否需要它.
>计划的查询并不总能提供胜利.在延迟计划/使缓存无效方面做了大量工作,以尽可能地提供实际数据和查询参数.

我怀疑添加这样的东西的最佳位置是在其中一个连接池(pgbouncer / pgpool)中,但是上次我检查过这样的功能时不存在.

HTH

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读