pgjdbc中prepareThreshold = 5有什么好处?

问题描述 投票:0回答:2

pgjdbc中的

prepareThreshold
有如下定义:

在切换到使用服务器端准备好的语句之前确定所需的PreparedStatement执行次数。默认值为 5,这意味着在第五次执行同一PreparedStatement 对象时开始使用服务器端准备好的语句。有关服务器端准备语句的更多信息,请参阅“服务器准备语句”部分。

我想知道这实际上给我们带来了什么好处?大多数网络服务器几个月都不会重新启动,因此所有数据库查询最终都会发送超过 5 次,所以给它一周左右的时间,所有准备好的语句都将存储在服务器上,不是吗?这只是为了让桌面应用程序受益吗?或者我错过了一些东西,比如“一段时间内的 5 个阈值”?

postgresql jdbc prepared-statement pg-jdbc
2个回答
3
投票

我理解您想知道为什么 JDBC 驱动程序在使用服务器端准备好的语句之前要等待。

在不参与决策过程的情况下,我想说原因是准备语句意味着一定的开销(发送准备、绑定和执行调用)。只有当您确信该语句将被重复使用时,才有意义。

不要忘记准备好的语句还有其他用途,可以在多次执行时保存 Parse 步骤:这是避免 SQL 注入的最佳方法。仅此一点就证明了准备好的语句的合理性,即使它只执行一次。


0
投票

驱动程序默认等待客户端使用PreparedStatement 5次的原因是因为在服务器上使用命名准备语句意味着描述该语句的额外往返开销。通常不值得额外的往返。驱动程序提供连接参数,以允许客户端根据需要调整该阈值。

© www.soinside.com 2019 - 2024. All rights reserved.