昨日、調べ物をしていた際に Ports beyond 1433 for ADO.NET 4.5, and SQL Database V12 (ADO.NET 4.5、SQL Database V12 における 1433 以外のポート) というドキュメントを見かけました。
TDS 7.4 を使用している場合、
Azure クラウド境界内でクライアントを実行している場合、クライアントは、いわゆるダイレクト ルート を使用して SQL Database とやり取りします。接続が確立した後に、クライアントとデータベース間のやり取りにミドルウェア プロキシが関与することはありません。
という動作をするんだと思っていたところ、
我々の情熱がムッシュを動かした
— こすもす.えび (@kosmosebi) November 30, 2015
というお手紙をいただいたので、情熱はないのですが、ちょいと調べてみました。
今回は、Windows Server 2008 R2 に SQL Server 2012 の SSMS をインストールしてテストをしていますが、2 台用意し、異なる .NET Framework の環境で構築しています。
SSMS では、.NET Framework が 4.0 までの場合は、TDS 7.3、.NET Framework が 4.5 以上の場合は、TDS 7.4 が使用されますので、
- Windows Server 2008 R2 + 2012 SSMS + .NET Framework 3.5
- Windows Server 2008 R2 + 2012 SSMS + .NET Framework 4.5
の環境を Azure 上に構築しています。
TDS 7.3 で接続される環境では、以下のようなトレースが取得できます。
この場合、v11 を使用している場合や、Azure 外から SQL Database に接続をする場合と同様に、TCP : 1433 を使用して接続が行われています。
今回、検証した内容ですと「japanwest1-a.control.database.windows.net:1433」に接続されていることが確認できます。
ドキュメントに書かれている「プロキシルート」が使用されて、SQL Database に接続されている状態になるかと。
それでは、TDS 7.4 の環境で接続をしてみたいと思います。
この場合は、「tr3.japanwest1-a.worker.database.windows.net」に対して、動的ポート (TCP : 11000~11999 / 14000~14999)で接続が行われるため、今回は TCP:11148 で接続されているのが確認できます。
これがドキュメントに書かれている「ダイレクトルート」による接続となるのかと。
今回は、西日本の仮想マシンから西日本の SQL Database に対して接続を行っているのですが、プロキシルートとダイレクトルートの応答の違いを「SELECT 1」というクエリを実行して比較した結果が以下になります。
上が、TDS 7.3 のプロキシルート / 下が TDS 7.4 のダイレクトルートとなります。
10回実行したのサーバーからの応答時間の平均値が、プロキシルートの場合、「6.1 ms」、ダイレクトルートの場合、「4.5 ms」となっており、今回の結果であれば、ダイレクトルートのほうが、平均値は気持ち低いですが、目立った変化としての値は出てきませんでした。
ダイレクトルートのほうが、経由するルートが少ないかと思いますので、気持ちレスポンスは速そうですが、実測値としては誤差の範囲になる感じなのでしょうかね。
[…] 詳しくはSE の雑記を参照 […]
Azure Update (2015.12.10) | ブチザッキ
10 12月 15 at 06:08