我们正在尝试确定是否适当地使用了Service Broker,并从中获得了最大的性能。我们一直在调整我们的SB对话和处理,并且已经从3000/分钟提高到8000/分钟,但CPU保持在100%不变。此外,在某些日子,SB队列保持为空,但在类似流量的日子,队列可以备份500k。
该计算机是四核(16核),没有HT,32 to和26 to分配给SQL Server,并启用了AWE。
SQL Server2008 SP1 (无CU),企业版。Microsoft SQL Server 2008 (SP1) - 10.0.2531.0 (X64) Mar 29 2009 10:11:52版权所有(c) 1988-2008 Windows NT 6.1 (Build 7600:)上的Microsoft Corporation Enterprise Edition (64位)
消息被插入到service broker队列中,该队列提取消息组并通过CLR运行它们,CLR解析XML (可惜不是简单的解析)并将其插入到表中。CLR比我们的T-SQL代码快得多。
我们平均每个调度器有35个可运行的任务
我们每晚运行统计/索引维护。
我们已经设置了服务器MAXDOP =1来尝试并提高性能。
我们已经将临时数据库文件的数量增加到64个,以避免SGAM争用,这与TF1118结合在一起似乎已经停止了tempdb争用。
看看sys.dm_os_waiting_tasks,我们通常有大约60个任务在THREADPOOL上等待,只有少数任务在其他类型上。
我们的信号等待时间为70% (资源等待时间= 30%)。
我们已经确认TokenAndUserPermCache保持在20mb以下。
查看sys.dm_os_latch_stats,我们在1分钟内看到40-200k的缓冲区锁存,这些锁存主要在sysdesend和我们用来处理对话的用户表上。
我们还看到高SOS_SCHEDULER_WAIT,这也表明CPU的压力。但这是因为CLR异常繁忙,还是因为Service Broker开销?我很乐意提供代码-让我知道我需要在这里发布什么。
提前谢谢。
发布于 2011-01-07 05:09:06
一些在黑暗中拍摄的照片:
如果你看到sysdesend/sysderecv周围的缓冲区锁存争用,你可以尝试这样做:Service Broker Whitepaper on MSDN: the 150 trick.
:Skipped Ghost Records/sec
是否超乎常人?
~60个任务在16个CPU的机器上等待工作人员...我通常会认为还可以,但对于一台专门用于SSB处理的机器来说,这有点奇怪,因为这样的机器往往只有很少的长时间运行的任务(激活的作业),而不是许多短时间运行的任务,所以它们不会显示THREADPOOL等待。
https://stackoverflow.com/questions/4619396
复制相似问题