代理 SQL 准备好的语句客户端缓存是否可用?

问题描述

我们有一个 JVM 应用程序,带有到 MysqL 的连接池。我们大量使用 PreparedStatements,因为我们没有超过 100 个不同的查询。驱动程序具有缓存准备好的语句的能力,因此我们获得了性能改进 - 每个语句只准备一次,并且此查询将来不会进行 sql 解析(直到连接关闭)。 从互联网上我发现proxysql支持准备好的语句,并且可以将已经准备好的语句返回给客户端而无需在MysqL中准备它(如果之前已经准备好)。 但是我没有找到任何信息,当 prepStmtCache=true 时它与客户端的行为如何?
使用 Proxysql 在客户端使用 cachePrepStmts=true 是否安全?或者客户应该为每个查询准备语句? 或者最好不要在 Proxysql 中使用准备好的语句?

例如客户端发送com_stmt_prepare到proxysql,proxysql从池中获取连接(多路复用),检查这个语句是否已经准备好,如果没有 - 将命令发送到MysqL,然后它在自己的缓存中注册准备好的语句并将准备结果返回给客户端(准备好的语句 id,例如 5)。客户端将其缓存在与 Proxysql 的连接中。然后客户端决定使用这个准备好的语句并发送com_stmt_execute(5,params)。这是合法的情况吗? Proxysql 会使用连接到准备这个语句的 MysqL 吗?

看起来Proxysql应该有某种映射 MysqL stmt id>。如果当前选择的连接没有映射 - 它应该首先准备它。但是我没有发现任何关于这种映射存在的信息......也没有发现任何应该禁用客户端语句缓存的警告。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)