Поэтому мне было интересно, следует ли мне или не нужно пинговать сервер mysql (mysqli_ping), чтобы убедиться, что сервер всегда жив до запуска запроса?
Вы не должны пинговать MySQL перед запросом по трем причинам:
Лучшим способом борьбы с подключениями к базе данных является обработка ошибок (try / catch), повторные попытки и транзакции.
Подробнее об этом в блоге производительности MySQL: проверка подключения к реальной базе данных считается вредной
В этом сообщении в блоге вы увидите, что 73% загрузки этого экземпляра MySQL было вызвано приложениями, проверяющими, была ли БД.
Я этого не делаю. Я полагаюсь на то, что у меня будет ошибка соединения, если сервер ушел, и я пытаюсь что-то сделать.
Выполнение пинга может сэкономить вам немного времени и, как представляется, будет более восприимчивым к пользователю, но быстрая ошибка соединения не намного лучше, чем ждать несколько секунд, за которым следует ошибка соединения. В любом случае, пользователь ничего не может с этим поделать.
Нет.
Вы пингуете SO, прежде чем перемещаться туда в браузере, просто чтобы убедиться, что сервер работает?
Поэтому мне было интересно, следует ли мне или не нужно пинговать сервер mysql (mysqli_ping), чтобы убедиться, что сервер всегда жив до запуска запроса?
На самом деле, нет. Если он неактивен, вы узнаете сообщения об ошибках, поступающие через ваши запросы или при подключении к базе данных. Вы можете получить mysql-ошибку с помощью:
mysql_error()
Пример:
mysql_connect(......) or die(mysql_error());
Это не стандартный способ борьбы с ним … Если есть исключение, вы будете заниматься этим.
Это несколько похоже на разницу между проверкой того, существует ли файл перед тем, как открыть его, или поймать исключение, не найденное в файле, когда это произойдет … Если это очень, очень распространенная и вероятная ошибка, возможно, стоит проверить раньше, но обычно выполнение должно пытаться идти нормально, и исключения должны быть пойманы и обработаны, когда они происходят.
Вообще нет.
Однако, если у вас длинный сценарий, например, какой-то внутренний процесс, который называется заданием cron, где это может быть временной промежуток между подключением и последующими запросами, mysqli_ping()
может быть полезным.
В этом случае полезно mysqli.reconnect
для true в php.ini.
Нет.
Просто потому, что успешный вызов ping не означает, что запрос будет. Что делать, если сервер становится недоступным между тем, как вы его пинговали, и временем выполнения запроса?
По этой причине в любом случае у вас должно будет возникнуть ошибка при поиске ошибок. И если вы это сделаете, вы можете просто положиться на это как на свою основную ловушку ошибок.
Добавление пинга просто добавляет ненужные круглые поездки, в конечном счете замедляя ваш код.
Единственный раз, когда я могу это сделать, – это если база данных
1. некритично для работы вашего приложения, и,
2. Он имеет тенденцию быть в автономном режиме.
Кроме этого, нет.
Единственный раз, когда было бы полезно использовать ping, было бы, если бы вы реализовали свою собственную систему объединения пула db. Даже в этом случае я не буду пинговать перед каждым запросом, просто на каждом «подключении» / контроле в пуле.