MySQL PreparedStatement警告

时间:2014-12-26 21:02:28

标签: c++ mysql resources database-connection

我有一个长期存在的C ++程序,它针对MySQL数据库执行各种SQL语句。我目前正在每个需要SELECT / INSERT / UPDATE的函数中使用一堆静态sql :: PreparedStatement *创建(一次),然后它们被重新绑定并一遍又一遍地重新执行。这很好用,但我想知道服务器和程序资源的使用情况:

  • 每个PreparedStatement在哪里存储其信息(客户端/服务器/两者?)
  • 我是否担心一个PreparedStatement会变坏,但其余的都没问题?
  • 我是否应该偶尔刷新/重新创建PreparedStatements?
  • 开放但空闲的PreparedStatements会在使用之间占用大量数据库资源吗?
  • 当查询偶尔发生而不是以任何特定顺序发生时,是否有更好的方法来处理需要执行20-30种不同类型查询的程序中的数据库活动?

谢谢!

1 个答案:

答案 0 :(得分:0)

每个预准备语句都会被解析,优化并存储在数据库会话中,因此它在活动时会占用资源,并且每个会话都有最多的预准备语句。 所采用的资源因数据库引擎和驱动程序而异。 根据您准备好的语句的确切内容以及它们绑定到变量和执行的频率,以及它们的简单性或复杂程度,您可能希望使用存储过程来实现至少其中一些语句。

对于max_prepared,statement_count引用为here

为了监视预准备语句使用的内存量,您可能需要运行一些测试:在准备语句之前获取进程看到的可用内存,然后在准备之后再次获取它,以查看该语句使用了多少,以及关闭语句后再一次查看是否所有内容都被释放。

这在执行语句之前有效,因为返回的数据量可能会有所不同,并会影响中间测量步骤中进程的总可用内存。

此外,您可能需要查看herehere