我们正在尝试确定我们是否正确使用Service Broker并获得最高性能。我们一直在调整我们的SB对话和处理,并且已经从3000 /分钟变成8000 /分钟,但是CPU保持恒定在100%。此外,在某些日子里,SB队列保持空白,但在类似流量的日子里,队列可以备份500k。SQL Server Service Broker:如何确定开销或最大性能?
该机器是四核(16核),没有HT,32GB RAM和26GB分配给SQL Server,启用AWE。
SQL Server 2008 SP1(无CU)企业版。 Microsoft Windows Server 2008(SP1) - 10.0.2531.0(X64)Mar 29 2009 10:11:52 Copyright(c)1988-2008 Windows NT 6.1(Build 7600:)上的Microsoft Corporation企业版(64位)
消息被插入到服务代理队列中,该队列抽取消息组并通过CLR运行它,CLR解析XML(不是简单的解析,唉)并插入到表中。 CLR比我们的T-SQL代码快得多。
我们每个调度
我们夜间运行统计/索引维护平均35个可运行任务。
我们已经设置了服务器MAXDOP = 1来尝试和帮助性能。
我们已将tempdb文件的数量增加到64个,以避免SGAM争用,它与TF1118结合似乎已停止TEMPDB争用。
查看sys.dm_os_waiting_tasks,我们通常在THREADPOOL上等待大约60个任务,其他类型上只有少数任务。
我们的信号等待率为70%(资源等待= 30%)。
我们已验证TokenAndUserPermCache保持在20mb以下。
查看sys.dm_os_latch_stats,我们在1分钟内看到40-200k BUFFER锁存器,这些锁存器大多位于sysdesend和用于处理对话框的用户表中。
我们也看到高SOS_SCHEDULER_WAIT,它也表示CPU压力。但是,是因为CLR非常繁忙,还是因为Service Broker的开销?我会很乐意提供代码 - 让我知道我需要在这里发布。
在此先感谢。
你会想考虑重新发布到serverfault.com - 这是一个管理员的网站。你仍然可以在这里得到答案,但StackOverflow通常更适合于编码(如SQL查询)。 – JNK 2011-01-06 20:33:10