过时的数据库统计信息降低 SharePoint 服务器性能,导致超时,并生成运行时错误

重要说明:本文是由 Microsoft 机器翻译软件进行的翻译并可能由 Microsoft 社区通过社区翻译机构(CTF)技术进行后期编辑,或可能是由人工进行的翻译。Microsoft 同时向您提供机器翻译、人工翻译及社区后期编辑的文章,以便对我们知识库中的所有文章以多种语言提供访问。翻译的文章可能存在词汇、句法和/或语法方面的错误。Microsoft 对由于内容的误译或客户对内容的使用所导致的任何不准确、错误或损失不承担责任。

点击这里察看该文章的英文版: 3103194
有关数据库统计信息
查询优化的统计信息是包含有关一个或多个列中的值的分布的统计信息的表或索引的视图的对象。查询优化器使用这些统计信息来估计基数,或中的行数,查询结果。这些基数估计使查询优化器创建高质量的查询计划。

例如,查询优化器可以提高查询性能,通过使用基数估计值来选择索引搜寻运算符而不是更多的资源密集型索引扫描运算符。否则,过时的统计信息可能会降低查询的性能,通过使用低效的查询计划。

大型企业 SharePoint 部署必须更新数据库统计信息驻留在 Microsoft SQL Server 中的内容数据库的数据库维护计划。客户不应依赖仅基于 SharePoint 的数据库维护作业来执行这些任务。有关详细信息,请参阅 SQL Server 在 SharePoint 服务器场中的最佳做法.
症状
当数据库统计信息过时,SharePoint 服务器的安装可能会遇到一个或多个以下症状:
  • 缓慢的加载时间并且可能生成 HTTP 500 错误,当您打开网站页面的性能下降
  • 性能降低生成如下所示的错误消息:

    服务不可用

    未知的 SQL 异常 53

    服务器错误在 / 应用程序的运行时错误
  • 导致意外的 SQL Server 性能、 锁定数据库,和阻止 preforming 搜索爬网
  • 长时间运行计时器作业,如采取越来越长,每次迭代中完成的"Microsoft SharePoint 基础使用率数据处理"作业
  • 无法打开 SharePoint 站点,并将如下所示的错误消息:

    意外的 System.Web.HttpException: 请求已超时。
  • 当加载导航和下面的错误消息,则站点呈现超时:

    PortalSiteMapProvider 无法获取节点的子级
  • 当它处理 SharePoint 查询正在运行 SQL Server 的服务器上的 CPU 使用率过高
原因
这些问题可能是由于过时的数据库统计信息所致。SharePoint 运行计时器作业每天要使用proc_updatestatistics SQL 过程更新数据库统计信息。但是,由于各种原因,此计时器作业可能无法完成或可能不会更新所有表一致。例如,如果备份与 SharePoint 计时器作业同时运行针对内容数据库从 SQL Server,将不会继续该作业。

更新统计信息的 SharePoint 计时器作业完成时,以下事件可能写入 ULS 日志:
  • e9bf"更新数据库 {0} 中的统计信息时出现错误"
  • cm1y"更新统计信息数据库 {0} 中"
  • dbl2"忽略统计信息更新数据库 {0} 的因为它的状态为 {1}"
  • cm1x"更新统计信息在 {0} 上的所有数据库"
如果这些条件不严密监视并不会采取纠正操作,数据库统计信息变得过时了,和 SharePoint 性能问题最终会发生。
解决方案
若要防止这些症状和潜在的服务中断,应实现 SQL Server 维护计划保留 SharePoint 内容数据库统计信息更新使用 FULLSCAN 选项。有关详细信息,请参阅 索引统计信息.

在实现时要更新您的 SharePoint 数据库统计信息的 SQL Server 维护计划,它不需要禁用从 SharePoint 作业。但是,由于这些维护任务从两个位置执行类似的功能,是允许禁用的计时器作业从 SharePoint 服务器场。有关如何从 SharePoint 服务器管理索引更新作业的详细信息,请参见 使用 SharePoint 数据库已过时的索引统计信息 (SharePoint 2013).
更多信息
更新的 SharePoint 内容数据库统计信息,使用 FULLSCAN 选项,SQL Server 从每天都是建议的最佳做法。有关详细信息,请参阅 SQL Server 在 SharePoint 服务器场中的最佳做法SharePoint 基础 2010年的数据库维护.

但是,如果 SharePoint 场由于过时的统计信息当前遇到性能问题,以下信息可作为一次性的缓解步骤缓解此问题。

若要显示来自特定数据库的数据库统计信息,请运行下面的查询:
-- Checking the DB Statsselect a.id as 'ObjectID', isnull(a.name,'Heap') as 'IndexName', b.name as 'TableName', stats_date (id,indid) as stats_last_updated_time from sys.sysindexes as a inner join sys.objects as b on a.id = b.object_id where b.type = 'U'
有关数据库统计信息查看详细信息,请参见 DBCC SHOW_STATISTICS.

若要更新数据库统计信息使用 FULLSCAN 选项的单个数据库上,运行以下查询:
-- Update DB StatsEXEC sp_MSforeachtable 'UPDATE STATISTICS ? WITH FULLSCAN'
重要说明"Sp_MSforeachtable"选项是"按原样"提供,未记录的过程和只应该用于缓解即时的问题。不建议作为定期维护计划的一部分,使用此过程。相反,看到我们更新统计信息 (事务处理 SQL) 有关如何实现的计划更新统计数据,使用 FULLSCAN 选项的文档。

这取决于如何过时已成为数据库统计信息,您可能需要通过运行清除查询计划缓存 DBCC FREEPROCCACHE 命令后更新数据库统计信息。语法和参数,在此过程中,您将发现 DBCC FREEPROCCACHE (事务处理 SQL).这样做可确保更新数据库统计信息后,新的查询,使用最佳执行计划。例如,请参见下面的查询:
-- Remove all elements from the plan cacheDBCC FREEPROCCACHE
重要说明运行 DBCC FREEPROCCACHE 命令清除在 SQL 实例中的所有查询计划缓存。在生产期间执行它之前,此命令应该很好理解。

如果 DBCC FREEPROCCACHE 更新过时的数据库统计信息后不执行命令时,查询效率低下的执行计划与可能仍驻留在缓存中并使用。如果出现这种情况,通过使用存储的过程 (请参阅强制指定存储过程重新编译 sp_recompile (事务处理 SQL)).例如,请参见下面的查询:
USE SP2013_Content_DBGOsp_recompile proc_getwebnavstruct
运行sp_recompile 命令和过程、 函数或表参数而不会影响实例的目标移除缓存中的单个元素。

警告:本文已自动翻译

属性

文章 ID:3103194 - 上次审阅时间:10/10/2015 21:45:00 - 修订版本: 1.0

Microsoft SharePoint Server 2013, Microsoft SharePoint Server 2010, Microsoft Office SharePoint Server 2007

  • kbqfe kbsurveynew kbexpertisebeginner kbbug kbfix kbtshoot kbmt KB3103194 KbMtzh
反馈