在数据库大小分配期间,我正在等待类型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. 尚硅谷springboot学习32-整合druid

    使用druid数据源 配置druid数据源 这里配置的数据源参数并不会生效,因为在DataSourceProperties中并没有这些字段,如果想要生效,必须自己配置druid数据源 @Configu ...

  2. Reboot-less node fencing in Oracle Clusterware 11g Release 2

    在进行一次RAC的高可用性测试时,当private网卡的网线被拔掉之后,没有出现传说中的有一个节点被CRS强制重启,取而代之的是node2上面的ASM实例和RDBMS实例被关闭:当网线被重新插上时,n ...

  3. 关于extern的使用

    学的时候不认真总结,用的时候就一堆bug. 上回也是调extern调了半天,今天又犯老毛病. data 比如说是要用到的的在main函数中不断刷新的量.那么这个unsigned int data 要写 ...

  4. Java ArrayList调用构造方法传入"容量size"不生效,如何初始化List容量size

    创建一个ArrayList对象,传入整型参数 @Test public void arrayListConstructor(){ ArrayList<Object> objects = n ...

  5. django admin 模块添加 static

    目前路径是在 /var/www/jastme/static 但是admin的静态文件不在这个位置,那么怎么办呢? 首先到项目下,就是有manage.py的这个目录 编辑项目下的setting.py 首 ...

  6. sqlserver truncate清空表时候,无法删除 'B表',因为该表正由一个 FOREIGN KEY 约束引用。

    外键: 查询:select object_name(a.parent_object_id) 'tables'  from sys.foreign_keys a  where a.referenced_ ...

  7. AngularJS学习笔记(二)

    一.AngularJS Select(选择框) 1.使用 ng-options 创建选择框 <div ng-app="myApp" ng-controller="m ...

  8. SSM框架整合思想

    -------------------siwuxie095                                 SSM 框架整合思想         1.SSM 框架,即 SpringMV ...

  9. [leetcode]13. Roman to Integer罗马数字转整数

    Roman numerals are represented by seven different symbols: I, V, X, L, C, D and M. Symbol Value I 1 ...

  10. python的基本用法(四)文件操作使用

    #读文件,文件必须存在才能读f=open('操作文件',encoding='utf-8')res =f.read()print(res)f.close()#写文件fw=open('操作文件',mode ...