【发布时间】:2011-03-07 10:44:10
【问题描述】:
所以我想知道是否应该 ping mysql 服务器 (mysqli_ping) 以确保服务器在运行查询之前始终处于活动状态?
【问题讨论】:
-
您真的希望您的数据库服务器经常停机吗?
-
无法保证服务器在您 ping 和运行查询之间不会停机,因此您仍然需要对查询进行错误处理...为什么要两次?
所以我想知道是否应该 ping mysql 服务器 (mysqli_ping) 以确保服务器在运行查询之前始终处于活动状态?
【问题讨论】:
您不应该在查询之前 ping MySQL,原因有以下三个:
处理数据库连接的最佳方式是错误处理(try/catch)、重试和事务。
在 MySQL 性能博客上了解更多信息: Checking for a live database connection considered harmful
在那篇博文中,您将看到该 MySQL 实例上 73% 的负载是由应用程序检查数据库是否已启动造成的。
【讨论】:
我不这样做。我依赖这样一个事实,即如果服务器消失了,我会遇到连接错误,我会尝试做一些事情。
执行 ping 可能可以为您节省一点时间,并且看起来对用户的响应速度更快,但快速连接错误并不比等待几秒钟然后出现连接错误好多少.无论哪种方式,用户都无能为力。
【讨论】:
没有。
在浏览器中导航之前是否 ping SO,只是为了确保服务器正在运行?
【讨论】:
所以我想知道我是否应该或 不应该 ping mysql 服务器 (mysqli_ping) 以确保 服务器在运行之前始终处于活动状态 查询?
不是真的。如果它不是实时的,您将通过查询或连接到数据库时出现的错误消息来了解。您可以通过以下方式获取 mysql 错误:
mysql_error()
示例:
mysql_connect(......) or die(mysql_error());
【讨论】:
这不是标准的处理方式......如果有异常,你会处理它。
这有点类似于在尝试打开文件之前检查文件是否存在,或者在发生文件未找到异常时捕获它之间的区别......如果这是一个非常非常常见且可能的错误,那么它可能是值得的之前检查它,但通常应该尝试正常执行,并在发生异常时捕获和处理。
【讨论】:
一般来说不会。
但是,如果您有一个长时间运行的脚本,例如某个称为 cron 作业的后端进程,这可能是连接和后续查询之间的时间跨度,mysqli_ping() 可能有用。
在这种情况下,在 php.ini 中将 mysqli.reconnect 设置为 true 很有用。
【讨论】:
没有。
仅仅因为 ping 成功并不意味着查询会成功。如果服务器在您 ping 它和执行查询之间变得不可用怎么办?
因此,无论如何,您都必须对查询进行适当的错误捕获。 如果你这样做了,你不妨把它作为你的主要错误陷阱。
添加 ping 只会增加不必要的往返,最终会减慢您的代码速度。
【讨论】:
我唯一能想到的就是如果数据库是
1. 对您的应用程序的运行不重要,并且,
2. 有离线倾向。
除此之外,没有。
【讨论】:
只有在您实现自己的数据库连接池系统时才值得使用 ping。即使在这种情况下,我也不会在每次查询之前执行 ping,而是在每次从池中“连接”/结帐时执行。
【讨论】: