SQL Server通信协议

  SQL Server 2008客户端连接服务器端的通讯协议有:Shared memory(共享内存)、Named Pipes(命名管道)、TCP/IP、VIA。微软官方建议:不推荐使用 VIA 协议,后续版本的 Microsoft SQL Server 将删除该功能。

  共享内存: 不同的进程可以读取物理内存中同一块数据,是一种最高效的数据交换方法。在启用了Shared Memory 协议时,SQL Server 始终首先尝试使用该协议

  命名管道: Named Pipes 是为局域网而开发的协议。管道即内存的一部分被某个进程用来向另一个进程传递信息,因此一个进程的输出就是另一个进程的输入。它屏蔽了底层的网络协议细节,所以在不了解网络协议的情况下,也可以利用命名管道来实现进程间的通信。创建管道的进程称为管道服务器,连接到一个管道的进程称为管道客户机。一个命名管道的所有实例共享同一个管道名,但是每一个实例均拥有独立的缓存与句柄,并且为客户——服务通信提供一个分离的管道,实例的使用保证了多个管道客户能够在同一时间使用同一个命名管道。

但命名管道在慢速网络中可能花费非常多并导致过多的网络流量,其它的网络客户端反过来也会受到影响。 

  TCP/IP 在快速局域网  (LAN)  环境中,和命名管道客户端在性能方面不相上下。TCP/IP 套接字还支持积压队列。试图连接到 SQL Server 时,与可能导致管道忙错误的 Named Pipes 相比,该队列可以带来有限的平稳效果。

  通常,TCP/IP 在慢速 LAN、WAN 或拨号网络中效果较好。而当网络速度不成问题时,Named Pipes 则是更好的选择,因为其功能更强、更易于使用并具有更多的配置选项。如果服务器关闭了TCP/IP协议而仅启用命名管道,还可以避免一些安全隐患。

使用如下SQL语句可以查看当前C/S通讯所使用的协议:

SELECT net_transport FROM sys.dm_exec_connections WHERE session_id = @@SPID;

  此外,对于客户端的命名管道和TCP/IP协议,还可以指定别名以在应用程序的连接字符串中隐藏真实数据库。还可以调整协议的使用优先级(Shared Memory除外)。

posted @ 2012-02-12 15:28  Revey.Jay  阅读(4180)  评论(0编辑  收藏  举报