mysql连接。我应该保留它还是在每次交易之前开始新的连接?

问题描述:

我正在做我的第一次涉及MySQL,我对如何处理我的应用程序的连接有疑问。mysql连接。我应该保留它还是在每次交易之前开始新的连接?

我现在正在做的是打开一个连接,并保持它活着,直到我终止我的程序。我偶尔做一个mysql_ping(),并且连接以MYSQL_OPT_RECONNECT开始。

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

这两种方法的优缺点是什么? 长连接的“副作用”是什么? 处理此问题的最常用方法是什么?

干杯;)


一些额外的细节

在这一点上我保持连接活着,我现在又ping到它每一个到现在它的地位并在需要时重新连接。

尽管如此,当快速连续发生的查询存在一些并发性时,我会收到一条“服务器已经消失”的消息,过了一会儿,连接重新建立。

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

任何想法?

+0

对于那些“额外的细节”,可以更好地浏览关于该主题的现有问题或者打开一个新问题。 – 2011-01-17 11:26:29

打开连接时通常会产生相当多的开销。取决于你期望发生这种情况的频率,它可能是好的,但是如果你正在编写任何类型的应用程序,每个程序运行的执行次数不仅仅是很少的命令,我会推荐一个连接池(用于服务器类型的应用程序)或您的独立应用程序中至少有一个或很少的连接会保持打开一段时间,并可用于多个事务。

即使在数据库服务器涉及之前,您也可以更好地控制在应用程序级别打开多少个连接。这是应用程序服务器为您提供的一项服务,但如果要将其保持较小,它也可以很容易地卷起来。

除了表现的原因,一个游泳池也是一个好主意,为需求高峰做好准备。当有很多请求进来时,每个请求都会尝试打开到数据库的单独连接 - 或者如您所建议的更多(每个事务) - 您很快就会耗尽资源。请记住,每个连接都会消耗MySQL内部的内存!

此外,您还希望确保使用非root用户进行连接,因为如果您不这样做(我认为它与MySQL SUPER权限相关),您可能会发现自己被锁定。 MySQL至少为管理员保留一个用于修复问题的连接,但是如果您的应用连接了该特权,那么当您尝试手动放火时,所有连接都已经用完。

你在写什么样的应用程序?如果它是一个webscript:保持打开状态。如果它是一个可执行文件,将你的连接集中起来(如果有必要的话,大多数单身人士都会这样做)。

+0

这是一个可执行文件。你通过汇集连接意味着什么? – 2011-01-14 10:05:17

除非您担心有太多的连接打开(即超过1,000个),否则她会断开连接。连接/重新连接的开销会降低速度。如果你知道你将需要连接保持开一会儿,运行此查询,而不是定期查验:

SET SESSION wait_timeout=# 

#是离开空闲连接打开的秒数。

+0

嗯,实际上我正在ping连接以保持连接,并且我也有默认的超时。我想这包括保持连接正常? – 2011-01-14 10:04:41