0

我正在使用 CppCMS 开发一个网站,但遇到了一些 MySQL 错误。我怀疑这将是空闲问题(如此处所述:Lost connection to MySQL server during query on remote host)或有关并发连接的问题。

所以我想尝试连接池。我有一个超过 50 个cppdb::statement对象的列表(我认为)这些对象包含准备好的语句。这些需要cppdb::session创建一个对象,直到现在我在程序开始时创建它们一次,并在程序的整个生命周期中使用它们。

如何通过连接池正确实现这一点?

4

2 回答 2

0

我将准备好的语句视为具有与事务类似的生命周期。我知道这并不完全正确;准备好的语句可以用于多个事务。但这就是我使用它们的方式。

如果您遵循这种做法或非常接近的做法,那么您将不会丢失与一个 cppdb 会话相关联的准备好的语句。

换句话说,在您获取 cppdb 会话后创建新的准备好的语句。完成一个工作单元,然后在释放该 cppdb 会话之前释放准备好的语句。

创建一个新的准备好的语句是一项开销非常低的事情。许多应用程序每秒创建和释放数千次语句。您真的需要在应用程序的整个生命周期中保留这些准备好的语句吗?

请记住,准备好的语句会分配一点内存并在服务器端锁定。这是一个很小的开销,但分配准备好的语句不是免费的。对于不需要的语句,您不应该这样做。当你用完它们后你应该释放它们,这样服务器就可以清理它的内存。由于过多的语句分配导致 RDBMS 服务器中的内存泄漏是一种风险。

于 2018-01-31T18:08:13.900 回答
0

cppdb 为您管理连接池。

见:http ://cppcms.com/sql/cppdb/pool.html

仅供参考:准备好的语句在会话中被缓存。一般来说,这一切都是为您透明地完成的。准备好语句后,默认情况下会对其进行缓存。

见:http ://cppcms.com/sql/cppdb/stat.html

于 2018-02-22T13:02:05.527 回答