PREEMPTIVE_COM Wait Types in SQL Server

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’s GetData method, 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_SETPROPERTIES and PREEMPTIVE_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

  1. Identify the calling queries (sys.dm_exec_requests during the waits) and the providers involved (sys.servers).
  2. Cut the data movement: push filters and joins to the remote side, and fetch only needed columns, LOB columns especially (the SEQSTRMREAD driver).
  3. 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.

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *