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.
If PREEMPTIVE_COM is sitting near the top of your wait stats, these are the next places to look.
- The waits that usually matter, ranked, with what each one is telling you.
- ASYNC_NETWORK_IO Wait Type, the closest wait worth investigating when this one is high.
- Performance & Troubleshooting, the scripts and guides for this part of the stack.
Leave a Reply