新たなクライアントが mysqldに接続すると、mysqldによって要求を処理する新規のスレッドが作成されます。このスレッドでは、まずホスト名がホスト名キャッシュにあるかどうかがチェックされます。ない場合は、ホスト名の解決が試行されます。
オペレーティングシステムがスレッドセーフの
gethostbyaddr_r()とgethostbyname_r()の呼び出しをサポートしている場合、スレッドではこれを使用してホスト名の解決が実行される。
オペレーティングシステムがスレッドセーフの呼び出しをサポートしていない場合、スレッドでは相互排除ロックを行い、代わりに
gethostbyaddr()と
gethostbyname()が呼び出される。この場合、他のスレッドでは最初のスレッドが相互排除ロックを解除するまでホスト名キャッシュ内のホスト名を解決できなくなることに注意する。
--skip-name-resolveを
mysqldオプションを指定して起動すると、DNS
ホスト名ルックアップを無効化できます。ただし、この場合は、MySQL
権限テーブルで IP
番号しか使用できなくなります。
非常に低速の DNS
と多数のホストがある場合は、--skip-name-resolveで
DNS
ルックアップを無効化するか、HOST_CACHE_SIZEの定義(デフォルト値:
128)を拡張し、mysqldを再コンパイルすることで、パフォーマンスを改善できます。
--skip-host-cache
オプションを使用してサーバを起動すると、ホスト名キャッシュを無効化できます。ホスト名のキャッシュをクリアするには、FLUSH
HOSTSステートメントを使用するか、mysqladmin
flush-hostsコマンドを実行します。
TCP/IP
接続すべてを認めない場合は、--skip-networkingオプションを指定して
mysqldを開始します。
