2009年6月19日

[mysql 14931] Re: MySQL5系でセグメント越えの接続が遅い件について

こんにちは。池田です。

もう解決してしまったようですが、
ちょっとコメントさせて下さい。

MySQLサーバは接続ユーザが、

ikeda@xxxxx


みたいなホスト名を用いた形式で登録されていても、

ikeda@xxxxx

みたいなIPアドレスを用いた形式で登録されていても、

デフォルトでは必ずIPアドレスによる逆引きを行います。
(sql/sql_connect.ccのcheck_connection関数を参照)

# 接続時のホスト認証は逆引き後に行います。

この時、MySQLサーバはgethostbyaddr(3)関数を用いて
逆引きを行いますが、gethostbyaddr(3)内部では最初にhostsファイル、
次にDNSサーバの順で解決できるまで問合せを行います。

ここでいう172.20.100.2のIP/ホスト名がhostsファイルに無かったり、
DNSサーバに登録されていないような場合には、gethostbyaddr(3)が
タイムアウトするまで応答がなくなります。(デフォルトでは10秒くらい?)

今回、セグメントやMySQLのバージョンによって応答速度が変わったとの
ことですが、hostsファイル等ですぐに解決できたか、あるいは
タイムアウト待ちになったかの違いによるものと思います。

skip-name-resolveオプションを有効にしておくと、
gethostbyaddr(3)は呼び出されません。

またgethostbyaddr(3)の結果はデフォルトではMySQLサーバはメモリ上に
キャッシュしていますので、2回目以降は接続が早くなるわけです。

従ってユーザ作成時にIPアドレスのみ使用する場合には、skip-name-resolveを
利用し、ホスト名も使う場合にはhostsファイル等への登録を確実に行う、
というのが正しい利用方法になるかと思います。

以上、長文失礼しました。

Mikiya Okuno さんは書きました:
> 舞永さん、
>
> 解決したようで良かったです。
> でもセグメントによってDNS名前解決の時間が異なるってちょっと不思議です ;)
>
> ところで、Windowsにもhostsファイルがあるので、名前解決が遅いが問題なら
> hostsファイルの変更で対処しても良いと思います。
> http://support.microsoft.com/kb/923947/ja
>
> ではでは。
> --
> Mikiya Okuno, MySQL Support Engineer
> Sun Microsystems KK, Tokyo, Japan
> http://www-jp.mysql.com/
>
> On 18/06/2009, at 5:50 PM, 舞永 裕樹 wrote:
>
>> Mikiya Okuno様
>>
>> お世話になります。舞永です。
>>
>> 大変申し訳ございませんでした。
>>
>> skip-name-resolved
>>
>> の設定をクライアント側に記載しておりました。
>> (クライアントコマンド発行時にエラーが表示されそこで気づきました)
>>
>> 全環境での検証はまだできておりませんが、同一セグメント及び別セグメントからの初期接続も解消されたことを確認しました。
>>
>> 丸二日間様々な検証に時間を取られもう投げだそうとしていたところでしたが、
>> こちらでご助言いただき本当に助かりました。
>>
>> ありがとうございました。
>>
>>
>
>
>
>


投稿者 xml-rpc : 2009年6月19日 10:33
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/85944
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。