13

所以我想知道我是否应该或不应该 ping mysql 服务器(mysqli_ping)以确保服务器在运行查询之前始终处于活动状态?

4

9 回答 9

26

您不应该在查询之前 ping MySQL,原因有以下三个:

  1. 当您尝试执行查询时,它不是检查服务器是否启动的可靠方法,它很可能在 ping 响应和查询之间的时间内下降。
  2. 即使服务器已启动,您的查询也可能会失败。
  3. 随着网站流量的增加,您将为数据库增加大量额外开销。在使用此方法的企业应用程序中看到大量数据库资源被浪费在 ping 上的情况并不少见。

处理数据库连接的最佳方式是错误处理(try/catch)、重试和事务。

有关 MySQL 性能博客的更多信息: 检查被认为有害的实时数据库连接

在该博客文章中,您将看到该 MySQL 实例上 73% 的负载是由应用程序检查数据库是否启动引起的。

于 2010-06-23T19:05:12.907 回答
12

我不这样做。我依赖这样一个事实,即如果服务器消失了,我会遇到连接错误,我会尝试做一些事情。

执行 ping可能会为您节省一点时间,并且似乎对用户的响应速度更快,但快速连接错误并不比等待几秒钟然后出现连接错误好多少。无论哪种方式,用户都无能为力。

于 2010-06-23T17:25:55.153 回答
10

不。

在浏览器中导航之前是否 ping SO,只是为了确保服务器正在运行?

于 2010-06-23T17:26:55.930 回答
5

所以我想知道我是否应该或不应该 ping mysql 服务器(mysqli_ping)以确保服务器在运行查询之前始终处于活动状态?

并不真地。如果它不是实时的,您将通过查询或连接到数据库时出现的错误消息来了解。您可以通过以下方式获取 mysql 错误:

mysql_error()

例子:

mysql_connect(......) or die(mysql_error());
于 2010-06-23T17:27:30.500 回答
2

这不是处理它的标准方式......如果有异常,你会处理它。

这有点类似于在尝试打开文件之前检查文件是否存在,或者在发生文件未找到异常时捕获它之间的区别......如果这是一个非常非常常见且可能的错误,那么它可能值得检查之前,但通常应该尝试正常执行,并且应该在发生异常时捕获和处理异常。

于 2010-06-23T17:26:40.903 回答
1

一般来说,没有。

但是,如果您有一个长时间运行的脚本,例如一些称为 cron 作业的后端进程,这可能是连接和后续查询之间的时间跨度,可能会有mysqli_ping()用。

在这种情况下,在 php.ini 中设置mysqli.reconnect为 true 很有用。

于 2010-06-23T18:15:03.287 回答
0

不。

仅仅因为 ping 成功并不意味着查询会成功。如果服务器在您 ping 它和执行查询之间变得不可用怎么办?

出于这个原因,无论如何,您都必须对查询进行适当的错误捕获。如果你这样做了,你还不如简单地把它作为你的主要错误陷阱。

添加 ping 只会增加不必要的往返行程,最终会减慢您的代码速度。

于 2010-06-23T18:28:45.797 回答
0

我唯一能想到的情况是数据库是否
1. 对您的应用程序的运行不重要,并且
2. 它有离线的趋势。

除此之外,没有。

于 2010-06-23T18:31:09.790 回答
0

唯一值得使用 ping 的时候是您正在实现自己的数据库连接池系统。即使在这种情况下,我也不会在每次查询之前 ping,只是在池中的每个“连接”/结帐时。

于 2010-06-23T20:29:37.590 回答