(Republishing, or using this info in a commercial product/website, is prohibited without permission. All other uses are permitted. If in doubt, please ask.)

PREEMPTIVE_OS_WRITEFILEGATHER

(Back to main page…)

Description:

This wait type is when a thread is calling the Windows WriteFileGather function.

(Books Online description: N/A)

Questions/comments on this wait type? Click here to send Paul an email, especially if you have any information to add to this topic.

Added in SQL Server version:

2008

Removed in SQL Server version:

N/A

Extended Events wait_type value:

The map_key value in sys.dm_xe_map_values is 466 in 2008 and 2008 R2, 514 in 2012, and 530 in 2014 RTM. After 2014 RTM, you must check the DMV to get the latest value as some map_key values have changed in later builds.

Other information:

This wait type occurs when a file is being zero-initialized. Log files and new portions of a log file are always zero initialized. Data files and new portions of a data file are only zero initialized if the Instant File Initialization feature is not enabled (see here). Long waits for this type may occur in either case, and you may also see message 5144 or 5145 in the error log (see KB 2091024) along with other lock or latch waits.

Note that when a thread calls out to Windows, the thread changes from non-preemptive (SQL Server controls the thread) to preemptive (Windows controls the thread) mode. The thread’s state will be listed as RUNNING, as SQL Server doesn’t know what Windows is doing with the thread.

Known occurrences in SQL Server (list number matches call stack list):

  1. Zeroing the log tail while starting up a database
  2. Zeroing a new portion of the log (in this case, while writing out log records)

And other similar call stacks.

Abbreviated call stacks (list number matches known occurrences list):

  1. SOS_Task::PopWait+b1
    AutoSwitchPreemptive::~AutoSwitchPreemptive+95
    InitializeFile+624
    FCB::ZeroFile+393
    SQLServerLogMgr::FixupLogTail+32e
    SQLServerLogMgr::MakeLogRecordsPossible+92
    SQLServerLogMgr::MakeLogWriteable+122
    RecoveryMgr::PhysicalCompletion+231
    RecoveryUnit::CompletePhysical+e9
    RecoveryUnit::PhaseEnd+a6
    StartupCoordinator::NotifyPhaseEnd+3b
    DBTABLE::Startup+1167
    DBMgr::StartupDB+6c6
    DBMgr::StartDBsInParallel+511
    DBMgr::ParallelDbStartupEntryPoint+10f
    SOS_Task::Param::Execute+21e
    SOS_Scheduler::RunTask+ab
  2. SOS_Task::PopWait+b1
    AutoSwitchPreemptive::~AutoSwitchPreemptive+95
    InitializeFile+624
    FCB::ZeroFile+393
    FCB::InitializeSpace+293
    FileMgr::InternalGrowFile+723
    SQLServerLogMgr::GrowAFile+6eb
    SQLServerLogMgr::ReserveAndAppend+292
    XdesRMReadWrite::GenerateLogRec+615
    PFSPageRef::ModifyPFSRow+5ed
    DeAllocMgr::DeAllocatePageInternal+69b
    DeAllocMgr::DropAllocUnitInternal+158b
    DropAllocationUnit+18a
    sort_clean+388
    RowsetSorted::DeleteSort+1ce
    CQScanSortNew::SortChangeState+81
    CQScanSortNew::GetRowHelper+9a
    CQScanSegmentNew::GetRow+43
    CQScanSeqProjectNew::GetRow+20
    CQScanStreamAggregateNew::GetRowHelper+1fc
    CQScanStreamAggregateNew::GetCalculatedRow+21
    CQueryScan::StartupQuery+23c