Top 10 SQL Server Performance Tuning Techniques Every DBA Should Know in 2026

Microsoft SQL Server remains the transactional and analytical backbone of a vast share of the enterprise, and in 2026 the expectations placed on it are higher than ever: lower latency, larger working sets, denser consolidation, and tighter cost controls on both on-premises hardware and cloud infrastructure. Performance tuning is the discipline that meets those expectations.

Tuning SQL Server well is not a matter of memorizing trace flags or chasing the configuration setting that one blog post promised would fix everything. It is a methodical engineering practice: measure the workload, find the constraint, change one thing, measure again, and document the result. The ten techniques below represent the practices our engineers return to on nearly every SQL Server performance audit — the highest-leverage moves that separate a database that merely runs from one that performs predictably under peak load. Each technique includes the reasoning behind it, the T-SQL to apply it, and the production judgment that turns a feature into an outcome.

Throughout, the emphasis is on SQL Server 2022 and the modern feature set, because the optimizer, the diagnostics, and the automatic tuning surface have advanced considerably. If your estate still runs older versions, the fundamentals all apply; the newer features simply make the work faster and more durable.

A word on method before the techniques themselves. Performance work fails most often not because the engineer lacks knowledge, but because changes are made in bulk, without a baseline, and without isolating cause from effect. The discipline that underpins every item below is the same one we apply on every engagement: capture a measured baseline, form a hypothesis about the constraint, change exactly one variable, and compare the result against production telemetry rather than intuition. Apply the ten techniques in that spirit and they compound; apply them as a checklist of settings to flip, and they will occasionally make things worse.

01

Make Query Store your performance baseline

You cannot tune what you cannot measure, and the single most valuable measurement tool shipped with the engine is the Query Store. It captures query text, execution plans, and runtime statistics over time, allowing you to identify regressed queries, compare plan choices, and force a known-good plan when the optimizer drifts. In SQL Server 2022, Query Store is enabled by default on new databases and underpins several automatic-tuning and Intelligent Query Processing features, which makes it foundational rather than optional.

Treat Query Store as the system of record for performance. Before you change an index, a setting, or a query, capture the baseline; after the change, compare against it objectively rather than relying on impressions. On high-volume systems, tune the capture mode to avoid recording trivial ad-hoc statements, set a retention window that matches your investigation horizon, and size the storage so the store never silently flips to read-only and stops collecting. The Microsoft documentation on the Query Store details capture modes and retention policies worth tuning for busy systems.

T-SQL
-- Enable Query Store with sensible capture settings
ALTER DATABASE SalesDB SET QUERY_STORE = ON
  (OPERATION_MODE = READ_WRITE,
   QUERY_CAPTURE_MODE = AUTO,
   DATA_FLUSH_INTERVAL_SECONDS = 900,
   MAX_STORAGE_SIZE_MB = 2048);

-- Find the most expensive queries in the last 24 hours
SELECT TOP (20) qt.query_sql_text,
       rs.avg_duration, rs.avg_logical_io_reads, rs.count_executions
FROM sys.query_store_runtime_stats rs
JOIN sys.query_store_plan p   ON p.plan_id = rs.plan_id
JOIN sys.query_store_query q  ON q.query_id = p.query_id
JOIN sys.query_store_query_text qt ON qt.query_text_id = q.query_text_id
ORDER BY rs.avg_duration DESC;
02

Engineer indexes deliberately, not reactively

Indexing is where most SQL Server performance is won or lost. The goal is to support the read patterns the application actually issues while keeping the write and storage overhead in check. Start by reading the missing-index dynamic management views and the actual execution plans, then design covering indexes with carefully chosen key columns and INCLUDE columns so that high-value queries can be satisfied without a key lookup. Equally important is removing indexes that are never used for seeks but are maintained on every insert, update, and delete.

For analytical and reporting workloads, a columnstore index can deliver order-of-magnitude gains over a traditional rowstore index by combining columnar storage with batch-mode execution. Resist the temptation to act on the missing-index DMVs blindly: they suggest candidates, not a strategy. A deliberate index design considers the whole query workload, not one statement at a time.

T-SQL
-- Review missing-index suggestions, then design holistically
SELECT d.statement, d.equality_columns, d.inequality_columns,
       d.included_columns, s.avg_user_impact, s.user_seeks
FROM sys.dm_db_missing_index_details d
JOIN sys.dm_db_missing_index_groups g  ON d.index_handle = g.index_handle
JOIN sys.dm_db_missing_index_group_stats s ON g.index_group_handle = s.group_handle
ORDER BY s.avg_user_impact DESC;

-- A covering index that eliminates key lookups
CREATE NONCLUSTERED INDEX IX_Orders_Customer_Covering
  ON dbo.Orders (CustomerID, OrderDate)
  INCLUDE (Status, TotalAmount);
MinervaDB Insight

On consolidated estates we routinely find 20–40% of indexes are write-only overhead. An index that is never seeked is pure cost. A periodic review against sys.dm_db_index_usage_stats is one of the fastest wins available — see our SQL Server consulting approach.

03

Keep statistics and cardinality estimation healthy

The query optimizer is a cost-based engine, and its decisions are only as good as the statistics that describe your data distribution. Stale or inaccurate statistics lead to poor cardinality estimates, which lead to the wrong join algorithm, the wrong memory grant, and the wrong plan shape. On large tables, the automatic update threshold can leave statistics unrefreshed for far too long, so a deliberate maintenance strategy matters.

Keep automatic statistics updates enabled, consider the per-table incremental and AUTO_UPDATE_STATISTICS_ASYNC options for volatile large tables, and schedule manual updates with an appropriate sample — or a full scan — for the tables that drive your most critical queries. The Microsoft guidance on statistics explains the cardinality estimator versions and when a compatibility-level change can alter plan quality. When a workload regresses after an upgrade, statistics and the cardinality estimator are among the first places to look.

T-SQL
-- Inspect staleness and modification counters
SELECT OBJECT_NAME(s.object_id) AS table_name, s.name AS stat_name,
       sp.last_updated, sp.rows, sp.modification_counter
FROM sys.stats s
CROSS APPLY sys.dm_db_stats_properties(s.object_id, s.stats_id) sp
WHERE sp.modification_counter > 0
ORDER BY sp.modification_counter DESC;

-- Refresh statistics on a critical table with a full scan
UPDATE STATISTICS dbo.Orders WITH FULLSCAN;
04

Tame parameter-sensitive execution plans

Parameter sniffing is one of the most common causes of intermittent, hard-to-reproduce slowdowns. SQL Server compiles a plan based on the parameter values present at first execution and caches it; when a later execution uses values with very different selectivity, the cached plan can be catastrophically wrong. The symptom is a query that is fast for some inputs and slow for others, with no code change in between.

SQL Server 2022 introduced Parameter Sensitive Plan optimization, which can cache multiple plan variants for a single parameterized statement based on cardinality, and it is active under the latest database compatibility level. Where you need finer control, the classic tools remain valuable: OPTIMIZE FOR, RECOMPILE for low-frequency statements, and Query Store plan forcing. The Parameter Sensitive Plan optimization documentation describes the eligibility rules in detail.

T-SQL
-- Force a fresh plan for a statement with skewed parameters
SELECT * FROM dbo.Orders
WHERE Status = @status
OPTION (RECOMPILE);

-- Or steer the optimizer toward an average-case plan
SELECT * FROM dbo.Orders
WHERE Status = @status
OPTION (OPTIMIZE FOR (@status = 'OPEN'));
05

Reduce blocking, locking, and deadlocks

Under concurrency, the constraint is frequently not CPU or I/O but contention. Transactions wait on locks held by other transactions, throughput collapses, and the application surfaces timeouts that look like a performance problem but are really a concurrency-design problem. The first step is always to identify the blocking chain and the resource at its head.

Long-term remedies fall into three categories: shorten transactions so locks are held briefly, index appropriately so that updates touch fewer rows and avoid lock escalation, and choose the right isolation level for the workload. For read-heavy systems, enabling Read Committed Snapshot Isolation lets readers see a consistent version without blocking writers, often eliminating the majority of contention. Microsoft’s snapshot isolation documentation covers the tempdb and version-store implications you must plan for before enabling it in production.

T-SQL
-- Identify current blocking chains
SELECT w.session_id, w.wait_duration_ms, w.wait_type,
       w.blocking_session_id, t.text AS batch_text
FROM sys.dm_os_waiting_tasks w
JOIN sys.dm_exec_requests r ON r.session_id = w.session_id
CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) t
WHERE w.blocking_session_id IS NOT NULL;

-- Enable RCSI to stop readers blocking writers
ALTER DATABASE SalesDB SET READ_COMMITTED_SNAPSHOT ON
  WITH ROLLBACK IMMEDIATE;
06

Optimize tempdb for concurrency

tempdb is a shared, system-wide resource used for temporary tables, table variables, sort and hash spills, version stores, and online index builds. On a busy instance it becomes a contention point, with sessions waiting on allocation-page latches (PFS, GAM, and SGAM) when too few data files are available. A correctly configured tempdb is one of the most reliable concurrency improvements you can make, and it costs nothing but attention.

Provision multiple, equally sized tempdb data files — a common starting point is one file per logical processor up to eight, then add more only if latch contention persists — and place tempdb on the fastest storage available. SQL Server 2022 adds memory-optimized tempdb metadata, which removes a long-standing system-table bottleneck on high-throughput systems. Microsoft’s tempdb configuration guidance describes file sizing and the metadata option in depth.

T-SQL
-- Enable memory-optimized tempdb metadata (restart required)
ALTER SERVER CONFIGURATION
  SET MEMORY_OPTIMIZED TEMPDB_METADATA = ON;

-- Confirm equally sized tempdb data files
SELECT name, size * 8 / 1024 AS size_mb, growth, is_percent_growth
FROM sys.master_files
WHERE database_id = DB_ID('tempdb') AND type_desc = 'ROWS';
07

Right-size memory and parallelism

Two server-level settings have an outsized effect on overall behavior: the memory ceiling and the parallelism configuration. Leaving max server memory at the default allows the buffer pool to starve the operating system and any co-located services, so set it deliberately based on the physical memory and what else runs on the host. Memory is the cache that keeps your working set off disk; the more of it the engine can use safely, the less I/O you pay.

Parallelism is governed by the maximum degree of parallelism and the cost threshold for parallelism. The historical default cost threshold of five is far too low for modern hardware and causes trivial queries to go parallel, generating CXPACKET and CXCONSUMER waits. Raise the threshold and set MAXDOP according to your core and NUMA topology. Microsoft’s MAXDOP configuration guidance provides recommended values by processor count.

T-SQL
-- Cap buffer pool memory (value in MB)
EXEC sys.sp_configure 'max server memory (MB)', 49152;
RECONFIGURE;

-- Sensible parallelism defaults for modern hardware
EXEC sys.sp_configure 'cost threshold for parallelism', 50;
RECONFIGURE;

ALTER DATABASE SCOPED CONFIGURATION SET MAXDOP = 8;
08

Cut I/O with compression and partitioning

The cheapest read is the one you never issue, and the second cheapest is the one served from memory. Data compression advances both goals: by storing more rows per page it reduces the I/O needed to scan a table and increases the effective capacity of the buffer pool, often improving CPU-bound analytical scans as well. Row and page compression are available across editions in modern SQL Server, and the savings on wide, repetitive data are substantial.

For very large tables, table partitioning enables partition elimination, so range queries scan only the relevant partitions, and it makes maintenance operations such as archiving and index rebuilds far more efficient through partition switching. Combine compression with partitioning and a sound storage layout, and you reduce both the volume of I/O and its latency. Where the workload is overwhelmingly analytical, consider a clustered columnstore index in place of page compression, since it delivers both superior compression ratios and batch-mode execution on the same data. Measure the estimated savings before applying compression, since the benefit depends heavily on data shape.

T-SQL
-- Estimate before you compress
EXEC sys.sp_estimate_data_compression_savings
  @schema_name = 'dbo', @object_name = 'Orders',
  @index_id = NULL, @partition_number = NULL,
  @data_compression = 'PAGE';

-- Apply page compression to a clustered index
ALTER INDEX PK_Orders ON dbo.Orders
  REBUILD WITH (DATA_COMPRESSION = PAGE);
09

Exploit Intelligent Query Processing

One of the most compelling reasons to modernize the database compatibility level is the Intelligent Query Processing family, a set of optimizer features that improve performance with little or no code change. The 2022 wave includes memory grant feedback that now persists across recompilations, degree-of-parallelism feedback, cardinality estimation feedback, optimized plan forcing, and broader batch-mode execution on rowstore — all building on adaptive joins and interleaved execution introduced in earlier releases.

These features address precisely the failure modes that consume DBA time: oversized or undersized memory grants that cause spills or waste, parallelism choices that do not match the workload, and repeated cardinality misestimates. The practical step is to move databases to the latest Intelligent Query Processing compatibility level after validating against a representative workload, ideally using Query Store to compare before and after. Adopt it deliberately, but do adopt it — leaving these gains on the table is a common and avoidable cost.

T-SQL
-- Move to the SQL Server 2022 compatibility level (160)
-- to enable the latest IQP features
ALTER DATABASE SalesDB
  SET COMPATIBILITY_LEVEL = 160;

-- Confirm the current level
SELECT name, compatibility_level
FROM sys.databases WHERE name = 'SalesDB';
MinervaDB Insight

Always validate a compatibility-level change with Query Store capturing both states. The cardinality estimator can shift plan shapes; the data tells you whether the change is a net win for your workload, not the marketing.

10

Monitor proactively with wait statistics

The most important habit of a high-performing DBA is to let the server tell you what it is waiting on, rather than guessing. Wait statistics are SQL Server’s self-diagnosis: every time a request cannot proceed, it records why. Aggregated, these waits point directly at the dominant constraint — whether that is I/O latency, lock contention, memory pressure, parallelism, or network. Tuning without consulting waits is tuning in the dark.

Establish a baseline of wait statistics during normal operation so that an abnormal pattern stands out, and pair the aggregate view from sys.dm_os_wait_stats with targeted, low-overhead Extended Events sessions to capture the specific statements behind a problem. Proactive monitoring turns performance work from firefighting into engineering, and it is the foundation of every Database SRE practice we run. The server already knows where it hurts; your job is to read the signal and act on it.

T-SQL
-- Top waits, excluding benign background waits
SELECT TOP (15) wait_type,
       wait_time_ms / 1000.0 AS wait_seconds,
       100.0 * wait_time_ms / SUM(wait_time_ms) OVER () AS pct
FROM sys.dm_os_wait_stats
WHERE wait_type NOT IN
  ('CLR_SEMAPHORE','SLEEP_TASK','BROKER_TASK_STOP','CHECKPOINT_QUEUE')
ORDER BY wait_time_ms DESC;

Taken together, these ten techniques describe a complete performance practice rather than a list of isolated tricks. The first three establish visibility and shape the access paths the optimizer can choose from. The next four govern plan stability and the platform configuration that determines how efficiently the engine uses the hardware beneath it. The final three reduce the volume of work the system must perform and turn monitoring from a reactive chore into a continuous source of engineering signal. In 2026, with consolidation density rising and cloud cost under scrutiny, the return on disciplined SQL Server tuning has rarely been higher: faster queries, fewer incidents, lower infrastructure spend, and an estate that scales with the business instead of against it.

Key takeaways for 2026

Ten techniques, one engineering discipline: measure, change one thing, measure again.

  • Instrument first. Query Store and wait statistics are the baseline that turns tuning from guesswork into engineering.
  • Design indexes and statistics deliberately. Most SQL Server performance is decided here, before any setting is touched.
  • Control plan stability. Parameter-sensitive plans and the cardinality estimator cause the regressions that are hardest to reproduce.
  • Configure the platform correctly. tempdb, memory, and parallelism defaults rarely match modern hardware or workloads.
  • Reduce the work itself. Compression, partitioning, and Intelligent Query Processing cut I/O and CPU without rewriting the application.
  • Validate every change against production telemetry. A green dashboard is not proof; a measured before-and-after is.

Frequently asked questions

What is the single most impactful SQL Server performance tuning technique?

There is no universal answer, because the highest-leverage change depends on the constraint, which is why wait-statistics analysis and the Query Store come first: they identify whether the bottleneck is I/O, contention, memory, or plan quality. That said, deliberate index and statistics design resolves the largest share of problems our engineers encounter during a SQL Server performance audit, because most query cost is decided at the access-path level.

Do these techniques apply to older versions of SQL Server?

Yes. Indexing, statistics maintenance, blocking reduction, tempdb configuration, memory and parallelism sizing, and wait-statistics monitoring are version-independent fundamentals. The newer capabilities — Parameter Sensitive Plan optimization, the 2022 wave of Intelligent Query Processing, and memory-optimized tempdb metadata — require modern versions and the latest compatibility level, but they accelerate work the fundamentals already make possible.

How often should statistics be updated on large tables?

Keep automatic updates enabled, and add scheduled manual updates for the tables driving your most critical queries, since the automatic threshold can leave very large tables unrefreshed for too long. The right cadence depends on data volatility; volatile tables benefit from more frequent, higher-sampled updates. A maintenance plan tuned to the workload, rather than a fixed nightly job, is the engineering approach.

Is enabling Read Committed Snapshot Isolation safe in production?

RCSI is widely used and frequently eliminates the majority of reader-writer blocking, but it shifts versioning work into tempdb and introduces a version store you must size and monitor. Enable it after reviewing the tempdb and storage implications, and validate against a representative workload. For high-stakes estates, our SQL Server consulting team models the change before applying it.

Should I act on the missing-index DMV recommendations directly?

Treat them as candidates, not a plan. The DMVs evaluate statements in isolation and will happily recommend overlapping or redundant indexes that increase write cost. A sound index strategy consolidates the suggestions against the entire query workload and removes unused indexes at the same time, balancing read benefit against write and storage overhead.

When should I engage a specialist for SQL Server performance tuning?

When latency or throughput targets are at risk, when a workload has regressed after an upgrade, or when the estate is large enough that a structured audit will pay for itself. MinervaDB offers a focused SQL Server performance audit, ongoing SQL Server support, and 24×7 Remote DBA operations for teams that want a senior bench without the in-house headcount.

M

MinervaDB Engineering Team

MinervaDB Inc. is a vendor-neutral database engineering firm delivering consulting, performance engineering, and 24×7 Remote DBA operations across Microsoft SQL Server, PostgreSQL, MySQL, MongoDB, and the wider data landscape. Read more on the MinervaDB blog or explore SQL Server consulting.

MinervaDB · SQL Server Performance Engineering

Is your SQL Server estate as fast as it should be?

MinervaDB engineers run structured SQL Server performance audits that find and remove the constraints behind latency, blocking, and runaway cost — verified against your production telemetry. A thirty-minute conversation is enough to scope the work.

About MinervaDB Corporation 275 Articles
Full-stack Database Infrastructure Architecture, Engineering and Operations Consultative Support(24*7) Provider for PostgreSQL, MySQL, MariaDB, MongoDB, ClickHouse, Trino, SQL Server, Cassandra, CockroachDB, Yugabyte, Couchbase, Redis, Valkey, NoSQL, NewSQL, SAP HANA, Databricks, Amazon Resdhift, Amazon Aurora, CloudSQL, Snowflake and AzureSQL with core expertize in Performance, Scalability, High Availability, Database Reliability Engineering, Database Upgrades/Migration, and Data Security.