SQL Server后端的基于实时消息的WCF服务性能



我目前正在尝试编写一个高性能WCF服务。吞吐量是必须的。我的目标是每秒至少做500吨。

我已经在我的机器上设置了一个测试工具,正在寻找解决性能瓶颈的输入和指导。

本质上:

该消息采用xml格式

  • 我反序列化消息(我应该在T-SQL还是C#中这样做?C#似乎更快,但由于我无论如何都要使用SQL Server…)
  • 我将消息数据存储在SQL Server中
  • 我在SQL Server中对消息进行了一些处理
  • 我将生成的xml返回给调用者(同样是C#或T-SQL)

我做了一个粗略的测试,在分解xml并通过nettcp 进行响应后,似乎只插入了一个表就得到了大约200个tps

通过一些调查,我发现SQL Server中存在巨大的性能瓶颈(只需插入一个简单的表,其中只有一列存储只有5行文本的xml)

我能做些什么来降低实时服务中T-SQL操作的成本,不幸的是,由于所发生的事情的流动,这些操作不得不被阻塞。

IO似乎是一笔巨大的开支,我正在努力最大限度地提高我的解决方案的性能。

WCF被配置为使用每实例调用,并且已经进行了调整。如果我去掉SQL调用,我会得到大约1500tp/s!我想知道我能做些什么来修复IO瓶颈(我使用的是SQL Server 2008)

感谢您的任何意见。

我认为您需要查看SQLXML库。在过去的一年里,我一直在使用它,它确实是将XML加载到关系数据库的最快方法。因此,IMHO,最好的方法是使用SQLXML批量加载将XML加载到数据库(https://msdn.microsoft.com/en-us/library/ms171806.aspx)您可以告诉SQLXML为您生成一个关系模型,即存储XML数据所需的表,而不是将数据库中的XML切碎。然后,您可以使用表来使用基于集合的逻辑进行处理(这样您实际上可以优化查询),然后使用"for xml"来重新创建xml。

最新更新