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