QDS_SHUTDOWN_QUEUE is recorded by a Query Store background task parked on the queue it uses to receive shutdown and control signals. Query Store runs a small crew of background workers per enabled database (persistence, cleanup, coordination), and this one spends its life waiting for a signal that rarely comes.
With Query Store on by default in newer versions and universal on Azure SQL Database, this wait is a fixture on modern estates.
Is It a Problem?
No. It is an idle-thread wait on the benign filter list, accumulating with uptime and with the number of Query Store-enabled databases. On Azure SQL Database it routinely shows near the top of raw wait rankings, alarming people meaninglessly.
Actual Query Store health reads through sys.database_query_store_options per database: desired vs actual state, size against the cap, and read-only transitions. The background crew’s idle time is not part of that picture.
Common Causes
- Query Store enabled on one or more databases (the default from SQL Server 2022, and always on Azure SQL Database).
- Long uptime compounding the idle wait.
What To Do
- Filter it out alongside
QDS_PERSIST_TASK_MAIN_LOOP_SLEEP; ourGet-WaitStatisticsscript excludes both. - For Query Store issues, check each database’s options DMV and size headroom (our Query Store status script covers it).
- Do not disable Query Store to chase this wait; you would lose real capability to remove a harmless number.
How To See It
Rank waits with Get-WaitStatistics, where it is filtered. In raw output, especially on Azure, expect it and read past it.
QDS_SHUTDOWN_QUEUE is background noise on a healthy instance. If you are chasing a real problem, start with the waits that actually cost you time.
- The waits that usually matter, ranked, with what each one is telling you.
- Performance & Troubleshooting, the scripts and guides for this part of the stack.
Leave a Reply