我正在第一次尝试 mysql,我对如何处理我的应用程序的连接有疑问。
我现在正在做的是打开一个连接并保持它的活动状态,直到我终止我的程序。我时不时地执行一次 mysql_ping(),并使用 MYSQL_OPT_RECONNECT 启动连接。
另一个选择(我能想到)是在执行任何需要连接到数据库的操作之前启动一个新连接,并在完成后关闭它。
这两种方法的优缺点是什么?
长连接的“副作用”是什么?
处理这个问题最常用的方法是什么?
干杯;)
一些额外的细节
此时,我会保持连接处于活动状态,并时不时地对它进行 ping 操作,直至其处于当前状态,并在需要时重新连接。
尽管如此,当快速连续发生的查询出现一些一致的并发时,我收到一条“服务器已消失”消息,并在一段时间后重新建立连接。
我想知道这是否是长时间连接的副作用,或者这是否只是 mysql 服务器配置错误的情况。
有任何想法吗?
一般来说,打开连接时会产生相当多的开销。根据您期望这种情况发生的频率,这可能没问题,但如果您正在编写任何类型的应用程序,每个程序运行不仅仅执行很少的命令,我会建议使用连接池(对于服务器类型应用程序)或独立应用程序中至少有一个或很少的连接要保持打开状态一段时间并重用于多个事务。
这样,即使在数据库服务器介入之前,您也可以更好地控制在应用程序级别打开的连接数量。这是应用程序服务器为您提供的一项服务,但如果您想保持较小的规模,它也可以很容易地汇总起来。
除了性能原因之外,池也是一个好主意,可以为需求高峰做好准备。当大量请求进来并且每个请求都尝试打开与数据库的单独连接时 - 或者正如您所建议的甚至更多(每个事务) - 您很快就会耗尽资源。请记住,每个连接都会消耗 MySQL 内的内存!
另外你要确保使用非 root 用户进行连接,因为如果你不这样做(我认为它与 MySQL 相关)SUPER
特权),您可能会发现自己被锁定了。 MySQL 至少为管理员保留一个连接来解决问题,但如果您的应用程序以该权限连接,那么当您尝试手动灭火时,所有连接都将被用完。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)