我们使用sql express 2008 r2进行简单的报告和数据存储。数据通常以每分钟600至3000条记录的速率写入。 (一个客户端连接一台机器)。我们需要最佳的执行协议。 (良好的性能,而不会占用内存..)我在线阅读文章,在决定tcp / ip,共享内存和命名管道时,它们很混乱。总结msdn文档
1)共享内存没有可配置的属性。始终首先尝试共享内存,并且无法从“客户端协议属性”列表中的“启用协议”列表的顶部位置移动共享内存。 Does this mean shared mem is preferred and fastest ?
2)对于TCP / IP套接字,数据传输更加简化并且开销更少。数据传输还可以利用TCP / IP套接字性能增强机制,例如窗口化,延迟确认等。好。但是is it faster than shared mem ?
3)如果服务器应用程序在运行Microsoft®SQLServer™实例的计算机上本地运行,则可以选择本地命名管道协议。 Local named pipes runs in kernel mode and is extremely fast.
当我读到这篇文章时,我不能再感到困惑,于是决定将我的问题发布在堆栈上。
所以sql Gurus请帮我决定。谢谢
答案 0 :(得分:2)
共享内存是最快的协议,但是如果您的目标是“性能”,您用来访问数据库的框架以及如何传输数据,您编写的sql查询(或使用其他方法)都将拥有对绩效的影响要大得多。
如果您打算尝试使用ADO / ADO.NET或其他类似的重协议,那么大多数性能都会丢失。如果您需要调查并学习如何在较低级别与数据库引擎进行通信,那么您将获得极高的性能。
请参阅http://www.devart.com/sdac/作为开始。
答案 1 :(得分:1)
如果您的回答中的以下引用实际上是正确的,那么您的问题已经包含答案:
始终首先尝试共享内存,并且无法从“客户端协议属性”列表中的“启用协议”列表的顶部位置移动。
鉴于您的客户端和数据库在同一台机器上运行,这意味着共享内存将始终有效(没有严格的措施)。你选择使用什么协议并不重要 - 共享内存 最终将被使用的协议! : - )
它的价值在于它的性能完全取决于SQL Server中使用的实现(我基于我对通信方法的了解而不是对SQL Server的深入了解),但顺序(在性能方面)差不多当然是这样的(最快的):
我找不到任何引用共享内存实际上 比命名管道更快,但TBH我认为它不重要 - 客户端和本地计算机上的数据库之间的通信将是无论如何,我非常高效,我怀疑你能否注意到任何性能差异。