ASYNC_IO_COMPLETION means SQL Server issued asynchronous I/O against a data file and is waiting for it to complete. Unlike the PAGEIOLATCH_* family, which covers ordinary page reads into the buffer pool, this wait belongs to bulk file operations: the data-reading side of backups, checkpoint writes flushing dirty pages, restores laying data down, and similar large-scale file work.
That distinction is useful in both directions. A server showing high ASYNC_IO_COMPLETION but quiet PAGEIOLATCH_* has a maintenance I/O story, not a query I/O story.
Is It a Problem?
It is expected in volume during backup and maintenance windows; a full backup of a large database legitimately accumulates hours of this wait across its threads. It becomes a problem when it dominates during business hours, when backup durations trend upward, or when checkpoint writes are visibly fighting the user workload for the same disks.
Common Causes
- Backups reading data files, with the wait stretching as source volumes or the backup target slow down.
- Checkpoint flushing large amounts of dirty pages after big modifications.
- Restores, database creation, and other bulk file operations.
- Maintenance I/O and user workload overlapping on the same storage path.
What To Do
- Correlate the wait with your job schedule first. If it maps cleanly onto backup and maintenance windows, judge those operations by their duration trends rather than the wait total.
- Measure the storage path:
sys.dm_io_virtual_file_statsstalls on the data files, plus throughput on the backup target. - Move heavy maintenance off peak hours, and consider backup compression, which cuts the bytes written at the cost of CPU.
- If checkpoint is the driver, indirect checkpoints (
TARGET_RECOVERY_TIME) smooth write bursts into a steadier stream.
How To See It
Use Get-WaitStatistics to rank it, then correlate with backup, restore, and maintenance run windows.
Part of the SQL Server Wait Types Library.
Related deep dive: BACKUPIO and BACKUPBUFFER.
Leave a Reply