我目前正在审查一个SSRS服务器频繁阻塞和死锁的案例。
这些报告不是关键业务,它们经常被杀死以缓解阻塞。
但是,同样的 SQL Server 上有一些关键数据库(它与大型共享点场共享一个 SQL 服务器),这些数据库的性能一直在下降。
我的前任的计划如下:
- 将 4TB 的数据库从 A 迁移到 B
- 将报告服务器(原来是 A)从 B 迁移到 C
- 将报告服务器(原来是 C)从 C 迁移到 B
原因是我们将拥有更好的硬件 (B),能够摆脱旧服务器 (A),并从关键数据库服务器(现在是 B)中删除报告服务器(最终位于 C)。
但是,我并不完全相信这会对性能产生很大影响(除了较新的硬件)。
我在一周的大部分时间里一直在监视这些块,它始终是 WriteLockSession 阻塞 ReadChunkSegment。据我从文档(谷歌)中可以看出,这非常好。
我如何确定/如果一个阻塞的进程导致不同数据库的速度变慢?
如果我能证明性能问题与共享硬件无关(报告和其他数据库),我想设置共享数据集。由于大多数报告和所有长时间运行的报告都在查询相同的小数据子集。
被阻止的请求不起作用。这是一个例子:
创建阻塞查询
运行将被上述会话阻止的查询
现在看看这个被阻止的请求可能正在做的任何“工作”(查询
sys.dm_exec_requests
这个被阻止的会话,然后等待一段时间并再次查询以进行比较/对比):您在这里看到的是一个没有工作的请求,因为它不在
running
状态中。当它是时,suspended
它不在处理器上做任何工作。