The only agent that thinks for itself

Autonomous Monitoring with self-learning AI built-in, operating independently across your entire stack.

Unlimited Metrics & Logs
Machine learning & MCP
5% CPU, 150MB RAM
3GB disk, >1 year retention
800+ integrations, zero config
Dashboards, alerts out of the box
> Discover Netdata Agents

Centralized metrics streaming and storage

Aggregate metrics from multiple agents into centralized Parent nodes for unified monitoring across your infrastructure.

Stream from unlimited agents
Long-term data retention
High availability clustering
Data replication & backup
Scalable architecture
Enterprise-grade security
> Learn about Parents

Fully managed cloud platform

Access your monitoring data from anywhere with our SaaS platform. No infrastructure to manage, automatic updates, and global availability.

Zero infrastructure management
99.9% uptime SLA
Global data centers
Automatic updates & patches
Enterprise SSO & RBAC
SOC2 & ISO certified
> Explore Netdata Cloud

Deploy Netdata Cloud in your infrastructure

Run the full Netdata Cloud platform on-premises for complete data sovereignty and compliance with your security policies.

Complete data sovereignty
Air-gapped deployment
Custom compliance controls
Private network integration
Dedicated support team
Kubernetes & Docker support
> Learn about Cloud On-Premises

Powerful, intuitive monitoring interface

Modern, responsive UI built for real-time troubleshooting with customizable dashboards and advanced visualization capabilities.

Real-time chart updates
Customizable dashboards
Dark & light themes
Advanced filtering & search
Responsive on all devices
Collaboration features
> Explore Netdata UI

Monitor on the go

Native iOS and Android apps bring full monitoring capabilities to your mobile device with real-time alerts and notifications.

iOS & Android apps
Push notifications
Touch-optimized interface
Offline data access
Biometric authentication
Widget support
> Download apps

The future of infrastructure observability

See our strategic direction across AI-native observability, full-stack signals, operational intelligence, and enterprise platform maturity.

AI-native observability
Full-stack signal coverage
Operational intelligence
Enterprise platform maturity
Agent releases every 6 weeks
Cloud continuous delivery
> Explore Product Roadmap

Best energy efficiency

True real-time per-second

100% automated zero config

Centralized observability

Multi-year retention

High availability built-in

Zero maintenance

Always up-to-date

Enterprise security

Complete data control

Air-gap ready

Compliance certified

Millisecond responsiveness

Infinite zoom & pan

Works on any device

Native performance

Instant alerts

Monitor anywhere

AI-native observability

Continuous delivery

Open source foundation

80% Faster Incident Resolution

AI-powered troubleshooting from detection, to root cause and blast radius identification, to reporting.

True Real-Time and Simple, even at Scale

Linearly and infinitely scalable full-stack observability, that can be deployed even mid-crisis.

90% Cost Reduction, Full Fidelity

Instead of centralizing the data, Netdata distributes the code, eliminating pipelines and complexity.

See and Map Your Entire Network

Live topology, flow analytics, and SNMP device and trap monitoring — unified with your full-stack observability.

Control Without Surrender

SOC 2 Type 2 certified with every metric kept on your infrastructure.

Integrations

800+ collectors and notification channels, auto-discovered and ready out of the box.

800+ data collectors
Auto-discovery & zero config
Cloud, infra, app protocols
Notifications out of the box
> Explore integrations
Real Results
46% Cost Reduction

Reduced monitoring costs by 46% while cutting staff overhead by 67%.

— Leonardo Antunez, Codyas

Zero Pipeline

No data shipping. No central storage costs. Query at the edge.

From Our Users
"Out-of-the-Box"

So many out-of-the-box features! I mostly don't have to develop anything.

— Simon Beginn, LANCOM Systems

No Query Language

Point-and-click troubleshooting. No PromQL, no LogQL, no learning curve.

Enterprise Ready
67% Less Staff, 46% Cost Cut

Enterprise efficiency without enterprise complexity—real ROI from day one.

— Leonardo Antunez, Codyas

SOC 2 Type 2 Certified

Zero data egress. Only metadata reaches the cloud. Your metrics stay on your infrastructure.

Full Coverage
800+ Collectors

Auto-discovered and configured. No manual setup required.

Any Notification Channel

Slack, PagerDuty, Teams, email, webhooks—all built-in.

Built for the People Who Get Paged

Because 3am alerts deserve instant answers, not hour-long hunts.

Every Industry Has Rules. We Master Them.

See how healthcare, finance, and government teams cut monitoring costs 90% while staying audit-ready.

Monitor Any Technology. Configure Nothing.

Install the agent. It already knows your stack.
From Our Users
"A Rare Unicorn"

Netdata gives more than you invest in it. A rare unicorn that obeys the Pareto rule.

— Eduard Porquet Mateu, TMB Barcelona

99% Downtime Reduction

Reduced website downtime by 99% and cloud bill by 30% using Netdata alerts.

— Falkland Islands Government

Real Savings
30% Cloud Cost Reduction

Optimized resource allocation based on Netdata alerts cut cloud spending by 30%.

— Falkland Islands Government

46% Cost Cut

Reduced monitoring staff by 67% while cutting operational costs by 46%.

— Codyas

Real Coverage
"Plugin for Everything"

Netdata has agent capacity or a plugin for everything, including Windows and Kubernetes.

— Eduard Porquet Mateu, TMB Barcelona

"Out-of-the-Box"

So many out-of-the-box features! I mostly don't have to develop anything.

— Simon Beginn, LANCOM Systems

Real Speed
Troubleshooting in 30 Seconds

From 2-3 minutes to 30 seconds—instant visibility into any node issue.

— Matthew Artist, Nodecraft

20% Downtime Reduction

20% less downtime and 40% budget optimization from out-of-the-box monitoring.

— Simon Beginn, LANCOM Systems

Pay per Node. Unlimited Everything Else.

One price per node. Unlimited metrics, logs, users, and retention. No per-GB surprises.

Free tier—forever
No metric limits or caps
Retention you control
Cancel anytime
> See pricing plans

What's Your Monitoring Really Costing You?

Most teams overpay by 40-60%. Let's find out why.

Expose hidden metric charges
Calculate tool consolidation
Customers report 30-67% savings
Results in under 60 seconds
> See what you're really paying

Your Infrastructure Is Unique. Let's Talk.

Because monitoring 10 nodes is different from monitoring 10,000.

On-prem & air-gapped deployment
Volume pricing & agreements
Architecture review for your scale
Compliance & security support
> Start a conversation

Monitoring That Sells Itself

Deploy in minutes. Impress clients in hours. Earn recurring revenue for years.

30-second live demos close deals
Zero config = zero support burden
Competitive margins & deal protection
Response in 48 hours
> Apply to partner

Per-Second Metrics at Homelab Prices

Same engine, same dashboards, same ML. Just priced for tinkerers.

Community: Free forever · 5 nodes · non-commercial
Homelab: $90/yr · unlimited nodes · fair usage
> Get the Homelab Plan

$1,000 Per Referral. Unlimited Referrals.

Your colleagues get 10% off. You get 10% commission. Everyone wins.

10% of subscriptions, up to $1,000 each
Track earnings inside Netdata Cloud
PayPal/Venmo payouts in 3-4 weeks
No caps, no complexity
> Get your referral link
Cost Proof
40% Budget Optimization

"Netdata's significant positive impact" — LANCOM Systems

Calculate Your Savings

Compare vs Datadog, Grafana, Dynatrace

Savings Proof
46% Cost Reduction

"Cut costs by 46%, staff by 67%" — Codyas

30% Cloud Bill Savings

"Reduced cloud bill by 30%" — Falkland Islands Gov

Enterprise Proof
"Better Than Combined Alternatives"

"Better observability with Netdata than combining other tools." — TMB Barcelona

Real Engineers, <24h Response

DPA, SLAs, on-prem, volume pricing

Why Partners Win
Demo Live Infrastructure

One command, 30 seconds, real data—no sandbox needed

Zero Tickets, High Margins

Auto-config + per-node pricing = predictable profit

Homelab Ready
Free Video Course

8-episode Netdata tutorial by LearnLinux.tv

76k+ GitHub Stars

3rd most starred monitoring project

Worth Recommending
Product That Delivers

Customers report 40-67% cost cuts, 99% downtime reduction

Zero Risk to Your Rep

Free tier lets them try before they buy

AI Support Assistant, Available 24/7

Nedi has access to all official documentation, source code, and resources. Ask any question about Netdata—responds in your language.

Deployment & configuration
Troubleshooting & sizing
Alerts & notifications
Evidence-based answers
> Ask Nedi now

Never Fight Fires Alone

Docs, community, and expert help—pick your path to resolution.

Learn.netdata.cloud docs
Discord, Forums, GitHub
Premium support available
> Get answers now

60 Seconds to First Dashboard

One command to install. Zero config. 850+ integrations documented.

Linux, Windows, K8s, Docker
Auto-discovers your stack
> Read our documentation

76,000+ Engineers Strong

615+ contributors. 1.5M daily downloads. One mission: simplify observability.

Per-Second. 90% Cheaper. Data Stays Home.

Side-by-side comparisons: costs, real-time granularity, and data sovereignty for every major tool.

See why teams switch from Datadog, Prometheus, Grafana, and more.

> Browse all comparisons
Edge-Native Observability, Born Open Source
Per-second visibility, ML on every metric, and data that never leaves your infrastructure.
Founded in 2016
615+ contributors worldwide
Remote-first, engineering-driven
Open source first
> Read our story
Promises We Publish—and Prove
12 principles backed by open code, independent validation, and measurable outcomes.
Open source, peer-reviewed
Zero config, instant value
Data sovereignty by design
Aligned pricing, no surprises
> See all 12 principles
Edge-Native, AI-Ready, 100% Open
76k+ stars. Full ML, AI, and automation—GPLv3+, not premium add-ons.
76,000+ GitHub stars
GPLv3+ licensed forever
ML on every metric, included
Zero vendor lock-in
> Explore our open source
Build Real-Time Observability for the World
Remote-first team shipping per-second monitoring with ML on every metric.
Remote-first, fully distributed
Open source (76k+ stars)
Challenging technical problems
Your code on millions of systems
> See open roles
Meet the Team Behind Netdata
Conferences, meetups, and tradeshows where you can see Netdata in action and talk to the engineers who build it.
Live demos and deep dives
Book 1-on-1 meetings
Talks and panel sessions
Event recaps and photos
> See all events
Talk to a Netdata Human in <24 Hours
Sales, partnerships, press, or professional services—real engineers, fast answers.
Discuss your observability needs
Pricing and volume discounts
Partnership opportunities
Media and press inquiries
> Book a conversation
Your Data. Your Rules.
On-prem data, cloud control plane, transparent terms.
Trust & Scale
76,000+ GitHub Stars

One of the most popular open-source monitoring projects

SOC 2 Type 2 Certified

Enterprise-grade security and compliance

Data Sovereignty

Your metrics stay on your infrastructure

Validated
University of Amsterdam

"Most energy-efficient monitoring solution" — ICSOC 2023, peer-reviewed

ADASTEC (Autonomous Driving)

"Doesn't miss alerts—mission-critical trust for safety software"

Community Stats
615+ Contributors

Global community improving monitoring for everyone

1.5M+ Downloads/Day

Trusted by teams worldwide

GPLv3+ Licensed

Free forever, fully open source agent

Why Join?
Remote-First

Work from anywhere, async-friendly culture

Impact at Scale

Your work helps millions of systems

$ guides / microsoft-sql-server / microsoft-sql-server-wait-statistics-explained

Operations Guides

SQL Server wait statistics: reading sys.dm_os_wait_stats to find the real bottleneck

Every time a SQL Server worker thread cannot proceed, the engine records what it was waiting for and for how long. The cumulative result lives in sys.dm_os_wait_stats. When users say “the database is slow” and CPU, memory, and disk all look acceptable, wait statistics are usually where the answer is.

The catch: the DMV is a cumulative counter since instance startup, it contains dozens of benign background waits that drown out the signal, and it tells you what the engine waited on, not which query did the waiting. Read it naively and you will chase the wrong bottleneck. Read it correctly and it decomposes performance into exactly which subsystem is contended.

This article covers how to query the DMV properly, how to decode the wait types that matter, how signal_wait_time_ms exposes CPU pressure that OS metrics miss, and how to connect waits back to the queries causing them.

What the DMV actually contains

sys.dm_os_wait_stats returns one row per wait type with five columns:

ColumnMeaning
wait_typeThe name of the wait (for example PAGEIOLATCH_SH, LCK_M_X)
waiting_tasks_countNumber of times any worker has waited on this type
wait_time_msTotal milliseconds waited, including signal wait time
max_wait_time_msLongest single wait of this type
signal_wait_time_msTime spent on the runnable queue after the resource became available

Two properties of these numbers drive everything about how you use them.

First, they are cumulative since instance startup or the last manual reset via DBCC SQLPERF('sys.dm_os_wait_stats', CLEAR). A single query against the DMV on an instance that has been up for four months tells you the average behavior over four months, which is useless for diagnosing what is wrong right now.

Second, wait_time_ms includes signal_wait_time_ms. The resource wait time, the part that tells you about the actual bottleneck, is wait_time_ms - signal_wait_time_ms. The signal portion tells you something different and equally valuable, covered below.

flowchart LR
    W[Worker thread
cannot proceed] --> R[Wait recorded
type + duration] R --> D[sys.dm_os_wait_stats
cumulative since startup] D --> S[Delta sample
two snapshots subtracted] S --> F[Filter benign
idle waits] F --> X[Decode wait type
to subsystem] X --> C[Correlate with
dm_exec_requests
or Query Store]

Delta sampling: the mandatory first step

Because the counters are cumulative, you must capture two snapshots and subtract. There are two workable approaches:

  1. Periodic external snapshots. Persist the DMV contents every 30 to 60 seconds to a table or monitoring system and compute deltas between consecutive samples. This is the only approach that survives restarts and gives you a trend.

  2. Manual reset plus a controlled window. Run DBCC SQLPERF('sys.dm_os_wait_stats', CLEAR), wait for a representative window, then query. Wait tracking itself is passive, so the reset is not disruptive to the engine, but it destroys the baseline other tools and teammates may depend on, and it only gives you one window. Prefer snapshot deltas.

If you skip this step, today’s blocking incident will be invisible under six weeks of accumulated PAGEIOLATCH noise, or worse, a benign historical pattern will look like the current problem.

Filtering out benign waits

SQL Server has background threads that spend their entire existence waiting: the lazy writer, the checkpoint process, Service Broker handlers, Extended Events dispatchers, Query Store persistence tasks. On a healthy instance these idle waits dominate the raw output. Without an exclusion list, the “top waits” query returns background noise.

-- Top waits by total wait time, excluding known benign idle waits
SELECT TOP 20
    wait_type,
    waiting_tasks_count,
    wait_time_ms,
    signal_wait_time_ms,
    wait_time_ms - signal_wait_time_ms AS resource_wait_time_ms,
    CAST(100.0 * wait_time_ms / SUM(wait_time_ms) OVER() AS DECIMAL(5,2)) AS pct
FROM sys.dm_os_wait_stats
WHERE wait_type NOT IN (
    'SLEEP_TASK', 'BROKER_TO_FLUSH', 'BROKER_TASK_STOP',
    'CLR_AUTO_EVENT', 'CLR_MANUAL_EVENT', 'LAZYWRITER_SLEEP',
    'SQLTRACE_BUFFER_FLUSH', 'WAITFOR', 'XE_TIMER_EVENT',
    'XE_DISPATCHER_WAIT', 'FT_IFTS_SCHEDULER_IDLE_WAIT',
    'BROKER_EVENTHANDLER', 'SP_SERVER_DIAGNOSTICS_SLEEP',
    'HADR_FILESTREAM_IOMGR_IOCOMPLETION', 'DIRTY_PAGE_POLL',
    'DISPATCHER_QUEUE_SEMAPHORE', 'QDS_PERSIST_TASK_MAIN_LOOP_SLEEP',
    'QDS_ASYNC_QUEUE', 'CHECKPOINT_QUEUE', 'REQUEST_FOR_DEADLOCK_SEARCH',
    'LOGMGR_QUEUE', 'ONDEMAND_TASK_QUEUE', 'HADR_WORK_QUEUE',
    'BROKER_TRANSMITTER', 'KSOURCE_WAKEUP'
)
AND waiting_tasks_count > 0
ORDER BY wait_time_ms DESC;

Note that pct is the share of filtered waits, not of all waits, because the WHERE clause applies before the window function. The exclusion list is not universal either. If you do not use Service Broker or AGs, some of these waits will never appear; if you run features not covered here, you will hit additional idle waits to exclude. The SQLskills wait types library is the authoritative reference when you encounter an unfamiliar type. The important habits: never interpret the DMV without a filter, and never trust a “top wait” you have not confirmed is workload-related.

Decoding the wait types that matter

Each major wait type maps to a specific contended subsystem. This mapping is the core skill.

Wait typeWhat the engine is waiting forWhere to dig next
PAGEIOLATCH_*A data page read from disk into the buffer poolBuffer pool pressure (PLE, buffer cache hit ratio) or storage latency (sys.dm_io_virtual_file_stats)
LCK_M_*A lock; suffix indicates mode (S, X, U, SCH_M, etc.)Blocking chains in sys.dm_exec_requests; find the head blocker
WRITELOGTransaction log flush to completeLog file write latency; synchronous AG secondary if HADR_SYNC_COMMIT also present
RESOURCE_SEMAPHOREA memory grant before execution can startsys.dm_exec_query_memory_grants; look for one query hoarding a giant grant
PAGELATCH_*An in-memory page latch (not I/O)If pages are in database ID 2, this is TempDB allocation contention
SOS_SCHEDULER_YIELDCPU; workers yielding because the runnable queue is longRunnable task backlog, top CPU consumers, compilation storms
THREADPOOLA worker thread; the pool is exhaustedActive worker count vs max_workers_count; usually a blocking cascade underneath
CXPACKET / CXCONSUMERParallel query thread coordinationUsually benign in isolation; investigate only with CPU pressure or skewed plans
ASYNC_NETWORK_IOClient not consuming results fast enoughClient-side processing, not the server
HADR_SYNC_COMMITSynchronous AG secondary acknowledging log hardeningSecondary log write latency and network round-trip between replicas

A few interpretation rules that prevent misdiagnosis:

CXPACKET is routinely the number one wait on healthy systems. Its presence alone means nothing. After the split in SQL Server 2016 SP2, CXCONSUMER tracks consumer-side waits (threads waiting for data from producers), which are typically benign, while CXPACKET retains the more actionable producer and exchange synchronization waits. On SQL Server 2022 and later the split went further: exchange synchronization moved to CXSYNC_PORT and CXSYNC_CONSUMER, so older scripts and instincts undercount parallelism waits on those versions. Only chase parallelism waits when they coincide with CPU pressure or demonstrably skewed plans.

PAGELATCH_* and PAGEIOLATCH_* are different problems with similar names. PAGELATCH is in-memory latch contention, no disk involved. If sys.dm_os_waiting_tasks shows PAGELATCH_UP or PAGELATCH_EX with resource_description starting with 2:, the contention is on TempDB allocation pages and the fix is more TempDB data files, not faster storage.

THREADPOOL may not record itself. When the worker pool is fully exhausted, there may be no thread available to record the wait. If the instance is unresponsive but THREADPOOL looks modest, check active worker count against max_workers_count directly.

WRITELOG and HADR_SYNC_COMMIT interact. On a synchronous-commit AG primary, slow commit latency shows up as HADR_SYNC_COMMIT, but the root cause is often the secondary’s log hardening latency. Check the secondary’s log write latency and replica network path before tuning the primary.

signal_wait_time_ms: the CPU pressure tell

signal_wait_time_ms is the time a thread spent on the scheduler’s runnable queue after its resource became available. The I/O completed or the lock was granted, but the thread still could not run because no scheduler had a free CPU slot.

This makes the ratio signal_wait_time_ms / wait_time_ms a direct measure of CPU scheduling pressure, and it is often a better CPU signal than the CPU percentage itself:

  • On VMs, hypervisor CPU steal and co-tenant contention are invisible to the guest. You can see modest OS CPU while threads pile up in the runnable queue. The signal wait ratio sees it.
  • A common rule of thumb flags signal waits above roughly 20% of total wait_time_ms as CPU pressure. Community sources put the threshold anywhere from 10% to 25%; treat anything sustained above 15% as worth investigating and confirm with runnable_tasks_count in sys.dm_os_schedulers.
  • A slowly rising signal ratio over weeks, even from 5% to 12%, is CPU headroom silently eroding. Nothing fails yet, but you are losing margin.

A dominant SOS_SCHEDULER_YIELD wait with a high signal ratio is scheduler starvation: more runnable work than CPUs. The response is to find the top CPU consumers (bad plans, compilation storms, missing indexes), not to add CPUs blindly.

Waits do not name the query

The DMV aggregates across the whole instance. It tells you the engine spent 40% of its recent wait time on LCK_M_X; it does not tell you which sessions, which tables, or which statements. To close that gap:

Real time: query sys.dm_exec_requests for sessions currently waiting, joined with sys.dm_exec_sql_text for the statement text. The wait_type, wait_time, blocking_session_id, and resource_description columns give you the live picture. For PAGELATCH waits, sys.dm_os_waiting_tasks.resource_description gives the exact page, which is how you confirm TempDB allocation contention (database ID 2).

Per-session history: sys.dm_exec_session_wait_stats (SQL Server 2016+) gives cumulative waits per session, which lets you profile one workload in isolation without instance-wide noise.

Historical per-query: Query Store’s sys.query_store_wait_stats (SQL Server 2017+) ties wait categories to individual query plans, which is the cleanest way to answer “which query is responsible for our PAGEIOLATCH time” after the fact. Note that Query Store captures waits during query execution, not compilation.

The diagnostic loop is: delta-sample wait stats to find the dominant wait category, decode it to a subsystem, then use dm_exec_requests or Query Store to find the queries driving it. Skipping the last step is how teams end up tuning MAXDOP because they saw CXPACKET.

Permissions and version differences

Two version-specific behaviors matter operationally:

  • SQL Server 2022 (16.x) introduced the more granular VIEW SERVER PERFORMANCE STATE permission for performance DMVs, including sys.dm_os_wait_stats. Existing grants of VIEW SERVER STATE continue to work because it implies the new permission; the point of the new grant is least privilege, so monitoring accounts no longer need the full VIEW SERVER STATE.
  • SQL Server 2022 also added new wait types (for example CXSYNC_PORT and CXSYNC_CONSUMER) and reworked the parallelism waits as described above. Microsoft does not publish a per-release count; the SQLskills wait-types library is the reference for what exists on each version. Any exclusion list or decoding cheat sheet older than 2022 needs a refresh on those instances.

Signals to watch in production

SignalWhy it mattersWarning sign
Top wait type by delta-sampled wait_time_msIdentifies the currently contended subsystemAny single actionable wait type over 30-40% of total waits with user-visible latency
Signal wait ratio (signal_wait_time_ms / wait_time_ms)Direct CPU scheduling pressure, visible even when OS CPU looks fineSustained above 15-20%, or a slow upward trend over weeks
THREADPOOL waits plus active worker countWorker pool exhaustion; instance effectively refusing workAny sustained THREADPOOL, or active workers above 80% of max
RESOURCE_SEMAPHORE with waiting tasksQueries queued for memory grants, appearing hung to the appNonzero pending grants that persist, especially with a growing queue
LCK_M_* average wait timeBlocking severity, not just presenceRising average wait per task, or chains deeper than a few sessions
WRITELOG / HADR_SYNC_COMMITCommit latency on writesDominant wait on a write-heavy instance; on AG primaries, check secondary latency
PAGELATCH_* on database ID 2TempDB allocation contentionMore than about 5% of total waits, confirmed via resource_description

How Netdata helps

Wait statistics only work as a time series, which is exactly the part that is tedious to build by hand:

  • Netdata collects SQL Server wait statistics continuously and computes deltas between samples automatically, so you see the current wait profile instead of the since-startup average.
  • The major wait families (I/O, locks, parallelism, memory grants, log, CPU yields, thread pool) are charted separately, so a shift in the dominant wait category is visible at a glance during an incident.
  • signal_wait_time_ms is surfaced alongside total wait time, making the CPU-pressure ratio something you can trend rather than compute ad hoc.
  • Because Netdata also collects connections, transactions, buffer pool, and OS-level metrics on the same timeline, you can correlate a LCK_M_* surge with connection growth or a PAGEIOLATCH_* surge with disk latency in one view.
  • Per-second collection catches short blocking cascades and thread pool events that minute-level sampling misses entirely.

See Microsoft SQL Server monitoring with Netdata for the full set of collected metrics.

The Netdata solution

Microsoft SQL Server monitoring with Netdata

Netdata monitors SQL Server with per-second metrics, pre-built dashboards, and ML-powered anomaly detection. Correlate wait statistics, blocking chains, transaction-log and TempDB pressure, Page Life Expectancy, memory grants, per-file I/O stalls, and AlwaysOn send/redo queues against the rest of your stack so you catch the incidents in these runbooks before they page anyone.