Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL PreparedStatement警告 我有一个长寿命C++程序,它执行一个针对MySQL数据库的各种SQL语句。我目前正在使用一组静态sql::PreparedStatement*,在每个需要选择/插入/更新的函数中创建(一次),然后它们被绑定并反复执行。这很好,但我想知道服务器和程序资源的使用情况: 每个PreparedStatement在哪里存储其信息(客户端/服务器/两者?) 我是否需要担心一份准备好的声明会变糟,但其他的都没问题 我是否应该偶尔刷新/重新创建PreparedStatements 开放但空闲的PreparedStatements是否会在使用之间占用大量数据库资源 在需要执行20-30种不同类型查询的程序中,当查询偶尔发生且不是以任何特定顺序发生时,是否有更好的方法来处理DB活动_C++_Mysql_Resources_Database Connection - Fatal编程技术网

MySQL PreparedStatement警告 我有一个长寿命C++程序,它执行一个针对MySQL数据库的各种SQL语句。我目前正在使用一组静态sql::PreparedStatement*,在每个需要选择/插入/更新的函数中创建(一次),然后它们被绑定并反复执行。这很好,但我想知道服务器和程序资源的使用情况: 每个PreparedStatement在哪里存储其信息(客户端/服务器/两者?) 我是否需要担心一份准备好的声明会变糟,但其他的都没问题 我是否应该偶尔刷新/重新创建PreparedStatements 开放但空闲的PreparedStatements是否会在使用之间占用大量数据库资源 在需要执行20-30种不同类型查询的程序中,当查询偶尔发生且不是以任何特定顺序发生时,是否有更好的方法来处理DB活动

MySQL PreparedStatement警告 我有一个长寿命C++程序,它执行一个针对MySQL数据库的各种SQL语句。我目前正在使用一组静态sql::PreparedStatement*,在每个需要选择/插入/更新的函数中创建(一次),然后它们被绑定并反复执行。这很好,但我想知道服务器和程序资源的使用情况: 每个PreparedStatement在哪里存储其信息(客户端/服务器/两者?) 我是否需要担心一份准备好的声明会变糟,但其他的都没问题 我是否应该偶尔刷新/重新创建PreparedStatements 开放但空闲的PreparedStatements是否会在使用之间占用大量数据库资源 在需要执行20-30种不同类型查询的程序中,当查询偶尔发生且不是以任何特定顺序发生时,是否有更好的方法来处理DB活动,c++,mysql,resources,database-connection,C++,Mysql,Resources,Database Connection,谢谢 每个准备好的语句都会被解析、优化并存储在数据库会话中,因此它在活动时确实会占用资源,并且每个会话中准备好的语句数量最多。 所占用的资源因数据库引擎和驱动程序而异。 根据准备好的语句的具体用途、它们绑定到变量和执行的频率以及它们的简单或复杂程度,您可能希望研究至少使用存储过程来实现其中的一些语句 对于max_prepared statement_count,参考是 为了监视一个准备好的语句使用了多少内存,您可能需要运行一个小测试:在准备语句之前获取进程看到的可用内存,然后在准备语句之后再次获

谢谢

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

对于max_prepared statement_count,参考是

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

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


另外,您可能想看一看,谢谢,这是有用的信息。您是否有(或知道在哪里可以找到)内存使用的大概数字或每个会话准备的最大语句数?如果我远远低于极限,我就不会为这个设计复杂的框架,但是如果我接近极限,我现在最好咬紧牙关。(所有的语句都非常简单——插入、更新或单表选择。没有什么会让数据库工作得很辛苦,只是有时候可能会返回很多行。)max_prepared_statement_count config项非常可靠(特别是因为它是服务器范围的值)。我知道我的服务器应该看到什么样的利用率,并且我预期的PreparedStatements数量远低于16k。我将讨论内存插装,但实际上,除非PreparedStatement分配了很多兆字节(这似乎真的不太可能),否则我不会遇到任何问题。再次感谢!与检索到的数据集相比,为准备好的语句分配的内部内存是最小的,因此我认为您在这方面还可以。基本上,客户端分配只是一个基本结构,用于标识服务器上当前会话的特定prep.语句,并携带更多的内容,如状态、当前状态等。真正的分配是服务器端的,但仅用于语句的分配仍然不是很大的。但是,如果未关闭,准备好的语句可能会导致某些服务器上的内存泄漏。