Spec-Zone .ru
спецификации, руководства, описания, API

8.11.5.2. Оптимизация Поиска DNS и Кэш Узла

Сервер MySQL поддерживает кэш узла в памяти, которая содержит информацию о клиентах: IP-адрес, имя хоста, и информация об ошибке. Сервер использует этот кэш для нелокальных соединений TCP. Это не использует кэш для соединений TCP, установленных, используя петлевой адрес интерфейса (127.0.0.1 или ::1), или для соединений, установленных, используя Unix, снабжают сокетом файл, именованный канал, или разделяемую память.

Для каждого нового клиентского соединения сервер использует клиентский IP-адрес, чтобы проверить, является ли имя хоста клиента в кэше узла. В противном случае сервер пытается разрешить имя хоста. Во-первых, это разрешает IP-адрес к имени хоста и разрешает что имя хоста назад к IP-адресу. Затем это сравнивает результат с исходным IP-адресом, чтобы гарантировать, что они - то же самое. Сервер хранит информацию о результате этой работы в кэше узла. Если кэш полон, последняя использованная запись отбрасывается.

host_cache Таблица Схемы производительности представляет содержание кэша узла так, чтобы это могло быть исследовано, используя SELECT операторы. Это может помочь Вам диагностировать причины проблем соединения. См. Раздел 21.9.9.1," host_cache Таблица".

Сервер обрабатывает записи в кэше узла как это:

  1. Когда первое клиентское соединение TCP достигает сервера от данного IP-адреса, новая запись создается, чтобы записать клиентский IP, имя хоста, и клиентский флаг проверки допустимости поиска. Первоначально, имя хоста устанавливается в NULL и флаг является ложью. Эта запись также используется для последующих клиентских соединений от того же самого инициирующего IP.

  2. Если флаг проверки допустимости для клиентской записи IP является ложью, сервер делает попытку разрешения DNS IP к имени хоста. Если это успешно, имя хоста обновляется с разрешенным именем хоста, и флаг проверки допустимости устанавливается в истину. Если разрешение неудачно, предпринятые меры зависят от того, является ли ошибка постоянной или переходной. Для постоянных отказов остается имя хоста NULL и флаг проверки допустимости устанавливается в истину. Для отказов из-за переходного процесса имя хоста и флаг проверки допустимости остаются неизменными. (Другая попытка разрешения DNS происходит в следующий раз, когда клиент соединяется от этого IP.)

  3. Если ошибка происходит, обрабатывая входящее клиентское соединение от данного IP-адреса, сервер обновляет соответствующие ошибочные счетчики в записи для того IP. Для описания записанных ошибок см. Раздел 21.9.9.1," host_cache Таблица".

Сервер выполняет разрешение имени хоста, используя ориентированное на многопотоковое исполнение gethostbyaddr_r() и gethostbyname_r() вызовы, если операционная система поддерживает их. Иначе, поток, выполняющий поиск, блокирует взаимное исключение и вызовы gethostbyaddr() и gethostbyname() вместо этого. В этом случае никакой другой поток не может разрешить имена хоста, которые не находятся в кэше узла, пока поток, содержащий взаимоисключающую блокировку, не выпускает это.

Сервер использует кэш узла в нескольких целях:

Чтобы разблокировать блокированные узлы, сбросьте кэш узла, выходя a FLUSH HOSTS оператор или выполнение mysqladmin команды узлов сброса.

Для блокированного узла возможно стать разблокированным даже без FLUSH HOSTS если действие от других узлов произошло начиная с последней попытки подключения от блокированного узла. Это может произойти, потому что сервер отбрасывает последнюю использованную запись кэша, чтобы создать место для новой записи, если кэш полон, когда соединение прибывает от клиентского IP не в кэше. Если отброшенная запись для блокированного узла, тот узел становится разблокированным.

Кэш узла включается по умолчанию. Чтобы отключить это, установите host_cache_size системная переменная к 0, или в сервере запускаются или во времени выполнения.

Чтобы отключить поиски имени хоста DNS, запустите сервер с --skip-name-resolve опция. В этом случае сервер использует только IP-адреса и не имена хоста, чтобы соответствовать соединяющиеся узлы строк в таблицах предоставления MySQL. Только учетные записи, определенные в тех таблицах, используя IP-адреса, могут использоваться.

Если у Вас есть очень медленный DNS и много узлов, Вы могли бы быть в состоянии улучшить производительность любой, отключая поиски DNS с --skip-name-resolve или увеличивая значение host_cache_size сделать кэш узла больше.

Чтобы отвергнуть соединения TCP/IP полностью, запустите сервер с --skip-networking опция.

Некоторые ошибки соединения не связываются с соединениями TCP, происходят очень рано в процессе соединения (даже прежде, чем IP-адрес будет известен), или не являются определенными для любого определенного IP-адреса (такого как условия из памяти). Для получения информации об этих ошибках проверьте Connection_errors_xxx переменные состояния (см. Раздел 5.1.6, "Переменные Состояния Сервера").