下面在还原一个数据库(备份文件40多G大小,实际数据库大小300G),在还原过程中,出现一直等待ASYNC_IO_COMPLETION,如下测试截图所示,已经等待了72分钟了,但是还原比例依然为0%

SELECT  r.session_id ,
        r.command ,
        r.start_time,
        r.status,
        r.wait_type,
        CONVERT(NUMERIC(6, 2), r.percent_complete)   AS [Percent Complete(%)] ,
        CONVERT(VARCHAR(20), DATEADD(ms, r.estimated_completion_time,
                                     GETDATE()), 20) AS [ETA Completion Time] ,
        CONVERT(NUMERIC(10, 2), r.total_elapsed_time / 1000.0 / 60.0) AS [Elapsed Min] ,
        CONVERT(NUMERIC(10, 2), r.estimated_completion_time / 1000.0 / 60.0) AS [ETA Min] ,
        CONVERT(NUMERIC(10, 2), r.estimated_completion_time / 1000.0 / 60.0
        / 60.0) AS [ETA Hours] ,
        CONVERT(VARCHAR(1000), ( SELECT SUBSTRING(text,
                                                  r.statement_start_offset / 2,
                                                  CASE WHEN r.statement_end_offset = -1
                                                       THEN 1000
                                                       ELSE ( r.statement_end_offset
                                                              - r.statement_start_offset )
                                                            / 2
                                                  END)
                                 FROM   sys.dm_exec_sql_text(sql_handle)
                               )) AS CommandText
FROM    sys.dm_exec_requests r
WHERE   command IN ( ‘RESTORE DATABASE‘, ‘BACKUP DATABASE‘,‘RESTORE LOG‘ );

当然,这里是实验,如果还要继续等待的话,相信这个时间会更长。这个是比较让人奇怪的现象。后面查了一下这个跟即时文件初始化(Instant File Initialization (IFI))有关。关于这个概念,可以参考官方文档数据库文件初始化 ,摘抄部分内容如下所示:

数据库文件初始化

 

初始化数据和日志文件以覆盖之前删除的文件遗留在磁盘上的任何现有数据。 执行以下其中一项操作时,应首先通过零填充(用零填充)数据和日志文件来初始化这些文件:

·         创建数据库。

·         向现有数据库添加数据或日志文件。

·         增大现有文件的大小(包括自动增长操作)。

·         还原数据库或文件组。

文件初始化会导致这些操作花费更多时间。 但是,首次将数据写入文件后,操作系统就不必用零来填充文件

即时文件初始化 (IFI)

 

在SQL Server中,可以在瞬间对数据文件进行初始化,以避免零填充操作。即时文件初始化可以快速执行上述文件操作。 即时文件初始化功能将回收使用的磁盘空间,而无需使用零填充空间。 相反,新数据写入文件时会覆盖磁盘内容。 日志文件不能立即初始化。

备注

只有在 Microsoft Windows XP Professional 或 Windows Server 2003 或更高版本中才可以使用即时文件初始化功能。

重要

只有在数据文件中才可以使用即时文件初始化功能。 创建日志文件或其大小增长时,将始终零填充该文件。

即时文件初始化功能仅在向SQL Server服务启动帐户授予了 SE_MANAGE_VOLUME_NAME 之后才可用。 Windows Administrator 组的成员拥有此权限,并可以通过将其他用户添加到 执行卷维护任务 安全策略中来为其授予此权限。

重要

某些功能使用(如透明数据加密 (TDE))可以阻止即时文件初始化。

因为这个案例中,启动SQL Server的服务启动账号为NT Service\MSSQLSERVER,所以没有权限即时文件初始化的,如果将启动SQL Server的服务启动账号改为具有管理员权限的域账号,就不会出现这种情况。另外,如果一定要以NT Service\MSSQLSERVER为启动账号

要向一个帐户授予 Perform volume maintenance tasks 权限:

  1. 在将要创建备份文件的计算机上打开本地安全策略应用程序 (secpol.msc)。
  1. 在左侧窗格中,展开“本地策略” ,然后单击“用户权限指派” 。
  1. 在右侧窗格中,双击“执行卷维护任务”。
  1. 单击“添加用户或组” ,添加用于备份的任何用户帐户。
  1. 单击“应用” ,然后关闭所有“本地安全策略” 对话框。

设置后,重启SQL Server服务,然后还原数据库就会正常化,此时的等待事件为BACKUPTHREAD,而不是ASYNC_IO_COMPLETION, 如果版本是SQL Server 2012 SP4或以上版本,可以通过下面SQL查看识别是否启用了即时文件初始化

SELECT  servicename ,
        startup_type ,
        instant_file_initialization_enabled
FROM    sys.dm_server_services; 

另外,从SQL Server 2016 (13.x) 开始,可在安装期间授予服务帐户此权限。 如果使用命令提示符安装,请添加 /SQLSVCINSTANTFILEINIT 参数,或选中安装向导中“授予 SQL Server 数据库引擎服务执行卷维护任务权限”复选框。

还原一直卡在ASYNC_IO_COMPLETION浅析的更多相关文章

  1. SQL Server 2012还原一直卡在ASYNC_IO_COMPLETION浅析

    在SQL Server 2012(11.0.7001.0)下面在还原一个数据库(备份文件40多G大小,实际数据库大小300G),在还原过程中,出现一直等待ASYNC_IO_COMPLETION,如下测 ...

  2. 6410开发板sd卡启动时烧写u-boot.bin以及u-boot-spl-16k.bin步骤

    参考文档:<SMDK6410_IROM_APPLICATION NOTE_REV 1.00>(可以从这里下载到> 参考博客:Tekkaman的博文<u-boot-2010.09 ...

  3. 【转】树莓派Raspberry Pi - 还原已经装过系统的TF卡

    想给树莓派换个系统的话,需要先把已经装过系统的TF卡进行还原,这里使用最简单粗暴无脑的方法: 1,下载安装Win32 Disk Imager(一般已经装过一次系统后,这个东西都有) 2,下载boots ...

  4. 增加 addDataScheme("file") 才能收到SD卡插拔事件的原因分析 -- 浅析android事件过滤策略

    http://blog.csdn.net/silenceburn/article/details/6083375 =========================================== ...

  5. 解决使用还原卡的PC在2个月后要重新加入域的问题

    客户端正确操作: 1. 启动注册表编辑器. 要这样做, 请依次单击 开始 . 运行 , 类型 regedit 在 打开, 框, 然后单击 确定 . 2. 找到并单击以下注册表子项: HKEY_LOCA ...

  6. 【深入浅出jQuery】源码浅析--整体架构

    最近一直在研读 jQuery 源码,初看源码一头雾水毫无头绪,真正静下心来细看写的真是精妙,让你感叹代码之美. 其结构明晰,高内聚.低耦合,兼具优秀的性能与便利的扩展性,在浏览器的兼容性(功能缺陷.渐 ...

  7. 从TCP三次握手说起–浅析TCP协议中的疑难杂症(2)

    版权声明:本文由黄日成原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/108 来源:腾云阁 https://www.qclo ...

  8. 【深入浅出jQuery】源码浅析2--奇技淫巧

    最近一直在研读 jQuery 源码,初看源码一头雾水毫无头绪,真正静下心来细看写的真是精妙,让你感叹代码之美. 其结构明晰,高内聚.低耦合,兼具优秀的性能与便利的扩展性,在浏览器的兼容性(功能缺陷.渐 ...

  9. WaitType:ASYNC_IO_COMPLETION

    项目组有一个数据库备份的Job运行异常,该Job将备份数据存储到remote server上,平时5个小时就能完成的备份操作,现在运行19个小时还没有完成,backup命令的Wait type是 AS ...

随机推荐

  1. Vue Loader

    介绍 允许为 Vue 组件的每个部分使用其它的 webpack loader,例如在 <style> 的部分使用 Sass 和在 <template> 的部分使用 Pug(模板 ...

  2. win10 KMS命令激活步骤<转>

    三.win10 KMS命令激活步骤如下: 1.右键点击开始图标,弹出这个菜单,选择[windows powershell(管理员)],或者命令提示符管理员: 2.打开命令窗口,复制这个命令slmgr ...

  3. Dubbo+zookeeper面试题补充

    什么是分布式?什么是集群?主要区别 分布式是将一个服务分个部分,然后通过远程调用方式进行.远程调用框架RPC框架,spring cloud,dubbo.集群是将同一个服务的多个副本部署在不同的集群上, ...

  4. 微软BI 之SSIS 系列 - 数据仓库中实现 Slowly Changing Dimension 缓慢渐变维度的三种方式

    开篇介绍 关于 Slowly Changing Dimension 缓慢渐变维度的理论概念请参看 数据仓库系列 - 缓慢渐变维度 (Slowly Changing Dimension) 常见的三种类型 ...

  5. HTTPS数据传输过程简介

    HTTPS数据传输过程 1.客户端发起HTTPS连接握手 2.服务端收到HTTPS握手连接请求,与客户建立握手过程,和TCP的三次握手类似,并发送一系列的加密算法组合给客户端,与客户端协商加密算法组合 ...

  6. python出现编码问题的原因及编码问题的解决

    1,为什么出现编码问题? 一般出现编码问题主要有四个方面: 一,解释器默认的编码和自己文件头编码是否一致 二,操作系统的语言设置问题 三,Terminal使用的编码问题 所有出现乱码的原因都可以归结为 ...

  7. Failed to connect to /127.0.0.1:8080

    参考 https://blog.csdn.net/qq_36523667/article/details/78823065 127.0.0.1为虚拟机的地址,需要将地址改为本机实际地址  ipconf ...

  8. Win7上安装scapy

    1.环境 操作环境:win7 python版本:python3.5 依赖模块:Npcap(推荐)或WinPcap 下载scapy 2.安装步骤 操作环境,python及依赖模块安装省略(一直点击下一步 ...

  9. 156. Binary Tree Upside Down反转二叉树

    [抄题]: Given a binary tree where all the right nodes are either leaf nodes with a sibling (a left nod ...

  10. Quartz.Net进阶之二:关于触发器的更多信息

    与作业一样,触发器相对容易使用,但是在您可以充分利用Quartz.NET之前,确实需要了解和理解各种可自定义的选项. 此外,如前所述,您可以选择不同类型的触发器来满足不同的调度需求. 1.常见触发器属 ...