2011-01-06 99 views
2

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

在此先感谢。

+0

你会想考虑重新发布到serverfault.com - 这是一个管理员的网站。你仍然可以在这里得到答案,但StackOverflow通常更适合于编码(如SQL查询)。 – JNK 2011-01-06 20:33:10

回答

2
  1. 您是否仅将SSB用作本地排队/处理机制,或者是否存在涉及的任何远程消息传递(x-machine传输)?
  2. 有多少个队列?
  3. 是否涉及激活,我想是的,有多少个max_queue_readers?
  4. 任何你可以配合500k尖峰?他们需要多长时间才能流失?

在黑暗中的一些镜头:

〜60任务等待工人16个CPU的机器上...我woudl通常认为OK,但对于一个致力于SSB加工机是有点怪,因为这样的机器往往有一些长时间运行的任务(激活的作业)而不是许多短时间运行的作业,所以他们不倾向于显示THREADPOOL等待。

+0

你好!一直在阅读您的博客的想法,但没有看到“处理大排队”。 (道歉格式)要回答你的问题:1)仅限本地。我们正在用MSMQ喂食它。 2)我相信2个队列。 3)不确定,会检查。 4)不是一个尖峰,只是一个逐渐爬升(SB喂食它)。无法将其与任何关联。一旦流量减慢,它可以处理高达10k /分钟,所以SB队列可以在一小时内清除。意识到(但不使用)150技巧 - 试图找出如何实现。一直跳到高达500k/s的鬼魂。 (在另一个响应中更多) – mbourgon 2011-01-07 22:10:58

相关问题