微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决代理 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 举报,一经查实,本站将立刻删除。