The PREEMPTIVE_COM_* waits track threads calling methods on COM objects, in DBA practice almost always the OLE DB providers behind linked servers and OPENROWSET/OPENQUERY. This page covers the family:
PREEMPTIVE_COM_GETDATA: waiting for a COM object’sGetDatamethod, retrieving actual row data from the provider, usually the biggest of the family on linked-server workloads.PREEMPTIVE_COM_QUERYINTERFACE,PREEMPTIVE_COM_COCREATEINSTANCE: COM object discovery and creation, provider setup costs.PREEMPTIVE_COM_CREATEACCESSOR,PREEMPTIVE_COM_RELEASEACCESSOR,PREEMPTIVE_COM_RELEASEROWS: rowset accessor lifecycle around fetching results.PREEMPTIVE_COM_SEQSTRMREAD: reading sequential streams, LOB data through the provider.PREEMPTIVE_OLEDB_SETPROPERTIESandPREEMPTIVE_CREATEPARAM: provider property and parameter setup.
All are preemptive: the thread runs under Windows control until the COM call returns.
Are They a Problem?
They are the itemised bill for external provider access. Trace amounts accompany any linked server use; the family becoming prominent means sessions spend real time inside provider code, and GETDATA dominating specifically means the data-fetch path, a slow remote source, or too much data crossing the link. The performance analysis belongs to the COM object’s side: the remote system, the provider’s efficiency, and the query shape that determines how much crosses the wire.
Read them together with OLEDB and MSQL_DQ; the three layers describe one linked-server story.
What To Do
- Identify the calling queries (
sys.dm_exec_requestsduring the waits) and the providers involved (sys.servers). - Cut the data movement: push filters and joins to the remote side, and fetch only needed columns, LOB columns especially (the
SEQSTRMREADdriver). - Tune or replace slow providers, and performance-tune the remote system as its own project.
How To See It
Rank the family with Get-WaitStatistics; its internal split (setup vs data-fetch) refines where the linked-server time goes.
Part of the SQL Server Wait Types Library.
Related deep dive: ASYNC_NETWORK_IO Wait Type.
Leave a Reply