mysql连接。我应该在每次交易之前保持它的事件状态还是开始一个新的连接?

标签 mysql mysql-management

我第一次尝试使用 mysql,我对如何处理我的应用程序的连接有疑问。

我现在正在做的是打开一个连接并保持连接直到我终止我的程序。我时不时地执行 mysql_ping() 并使用 MYSQL_OPT_RECONNECT 启动连接。

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

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

干杯;)


一些额外的细节

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

尽管如此,当有一些一致的并发查询快速连续发生时,我会收到“服务器已消失”的消息,并在一段时间后重新建立连接。

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

有什么想法吗?

最佳答案

通常,打开连接时会产生相当多的开销。根据您期望这种情况发生的频率,它可能没问题,但是如果您编写的任何类型的应用程序在每次程序运行时执行的不仅仅是很少的命令,我会推荐一个连接池(用于服务器类型的应用程序)或在来自您的独立应用程序的至少一个或很少的连接将保持打开状态一段时间并重复用于多个事务。

这样您就可以更好地控制在应用程序级别打开多少连接,甚至在数据库服务器介入之前。这是应用程序服务器为您提供的一项服务,但如果您想让它更小,也可以很容易地将其汇总。

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

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

关于mysql连接。我应该在每次交易之前保持它的事件状态还是开始一个新的连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4672713/

相关文章:

mysql - 需要查询自引用表以查找不是任何项目的父项的所有项目

php - MySQL 问题 - 完全服务器超限!请指教

MySQL/存储 MySQL 凭据

mysql - Amazon RDS (MySQL) -> 本地开发/测试服务器主-主或主-从+示例?

mysql - 是否可以使用sqoop或flume将数据从web服务器导入到MYSQL?

php - 如何查看从单行表中爆炸检索的多个图像

php - 按金额排序 Mysql 值列表

sql - 无法在 5.1.32 上创建具有 TRIGGER 权限的 MySQL 触发器

PHP 将推文插入 mysql

PHP 代码返回未知列错误