SQL Server:我们应该使用TCP还是命名管道还是使用默认管道?


17

从同一LAN中另一台服务器上的.NET 4客户端应用程序连接到SQL Server 2008 R2时,可以设置三种不同的网络协议:

  1. TCP协议
  2. 命名管道
  3. 不要在连接字符串中设置任何内容并使用默认值

什么是最佳做法?选择什么?

附加信息:服务器和客户端上都启用了TCP和命名管道。该应用程序正在使用数据库镜像。客户端和服务器通过快速LAN进行通信。

我们正在对此进行调查,因为我们有罕见且虚假的连接和超时问题。(但是无论如何,我都想知道最佳实践)。

在MSDN上有关于此主题的文章,但它非常笼统且含糊。它不建议或推荐任何有用的东西。


2
@ccook我相信是的。tcp:几年后,我还发现在其他公司的环境中,配置已作为大多数连接字符串的一部分。我认为他们发现了类似的问题。
usr

1
我没有足够的信心将其发布为答案。但是,如此巨大的问题没有解决是很奇怪的。必须非常稀有或难以复制。@ccook
usr

1
它很少见,很难为我们复制。幸运的是,当我们创建该应用程序时,它每分钟都会同时发送垃圾邮件,它可以不时地重现它。仍然是非常不可预测的。我们现在正在测试更改-等待一段时间再将其修复。经过研究之后,我绝对倾向于使用tcp:默认情况下,除非应用程序和服务器位于同一台计算机上。
ccook

1
@ccook我有新想法。众所周知,Windows文件共享不可靠。许多人看到了虚假错误和连接失败。它很少见,但很难/不可能诊断。现在,使用命名管道时,您可以将整个技术应用到SQL Server部署中。从一般的角度来看,这似乎是不明智的。
usr

1
同意 到目前为止,tcp:似乎正在解决该问题。我们正在稍等片刻以确认它。
ccook

Answers:


18

我宁愿使用TCP / IP代替命名管道,即使在大多数情况下也没有明显的区别。您可以通过在SQL Server配置管理器中调整实例支持的协议来做到这一点,而不是对连接字符串中的内容进行硬编码(这样可以更轻松地进行更改或解决问题)。

本质上,命名管道所涉及的路由和其他开销(除非您的应用程序与SQL Server在同一台计算机上,在这种情况下,只有很少的额外开销)使其成为效率较低的选项,尤其是在网络速度较慢的情况下大规模(小于或等于100MB),或者工作负载突增。

如果您的应用在同一机器与SQL Server,你也应该保持共享内存记住-如果你有与SQL Server直接通信的SQL Server框中的应用程序,这将是最有效的选择。

您可以更详细地了解TCP / IP的性能优势


因此,基本上没什么关系,但通常最好使用TCP,因为没有理由选择命名管道。您是否同意该摘要?
usr

1
@usr好吧,当您进行扩展或网络崩溃时,这很重要。但是,是的,总的来说,我知道,在任何情况下选择命名管道都没有任何真正的好处。
亚伦·伯特兰

7

命名管道协议对于围绕NetBIOS或其他基于LAN的协议设计的应用程序很有用。

命名管道提供了在单个安全域中轻松访问远程过程调用(RPC)的便利,因此对这些应用程序有利。

通常,TCP协议在实践中是很好的做法,因为您不必关心网络上的所有这些。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.