在数据库大小分配期间,我正在等待类型PREEMPTIVE_OS_WRITEFILEGATHER。昨天,我将数据库大小配置为供应商建议的值。我们需要将数据库大小设置为700GB,保留150 GB的日志文件。我已经在不到2分钟的时间内成功配置了数据文件大小,因为我们已经启用了  即时文件初始化。我们知道即时文件初始化(IFI)通过跳过零初始化操作来加速数据文件大小分配。但是当我开始扩展日志文件大小时,花了很多时间。花费更长时间的一个原因可能是因为 正在运行以分配日志文件空间的会话ID显示的等待类型PREEMPTIVE_OS_WRITEFILEGATHER

什么是PREEMPTIVE_OS_WRITEFILEGATHER?

根据MSDN,PREEMPTIVE_OS_WRITEFILEGATHER是在SQL Server等待操作系统完成部分写操作时发生的等待类型。此等待通常出现在未正确配置自动增长的数据库中或在大规模分配到数据库文件期间。如果您经常获得此等待类型,则应调查SQL Server实例。您还可以观察此等待类型以及BACKUPBUFFER   和LOGBUFFER等待类型。

有时,我们在数据库恢复操作期间也会获得此等待类型。我们知道,备份操作会捕获数据库文件大小等详细信息,而不管数据或日志文件中填充了多少数据或日志。当您执行还原操作时,它将创建那么大的文件,这将花费更多的时间,因为SQL Server将忙于将文件归零,相当于源数据或日志文件大小。如果您已在数据库服务器上启用了IFI,那么您将无法获得数据文件的此等待类型,但仍可以获取日志文件大小分配。

假设您的数据库有100GB的日志文件,并且只填充了12 GB。如果你备份这个数据库并在任何地方恢复它,那么恢复操作将创建一个100GB的日志文件,这将花费很多时间,因为要对所有100GB大小执行零初始化操作。

减少等待类型的解决方案PREEMPTIVE_OS_WRITEFILEGATHER

Microsoft已提供一项功能即时文件初始化以克服或减少此等待类型,但此功能仅适用于数据文件而非日志文件。我们希望此功能可以在SQL Server的未来版本中同时处理数据和日志文件。

如果在扩展数据文件期间或在数据文件自动增长期间获得此等待类型,则只需在SQL Server数据库服务器上启用即时文件初始化,此等待类型将从下次消失。此功能将跳过数据文件的零初始化,并直接将给定大小分配给数据文件。阅读附加文章以了解即时文件初始化以及如何在SQL Server实例上启用它

但我们知道此功能对日志文件不起作用,因此如果在扩展日志文件期间或日志文件自动增长期间发生这种情况,我们就无法使用此功能来减少此等待类型。我们遇到了同样的问题,因为我们已经为数据文件启用了即时文件初始化,但在扩展日志文件期间卡住了 在这里,我将为您提供一些可以应用的最佳实践,以避免和减少此等待类型。

  1. 将自动增长从默认值增加到某个数值,以减少数据库文件的频繁自动增长。Thumb规则是将自动增长大小保持为相应数据库文件大小的八分之一。阅读本文以了解数据库文件Autogrowth的  完美价值?
  2. 如果可能,通过将未来增长的预期大小分配给数据库来避免自动增长。
  3. 监控存储子系统并调查是否发现任何问题。如果需要升级存储。
  4. 有关任何系统相关问题,请查看Windows事件查看器。
  5. 启用即时文件初始化以避免数据文件的零初始化。
  6. 将事务从逐行语句合并到批处理。
  7. 如果您有更大的日志文件,其中填充了少量日志。您可以使用附加文章中给出的DBCC SQLPERF命令检查日志文件大小。您可以缩小日志文件并再次执行备份以执行还原。这应该是一个快速的过程,而不是等待归零以完成以前大小的日志文件。
  8. 停止任何活动以释放目标磁盘的标头,以便它可以专门用于清零LDF文件。

如何减少SQL Server中的PREEMPTIVE_OS_WRITEFILEGATHER等待类型的更多相关文章

  1. SQL SERVER中LIKE使用变量类型输出结果不同

    前言:Sql Server中LIKE里面使用不同的变量类型导致查询结果不一致的问题,其实看似有点让人不解的现象背后实质跟数据类型的实现有关. 一.我们先来创建示例演示具体操作 CREATE TABLE ...

  2. SQL SERVER中的OLEDB等待事件

    OLEDB等待事件介绍 OLEDB等待类型是SQL SERVER 数据库中最常见的几种等待类型之一.它意味着某个会话(SPID)通过SQL Server Native Client OLEDB Pro ...

  3. SQL SERVER中LIKE使用变量类型不同输出结果不一致解惑

    一同事在写脚本时,遇到一个关于LIKE里面使用不同的变量类型导致查询结果不一致的问题,因为这个问题被不同的人问过好几次,索性总结一下,免得每次都要解释一遍,直接丢一篇博客岂不是更方便!其实看似有点让人 ...

  4. SQL Server中修改“用户自定义表类型”问题的分析与方法

    前言 SQL Server开发过程中,为了传入数据集类型的变量(比如接受C#中的DataTable类型变量),需要定义"用户自定义表类型",通过"用户自定义表类型&quo ...

  5. SQL SERVER中变量的定义、赋值与使用

      本文面向对SQL SERVER中变量操作不熟悉的用户,希望能使他们在看完本文后能对变量操作有具体和全面的认识.   在学习SQL SERVER的过程中,很多时候需要对某些单独的值进行调试,这时就需 ...

  6. 浅析SQL Server 中的SOS_SCHEDULER_YIELD类型的等待

    本文出处:http://www.cnblogs.com/wy123/p/6856802.html 进程的状态转换 在说明SOS_SCHEDULER_YIELD等待之前,先简要介绍一下进程的状态(迷迷糊 ...

  7. Microsoft SQL Server中的事务与并发详解

    本篇索引: 1.事务 2.锁定和阻塞 3.隔离级别 4.死锁 一.事务 1.1 事务的概念 事务是作为单个工作单元而执行的一系列操作,比如查询和修改数据等. 事务是数据库并发控制的基本单位,一条或者一 ...

  8. SQL Server 中的事务与事务隔离级别以及如何理解脏读, 未提交读,不可重复读和幻读产生的过程和原因

    原本打算写有关 SSIS Package 中的事务控制过程的,但是发现很多基本的概念还是需要有 SQL Server 事务和事务的隔离级别做基础铺垫.所以花了点时间,把 SQL Server 数据库中 ...

  9. SQL Server中的高可用性(1)----高可用性概览

        自从SQL Server 2005以来,微软已经提供了多种高可用性技术来减少宕机时间和增加对业务数据的保护,而随着SQL Server 2008,SQL Server 2008 R2,SQL ...

随机推荐

  1. py库:文本转为语音(pywin32、pyttsx)

    http://blog.csdn.net/marksinoberg/article/details/52137547 Python 文本转语音 文本转为语音(使用Speech API) 需要安装 py ...

  2. python3爬虫入门程序

    适用于有且只有一点Python3和网页基础的朋友,大牛&路人请绕道 (本文很多废话,第一次在网上长篇大论,所以激动的停不下来,如果有大佬路过,也希望不要直接绕道,烦请指点一二) 感谢博客园给了 ...

  3. orcal 安装失败解决办法

    若安装失败

  4. intllij IDE 中git ignore 无法删除target目录下的文件

    原因: git的本地忽略设置必须保证git的远程仓库分支上没有这个要忽略的文件,如果远程分支上存在这个文件,本地在设置ignore 这个文件,将会失败,无法commit忽略.(有人说是git的bug, ...

  5. 早期自学jQuery-二事件

    本节目录 ----------①鼠标事件 ----------②键盘事件 ----------③表单事件 ----------④文档窗口事件 ----------⑤举例,按下回车键触发事件 事件函数 ...

  6. HTML5-网页添加视频-菜鸟笔记

    一.标签 <video> 在html5中,有这么个标签 <video> 标签. <video> 允许你简单的嵌入一段视频. 二.浏览器的兼容性问题 WebM 容器通 ...

  7. JavaScript: Constructor and Object Oriented Programming

    Constructor :  Grammar: object.constructor Example: Javascript code: 1 function obj1() { this.number ...

  8. js实现图片上传预览功能,使用base64编码来实现

    实现图片上传的方法有很多,这里我们介绍比较简单的一种,使用base64对图片信息进行编码,然后直接将图片的base64信息存到数据库. 但是对于系统中需要上传的图片较多时并不建议采用这种方式,我们一般 ...

  9. 云笔记项目-Java反射知识学习

    在云笔记项目中,补充了部分反射的知识,反射这一部分基础知识非常重要,前面学习的框架Spring和MyBatis读取xml配置文件创建对象,以及JDBC加载驱动等都用了反射,但只知道有这个东西,具体不知 ...

  10. 织梦会员 Warning: preg_replace(): The /e modifier is no longer supported, us...

    http://php.net/manual/zh/reference.pcre.pattern.modifiers.php#reference.pcre.pattern.modifiers.eval ...