SQL Server:TCPまたは名前付きパイプを使用するか、デフォルトを使用する必要がありますか?


17

同じLAN内の別のサーバー上の.NET 4クライアントアプリケーションからSQL Server 2008 R2に接続する場合、3つの異なるネットワークプロトコルを設定できます。

  1. TCP
  2. 名前付きパイプ
  3. 接続文字列には何も設定せず、デフォルトを使用します

ベストプラクティスとは何ですか?何を選ぶ?

追加情報:TCPと名前付きパイプの両方が、サーバーとクライアントの両方で有効になっています。アプリケーションはデータベースミラーリングを使用しています。クライアントとサーバーは高速LANで通信します。

まれで偽の接続とタイムアウトの問題があるため、これを調査しています。(ただし、それにもかかわらず、ベストプラクティスを知りたい)。

MSDNにはこのテーマに関する記事がありますが、非常に一般的で曖昧です。有用なアドバイスや推奨事項はありません。


2
@ccookしたと思う。またtcp:、数年後に別の会社の環境でほとんどの接続文字列の一部として構成されていることもわかりました。彼らは同様の問題を見つけたと思います。
usr

1
それを答えとして投稿する自信がありません。しかし、そのようなひどい問題が未解決であることは奇妙です。非常にまれであるか、再現が困難である必要があります。@ccook
usr

1
それは非常にまれであり、私たちのために再現するのは難しいです。幸いなことに、接続を1分ごとに同時にスパムするアプリを作成したとき、時々それを再現できます。それはまだ非常に予測不可能です。ただし、現在、その変更をテストしています-修正を呼び出す前にしばらく待っています。しかし、これを検討した結果、アプリとサーバーが同じマシン上にない限り、デフォルトでtcp:を使用することに間違いはありません。
クック

1
@ccook新しい考えがありました。Windowsファイル共有は信頼性が低いことで有名です。スプリアスエラーと接続障害は多くの人に見られます。まれですが、診断が困難/不可能です。名前付きパイプを使用する場合、このテクノロジ全体をSQL Server展開に取り込みます。それは一般的な理由で賢明ではないようです。
usr

1
同意した。これまでのところ、tcp:は問題に対処しているようです。確認済みと呼ぶのを少し待っています。
クック

回答:


18

ほとんどの場合、顕著な違いはありませんが、名前付きパイプよりもTCP / IPの方が好きです。これを行うには、接続文字列にハードコーディングするのではなく、SQL Server Configuration Managerのインスタンスでサポートされているプロトコルを調整します(これにより、変更やトラブルシューティングが容易になります)。

基本的に、名前付きパイプに関連するルーティングおよびその他のオーバーヘッド(アプリがSQL Serverと同じマシン上にある場合、この場合、オーバーヘッドは少しだけ余分になります) (100MB以下)、またはワークロードがバーストして来る場合。

アプリ SQL Serverと同じボックスにある場合は、共有メモリにも留意する必要があります。SQLServerと直接通信するアプリケーションがSQL Serverボックスにある場合、これが最も効率的なオプションになります。

TCP / IPのパフォーマンスの利点について詳しく読むことができます


したがって、基本的にはそれほど重要ではありませんが、名前付きパイプを選択する理由がないため、一般にTCPを使用することをお勧めします。その概要に同意しますか?
usr

1
@usrまあ、それはスケーリングするとき、またはネットワークが悪い場合に重要です。しかし、はい、一般的に、私が知っている名前付きパイプを選択することには本当の利点はありません。
アーロンバートランド

7

名前付きパイププロトコルは、NetBIOSまたは他のLANベースのプロトコルを中心に設計されたアプリケーションに役立ちます。

名前付きパイプを使用すると、単一のセキュリティドメイン内でリモートプロシージャコール(RPC)に簡単にアクセスできるため、これらのアプリケーションに有利です。

通常、TCPプロトコルは、ネットワーク上のこれらすべてを気にする必要がないため、実際には優れています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.