<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/finding-the-root-cause-of-slow-queries-74zd6atvn" -->

---
title: Finding the Root Cause of Slow Queries | daily.dev
description: A practical framework for diagnosing slow SQL Server queries by first distinguishing whether a request is actively working or waiting on a resource before...
canonical: https://daily.dev/posts/finding-the-root-cause-of-slow-queries-74zd6atvn
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: Finding the Root Cause of Slow Queries | daily.dev
og:description: A practical framework for diagnosing slow SQL Server queries by first distinguishing whether a request is actively working or waiting on a resource before...
og:url: https://daily.dev/posts/finding-the-root-cause-of-slow-queries-74zd6atvn
og:image: https://api.daily.dev/og/posts/74ZD6AtVn.png
og:image:alt: Finding the Root Cause of Slow Queries
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Finding the Root Cause of Slow Queries

**[SQL Authority](https://daily.dev/sources/sql-authority)** · 5 min read · 0 upvotes · 0 comments

## Summary

A practical framework for diagnosing slow SQL Server queries by first distinguishing whether a request is actively working or waiting on a resource before jumping to fixes like new indexes. Walks through a real scenario where an order lookup slowed due to lock blocking from an unrelated inventory transaction, not a missing index. Covers comparing elapsed time to worker time, reading actual execution plans versus estimated ones, using Query Store and wait-statistics capture for historical correlation, tracing blocking chains, and checking broader server context (memory grants, tempdb, file latency) before committing to a fix. Mentions SQL DM from IDERA as a tool for aggregating this diagnostic context.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://blog.sqlauthority.com/2026/09/02/finding-the-root-cause-of-slow-queries>

## Questions this post answers

### How do I tell if a slow SQL Server query is actually blocked versus genuinely doing expensive work?

Compare the query's elapsed time with its worker (CPU) time. If the two are close, the query is actively processing; a large gap between elapsed and worker time signals waiting on a resource such as a lock, memory grant, or storage latency. Follow blocking_session_id through the full blocking chain, since the visible slow query is often the victim of an uncommitted transaction elsewhere, not the cause.

_Developers debugging blocking chains and wait stats can find deeper SQL Server tuning discussions on daily.dev._

### Does Query Store in SQL Server track wait statistics per query?

Yes, on SQL Server 2017 or later, enabling wait-statistics capture within Query Store adds query-level wait information alongside the plans, duration, CPU, and reads it already aggregates and retains. This lets engineers compare a current slow execution against historical patterns to see whether the behavior is a one-off anomaly or a recurring issue tied to specific business cycles or data volume.

_Anyone comparing query history over time to spot regressions can track SQL Server changes like this via daily.dev._

---

Tags: [#database](https://daily.dev/tags/database), [#microsoft-sql-server](https://daily.dev/tags/microsoft-sql-server)

[View this post on daily.dev](https://daily.dev/posts/finding-the-root-cause-of-slow-queries-74zd6atvn)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"Finding the Root Cause of Slow Queries","url":"https://daily.dev/posts/finding-the-root-cause-of-slow-queries-74zd6atvn","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/finding-the-root-cause-of-slow-queries-74zd6atvn"},"datePublished":"2026-09-02T01:34:06.746Z","dateModified":"2026-09-14T08:23:22.862Z","description":"A practical framework for diagnosing slow SQL Server queries by first distinguishing whether a request is actively working or waiting on a resource before...","image":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/dd5513a3434febe70d89d83c7ad3fb75?_a=AQAEuop","thumbnailUrl":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/dd5513a3434febe70d89d83c7ad3fb75?_a=AQAEuop","isAccessibleForFree":true,"articleSection":"SQL Authority","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"SQL Authority","logo":"https://media.daily.dev/image/upload/s--reCGnvgi--/f_auto,q_auto/v1780213436/logos/sql-authority?_a=BAMAMiWQ0","url":"https://daily.dev/sources/sql-authority"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/finding-the-root-cause-of-slow-queries-74zd6atvn","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":0},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"database,microsoft-sql-server","timeRequired":"PT5M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"SQL Authority","item":"https://daily.dev/sources/sql-authority"},{"@type":"ListItem","position":3,"name":"Finding the Root Cause of Slow Queries"}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/finding-the-root-cause-of-slow-queries-74zd6atvn#faq","mainEntity":[{"@type":"Question","name":"How do I tell if a slow SQL Server query is actually blocked versus genuinely doing expensive work?","acceptedAnswer":{"@type":"Answer","text":"Compare the query's elapsed time with its worker (CPU) time. If the two are close, the query is actively processing; a large gap between elapsed and worker time signals waiting on a resource such as a lock, memory grant, or storage latency. Follow blocking_session_id through the full blocking chain, since the visible slow query is often the victim of an uncommitted transaction elsewhere, not the cause. Developers debugging blocking chains and wait stats can find deeper SQL Server tuning discussions on daily.dev."}},{"@type":"Question","name":"Does Query Store in SQL Server track wait statistics per query?","acceptedAnswer":{"@type":"Answer","text":"Yes, on SQL Server 2017 or later, enabling wait-statistics capture within Query Store adds query-level wait information alongside the plans, duration, CPU, and reads it already aggregates and retains. This lets engineers compare a current slow execution against historical patterns to see whether the behavior is a one-off anomaly or a recurring issue tied to specific business cycles or data volume. Anyone comparing query history over time to spot regressions can track SQL Server changes like this via daily.dev."}}]}
```

