在数据库大小分配期间,我正在等待类型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. IDEA常用快捷键,收藏以备后用

    IntelliJ Idea 常用快捷键列表 Ctrl+Shift + Enter,语句完成“!”,否定完成,输入表达式时按 “!”键Ctrl+E,最近的文件Ctrl+Shift+E,最近更改的文件Sh ...

  2. IDEA jrebet插件安装

    破解.exe下载 https://github.com/ilanyu/ReverseProxy/releases/tag/v1.0 双击运行,exe 文件, 然后IDEA -> Help -&g ...

  3. PropTypes验证器

    PropTypes用于对类型的验证,从而更加容易捕获bug.在React v15.5之前,它内置React.PropTypes函数帮助解决,之后放弃支持,采用prop-types库定义. import ...

  4. Linux命令:unlias

    语法 unalias [-a] name [name ...] 说明 取消别名. 可以一次取消多个别名,写几个取消几个.不写,取消所有别名. 参数 -a 取消所有别名,不论后面是否跟一个还是多个nam ...

  5. MYSQL性能优化(2)

    Insert语句优化 1.  多行并为一个语句  insert into table values (行1),(行2),........... 2. 使用中间内存队列, 逻辑是立马执行插入,其他数据放 ...

  6. mallo

    http://luleimi.blog.163.com/blog/static/175219645201302295042968/

  7. python入门(七):字符串

    1.字符串类型: >>> s="早上好"               #str类型的字符串 >>> type(s) <class 'str ...

  8. SpringBoot集成Jasypt安全框架,配置文件内容加密

    我们在SpringBoot项目中的yml或者properties配置文件中都是明文的,相对而言安全性就低了很多.都知道配置文件中的都是一些数据库连接用户名密码啊.一些第三方密钥等信息.所以我们谨慎点, ...

  9. Codeforces Round #552 (Div. 3) A题

    题目网址:http://codeforces.com/contest/1154/problem/ 题目意思:就是给你四个数,这四个数是a+b,a+c,b+c,a+b+c,次序未知要反求出a,b,c,d ...

  10. [leetcode]56. Merge Intervals归并区间

    Given a collection of intervals, merge all overlapping intervals. Example 1: Input: [[1,3],[2,6],[8, ...