- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 CppCMS 开发一个网站,并遇到一些 MySQL 错误。我怀疑这可能是空闲问题(如下所述: Lost connection to MySQL server during query on remote host )或有关并发连接的问题。
所以我想到尝试连接池。 但是我有一个超过 50 个 cppdb::statement
对象的列表,(我认为)这些对象保存准备好的语句。这些需要创建一个 cppdb::session
对象,到目前为止,我在程序开始时创建一次它们,并在程序的整个生命周期中使用它们。
如何使用连接池正确实现这一点?
最佳答案
我将准备好的语句视为与事务具有相似的生命周期。我知道这并不完全正确;准备好的语句可以用于多个事务。但这就是我使用它们的方式。
如果您遵循这一做法或非常接近的做法,那么您将不会丢失与一个 cppdb session 关联的准备好的语句。
换句话说,在获取 cppdb session 后创建新的准备好的语句。执行一个工作单元,然后在释放该 cppdb session 之前释放准备好的语句。
创建一个新的准备好的语句是一件开销相当低的事情。许多应用程序每秒创建和释放语句数千次。您真的需要在应用程序的整个生命周期中保留这些准备好的语句吗?
请记住,准备好的语句会分配一点内存并在服务器端锁定。这是一个相当小的开销,但分配准备好的语句并不是免费的。您不应该为不需要的语句执行此操作。当你使用完语句后,你应该释放它们,这样服务器就可以清理它的内存。由于过多的语句分配,RDBMS 服务器中存在内存泄漏的风险。
关于mysql - 连接池 : How to deal with prepared statements?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48548282/
我是一名优秀的程序员,十分优秀!