#SP2010 场极慢的 StatMan 查询问题

Jer*_*ers 7 performance statistics sharepoint sql-server-2008-r2

我在为此创建的博客文章中解释了我遇到的问题(易于参考和管理 1 个位置的响应/解决方案),可在此处找到:http : //schoennie.blogspot.com/ 2013/09/slow-statman-query-issue-with-sp2010.html

简短的总结是,在 SQL 2008R2(同一服务器)之上安装 SharePoint 2010 的单个服务器在特定时间间隔内(似乎是每天早上)在每次第一次上传时都遇到非常缓慢的响应。分析 SQL 活动后,我发现当您开始上传时,此查询会在上传的“插入部分”之前执行:

SELECT StatMan([SC0], [LC0])
FROM   (SELECT TOP 100 PERCENT CONVERT(VARBINARY, 
                                        SUBSTRING ([Content], 1, 100) + 
                                        +SUBSTRING([Content], CASE
                                                                WHEN LEN([Content]) <= 200 THEN 101
                                                                ELSE LEN([Content]) - 99
                                                            END, 100)) AS [SC0],
                                        DATALENGTH([Content])   AS [LC0]
        FROM   [dbo].[AllDocStreams] WITH (READUNCOMMITTED)
        ORDER  BY [SC0]) AS _MS_UPDSTATS_TBL 
Run Code Online (Sandbox Code Playgroud)

我现在花了几天时间试图获得有关此 StatMan 查询的更多信息,以及为什么它会导致磁盘 i/o 通过屋顶和磁盘队列长度增长到 5 值以上(通常约为 0.01)

请分享您对此的想法,或者为我指明某个方向/资源?我在这个软件领域作为 SharePoint 顾问和 DBA 参与了大约 8 年,但我还没有见过这样的事情!

非常感谢,杰罗恩

Bre*_*zar 6

这是 SQL Server 更新表上的统计信息。当您的表中大约 20% 的数据发生更改时,它可以自动触发,或者如果您运行更新统计信息的作业,则可以按需触发。

您有几种方法可以减轻疼痛。

您可以启用异步统计信息更新,这让 SQL Server 在幕后更新统计信息而不会阻止其他查询。不过,正如 Kendra Little 在The Secret IO Explosion 中所解释的那样,它仍然会对性能产生影响。

您可以在维护时段内主动手动更新统计信息。这并不能阻止 20% 的数据发生变化的可能性,但只会降低可能性。

您可以完全禁用统计信息的自动更新。这通常是一个非常糟糕的主意,因为您的执行计划可能非常不正确,而且它也不会阻止人们手动更新统计信息。