症状

在 SQL Server 计算机上,假定您执行下列操作之一:

  • 在大型数据库中创建数据库快照。 完成此操作后执行大量数据修改操作或维护操作源数据库中。

  • 在镜像数据库上创建数据库快照

  • 执行的命令以检查大型数据库的一致性的 DBCC CHECKDB 家族,也在该数据库中执行大量的数据更改。

在这种情况下,请注意根据 SQL Server 错误日志中报告了以下错误 运行 SQL Server 的环境。

Windows Server 2003

操作系统返回的错误 1450年 (存在系统资源不足,无法完成请求的服务。) 到 SQL Server 在偏移量 0x00002a3ef96000 文件中与句柄 0x0000000000000D5C 在写操作过程。这通常是暂时的情况,SQL Server 会不断重试该操作。如果问题仍然存在然后立即必须采取操作来更正它。

Windows Server 2008,Windows Vista 中和更高版本的服务器和客户端操作系统

操作系统返回错误 665 (所请求的操作无法完成由于文件系统限制) 到 SQL Server 在偏移量 0x00002a3ef96000 写在文件中 Sam.mdf:MSSQL_DBCC18

除了这些错误,您可能会发现闩锁超时错误如下所示:

  • 等待闩锁时发生超时: 类'DBCC_MULTIOBJECT_SCANNER',id 000000002C61DF40,键入任务 0x00000000038089B8 4: 16,waittime 600,标志 0x1a,拥有 0x0000000006A09828 任务。 继续等待。

  • 等待闩锁时发生超时: 类'ACCESS_METHODS_HOBT_COUNT',id 000000002C61DF40,键入任务 0x00000000038089B8 4: 16,waittime 600,标志 0x1a,拥有 0x0000000006A09828 任务。 继续等待。

此外,您可能还注意到阻塞时查看各种动态管理视图 (DMV) (如sys.dm_exec_requestssys.dm_os_waiting_tasks等。

原因

如果大量的 ATTRIBUTE_LIST_ENTRY 实例需要维护在 NFTS 的碎片过多的文件,将出现此问题。 在以下知识库文章中解释了此行为:

  • 967351  NTFS 卷中的碎片过多的文件不可能增长超过某一大小

这些快照文件的生存期内发生的大量的数据修改时,可以获得到这些级别零碎由 SQL Server 数据库快照创建稀疏文件。

有关完整的 SQL Server 引擎如何使用 NTFS 稀疏文件和备用数据流背景,请参阅以下链接:

解决方案

  1. 分解成更小的文件大的数据库。 例如,如果您有一个 8 TB 的数据文件可以将它分为八个 1 TB 数据文件。 高级别以下是完成此操作的步骤:

    1. 将 7 新 1 TB 文件添加到同一文件组中。

    2. 重建的现有表的聚集的索引,这将自动分配 8 文件中每个表的数据。 如果表没有聚集的索引,然后创建一个,然后放它来完成相同。

    3. 原 8 TB 文件向下,现在这就是约 12-15%的收缩完整。

  2. 请考虑使用不具有相同的 ATTRIBUTE_LIST_ENTRY 引用限制 NTFS 提供了。 通过使用引用,您必须重新格式化该卷。

  3. 请考虑对数据库文件所在的卷进行碎片整理。 有关详细信息,请参阅操作系统错误 (665-文件系统限制) 不只是不再 DBCC

  4. 知识库文章 967351 中的应用 Windows 修复,然后设置该卷格式使用/L选项来获取大 FRS.

  5. 3029977 修复: 操作系统错误 665 执行 DBCC CHECKDB 命令包含 SQL Server 2014 columnstore 索引数据库时

  6. 使用以下性能改进减少 DBCC 检查命令的有效期,因此避免 665 错误:

    • 2634571改进 DBCC CHECKDB 命令可能会导致更快的性能,当您使用 PHYSICAL_ONLY 选项启用跟踪标志-T2562 和 T2549

    • 945770修补程序: 需要更长的运行 DBCC CHECKDB 语句启用跟踪标志-T2566

    • 3029825解决: DBCC CHECKDB 长运行涉及 SQL CLR Udt 时

  7. Windows 2008 Server客户应该应用以下修补程序:

    • 957065  状态错误信息的 ntfs.sys 驱动程序时,某些应用程序更新 Windows Server 2008 中,或在 Windows Vista 系统中的文件很大:"0xc0000427 STATUS_FILE_SYSTEM_LIMITATION"

  8. SQL Server 2005 或 SQL Server 2008年的客户应考虑应用于他们所运行的版本适用了下列修补程序:

    • 961123  修复: SQL Server 服务停止或在 SQL Server 2005 数据库上运行 DBCC 检查命令时创建 SQL Server 2005 数据库的数据库快照

    • 967164  修复: SQL Server 服务停止响应,并且您收到错误 1450 当您创建数据库快照或 SQL Server 2005 中,SQL Server 2008年中的数据库上运行 DBCC CHECK 语句

    • 967470  修复: 执行更新或删除操作没有创建 SQL Server 2005 中,SQL Server 2008年中的聚集的索引的表时出现错误消息:"操作系统返回的错误 1450年"

某些情况下,仍可能会应用这些修补程序后,即使会遇到上面提到的错误。 在这种情况下,可以计算一些以下博客文章中所述的解决方法:

有关详细信息,请参阅以下 Microsoft 资源:

不只是对了 DBCC 操作系统错误 (665 文件系统限制)

 

稀疏文件支持 NTFS 和引用

当 SQL Server 数据库位于引用的卷的 DBCC CHECKDB 行为 

 

Need more help?

Expand your skills
Explore Training
Get new features first
Join Microsoft Insiders

Was this information helpful?

How satisfied are you with the translation quality?
What affected your experience?

Thank you for your feedback!

×