mysql连接.我应该在每次交易之前保持活着还是开始新的连接?

And*_*ira 5 mysql mysql-management

我正在尝试使用mysql,我对如何处理应用程序的连接存有疑问.

我现在正在做的是打开一个连接并保持活着,直到我终止我的程序.我偶尔做一个mysql_ping(),然后用MYSQL_OPT_RECONNECT启动连接.

另一个选择(我能想到),就是在做任何需要我连接数据库的事情之前启动一个新连接,并在完成之后关闭它.

这两种方法的优点和缺点是什么?长连接的"副作用"是什么?最常用的处理方法是什么?

干杯;)


一些额外的细节

在这一点上,我保持连接活着,我不时地ping它到现在它的状态并在需要时重新连接.

尽管如此,当快速连续发生查询时存在一致的并发性时,我得到"服务器已经消失"的消息,并在一段时间后重新建立连接.

我想知道这是否是长时间连接的副作用,或者这只是一个糟糕的mysql服务器配置的情况.

有任何想法吗?

Dan*_*ler 8

通常,打开连接时会产生相当大的开销.根据您期望这种情况发生的频率,它可能没问题,但是如果您正在编写任何类型的应用程序,每个程序运行执行的命令不仅仅是很少的命令,我建议使用连接池(对于服务器类型的应用程序)或者您的独立应用程序中至少有一个或几个连接可以保持打开一段时间并重复用于多个事务.

这样,即使在数据库服务器参与之前,您也可以更好地控制在应用程序级别打开的连接数.这是应用程序服务器为您提供的服务,但如果您希望将其保持较小,也可以相当容易地进行汇总.

除了性能原因,池也是一个好主意,为需求高峰做好准备.当大量请求进入并且每个请求尝试打开与数据库的单独连接时 - 或者您建议的更多(每个事务) - 您很快就会耗尽资源.请记住,每个连接都消耗MySQL内存!

此外,您还要确保使用非root用户进行连接,因为如果您不这样做(我认为它与MySQL SUPER权限相关联),您可能会发现自己被锁定了.MySQL为管理员保留了至少一个用于解决问题的连接,但是如果您的应用程序连接了该权限,则当您尝试手动灭火时,所有连接都已用完.