SQL Server Service Broker:如何确定开销或最大性能?

时间:2011-01-06 20:15:57

标签: sql-server sql-server-2008 performance service-broker

我们正在尝试确定我们是否正确使用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开销?我很乐意提供代码 - 让我知道我需要在这里发布什么。

提前致谢。

1 个答案:

答案 0 :(得分:2)

  1. 您是仅将SSB用作本地排队/处理机制,还是涉及到任何远程消息传递(x-machine传输)?
  2. 有多少队列?
  3. 是否涉及激活,我认为是,有多少max_queue_readers?
  4. 你可以用500k钉子来装饰什么?他们需要多长时间才能流失?
  5. 黑暗中的一些镜头:

    在16 CPU机器上等待工人的约60个任务...我通常认为没问题,但是对于专用于SSB处理的机器来说有点奇怪,因为这样的机器往往很少有长时间运行的任务(激活的工作) )而不是许多短期运行的,所以他们不倾向于显示THREADPOOL等。