我一直在研究使用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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。