所以我想知道我是否应该或不应该 ping mysql 服务器(mysqli_ping)以确保服务器在运行查询之前始终处于活动状态?
9 回答
您不应该在查询之前 ping MySQL,原因有以下三个:
- 当您尝试执行查询时,它不是检查服务器是否启动的可靠方法,它很可能在 ping 响应和查询之间的时间内下降。
- 即使服务器已启动,您的查询也可能会失败。
- 随着网站流量的增加,您将为数据库增加大量额外开销。在使用此方法的企业应用程序中看到大量数据库资源被浪费在 ping 上的情况并不少见。
处理数据库连接的最佳方式是错误处理(try/catch)、重试和事务。
有关 MySQL 性能博客的更多信息: 检查被认为有害的实时数据库连接
在该博客文章中,您将看到该 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,只是在池中的每个“连接”/结帐时。