错误 #: 201049 (内容维护) VSTS:1972462

症状

请考虑以下情形:

  • 运行更改索引...联机Microsoft SQL Server 2012年或 SQL Server 2014年中的查询。

  • 由于死锁或用户启动的操作,如运行 kill 命令或取消查询,此查询将中止。

在这种情况下,必须使用索引元数据的任何 DML 操作被阻止或需要很长时间才能完成。

此外,您可能会遇到下列症状︰

  • 高的值为PWAIT_MD_RELATION_CACHE或MD_LAZYCACHE_RWLOCK查询sys.dm_os_wait_stats和sys.dm_exec_requests动态管理视图 (DMV) 时等待类型

  • SOS_RW 的高的值查询sys.dm_os_spinlock_stats DMV 时等待类型

为每个新的 DML 查询慢慢地清除同步对象时,会发生锁保护通常出现此问题。等待的同步对象的性质,由于 CPU 使用率是通常有限。

解决方案

累积更新信息

第一次修复该问题的SQL Server累积更新包

对于 SQL Server 2014年的累积更新 1/en-us/help/2931693

SQL Server 2012 sp1 的累积更新 9/en-us/help/2931078

SQL Server 的每个新累积更新包含以前的累积更新所包含的所有修补程序和所有安全修补程序。查看 SQL Server 的最新累积更新:


修补程序信息
可以从 Microsoft 获得受支持的修复程序。然而,此修补程序仅用于解决本文中描述的问题。仅对出现这一特定问题的系统应用此修补程序。

如果此修复程序可供下载,则在此知识库文章顶部"提供修补程序下载"部分。如果未显示此部分,将申请提交到 Microsoft 客户服务和支持,以获取此修复程序。

注意:如果发生其他问题或需要任何故障诊断时,您可能需要创建单独的服务请求。通常的支持费用将适用于其他支持问题和不计入该特定修补程序的问题。有关 Microsoft 客户服务和支持电话号码或创建单独的服务请求的完整列表,请访问下面的 Microsoft 网站︰

http://support.microsoft.com/contactus/?ws=support注意:"修补程序下载可用"窗体显示获取此修复程序的语言。如果看不到您的语言,则修补程序没有那种语言的版本。

重要:应用此修补程序,改变索引后...联机查询可以中止而不降低性能的 SQL Server。

解决方法

要变通解决此问题,您可以刷新元数据条目,以防止锁保护和潜在的重新编译周期,减小查询的性能。若要执行此操作,使用下列方法之一来帮助刷新元数据条目︰

  • 重新启动 SQL Server 2012年或 SQL Server 2014年的实例。

  • 置于离线状态,有问题的数据库,然后将它联机。

状态

Microsoft 已经确认这是“适用于”一节中列出的 Microsoft 产品中的问题。

调用堆栈信息ntdll!ZwSignalAndWaitForSingleObject+0xakernel32!SignalObjectAndWait+0x110
sqldk!SystemThread::SignalAndWait+0x2a
sqldk!SOS_Scheduler::Switch+0xb5
sqldk!SOS_Scheduler::SuspendNonPreemptive+0xd2
sqldk!SOS_Scheduler::Suspend+0x20
sqldk!EventInternal<SuspendQueueSLock>::Wait+0x2bc
sqldk!SOS_RWLock::GetLongWait+0x10b
sqlmin!SOS_RWLock::GetLock+0x1319e1
sqlmin!AutoRWLock::GetLock+0x1319e1
sqlmin!MDAutoRWLock::AcquireLock+0x129
sqlmin!MDAutoRWLock::GetReadLock+0xe
sqlmin!CMEDIndex::Release+0xc1
sqlmin!CMEDIndexStatsCollection::GetProxyIndexInternal+0x294
sqlmin!CMEDIndexStatsCollection::GetNextIndexWithLock+0x4b9
sqlmin!CMEDProxyRelation::GetNextIndexWithLock+0x1c
sqlmin!CMEDProxyRelation::GetNextIndex+0x71
sqllang!CTableMetadata::GatherIndexes+0x948
sqllang!CTableMetadata::LoadMetadata+0x10a
sqllang!CLogOp_Stats::DeriveGroupProperties+0x4b
sqllang!CLogOp_Get::DeriveGroupProperties+0x1d
查看RWLock,我们看到︰0:308> dt 0x00000070`6bb435b8 SOS_RWLock +0x000 m_lock : RWSLock
+0x008 m_waiters : SEList<SOS_RWLock::RWLockWaiter,0>
+0x018 m_currentReaders : 3
+0x01c m_waitingWriters : 0xe
+0x020 m_mode : 1 ( RWLOCK_READ )
+0x028 m_pExclusiveOwner : (null)

Author:jannaw;
作者︰ v-shysun
技术审阅︰ Bob Dorr;Bob 选区;Ajayj;Sureshka;ramakoni;jannaw;sqlprev
编辑器︰ v-jesits

需要更多帮助?

扩展你的技能
了解培训
抢先获得新功能
加入 Microsoft 内部人员

此信息是否有帮助?

你对翻译质量的满意程度如何?

哪些因素影响了你的体验?

是否还有其他反馈?(可选)

谢谢您的反馈意见!

×