我们正在尝试确定我们是否正确使用Service Broker并从中获得最大性能。我们一直在调整我们的SB对话和处理,并且已经从3000 /分钟变为8000 /分钟,但CPU一直保持在100%。此外,在某些天,SB队列保持为空,但在类似的流量日,队列可以备份500k。
该机器是四核(16核),没有HT,32gb RAM和26gb分配给SQL Server,启用了AWE。
SQL Server 2008 SP1(无CU),企业版。 Microsoft SQL Server 2008(SP1) - 10.0.2531.0(X64)2009年3月29日10:11:52版权所有(c)1988-2008 Microsoft Corporation企业版(64位)在Windows NT 6.1(Build 7600:)
将消息插入到服务代理队列中,该队列提取消息组并通过CLR运行它们,CLR解析XML(不是简单的解析,唉)并插入表中。 CLR比我们的T-SQL代码快得多。
每个调度程序平均有35个可运行的任务
我们每晚运行统计/索引维护。
我们已设置服务器MAXDOP = 1以尝试帮助提高性能。
我们将tempdb文件的数量增加到64以避免SGAM争用,这与TF1118结合似乎已经停止了TEMPDB争用。
查看sys.dm_os_waiting_tasks,我们通常有大约60个任务在THREADPOOL上等待,其他类型只有少数任务。
我们的信号等待率为70%(资源等待= 30%)。
我们已经验证TokenAndUserPermCache保持在20mb以下。
查看sys.dm_os_latch_stats,我们在1分钟内看到40-200k BUFFER锁存器,主要是在sysdesend和我们用来处理Dialogs的用户表。
我们还看到高SOS_SCHEDULER_WAIT,它也表示CPU压力。但是,由于CLR非常繁忙,还是因为Service Broker开销?我很乐意提供代码 - 让我知道我需要在这里发布什么。
提前致谢。
答案 0 :(得分:2)
黑暗中的一些镜头:
Skipped Ghost Records/sec
是否会脱离图表?