Подтвердить что ты не робот

Должен ли я пинговать сервер mysql перед каждым запросом?

Итак, мне было интересно, следует ли мне или не нужно пинговать сервер mysql (mysqli_ping), чтобы убедиться, что сервер всегда жив до запуска запроса?

4b9b3361

Ответ 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. Даже в этом случае я не буду пинговать перед каждым запросом, просто на каждом "подключении" /контроле в пуле.