gpt4 book ai didi

java - 关闭 c3p0 中的服务器端准备语句

转载 作者:行者123 更新时间:2023-11-29 12:55:25 25 4
gpt4 key购买 nike

这样做有一个商业原因,与如何在从站和主站之间路由查询有关。 From this question我知道在 Connector/J 中这是可能的,但是阅读 c3p0 的文档似乎从来没有区分服务器端和客户端语句缓存,并且考虑到它对内存使用的讨论,我认为它意味着客户端。 (IOW,我什至无法确认 c3p0 使用服务器端准备好的语句)。我怎样才能控制这个?

根据相关问题的回答

The Connector/J driver handles prepared statements locally unless you turn on real server side statements using the connection parameter useServerPrepStmts=true.

最佳答案

c3p0 实现其自己的PreparedStatement 缓存(如果您通过设置非零的maxStatementsmaxStatementsPerConnection 来启用它)。这就是您所描述的“客户端”——PreparedStatements 缓存在数据源中。

如果您的 DBMS 在服务器端实现某种PreparedStatement 缓存,您需要在 DBMS 中进行配置。 (如果您的 JDBC 驱动程序使用非标准配置来启用此功能,请向我指出一些文档,我可能会解释如何通过 c3p0 将其传递给驱动程序。) c3p0 仅通过标准 JDBC 处理 Connection 对象。如果调用prepareStatement(...)悄悄地返回缓存的对象,那么c3p0也将返回该对象。

如果您的 DBMS 支持此类功能,则禁用 c3p0 语句缓存可能是有意义的(默认值,maxStatements == maxStatementsPerConnection == 0),并且仅使用 JDBC 驱动程序或服务器的缓存。但归根结底,这是一个经验问题,无论您的 dbms/JDBC 驱动程序的缓存还是 c3p0 的缓存,或者两者都性能最佳,或者两者都没有性能最佳。您应该能够按照您想要的方式进行配置。

关于java - 关闭 c3p0 中的服务器端准备语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24129764/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com