Large tables make routine maintenance risky. Traditional online index builds and ALTER TABLE ADD CONSTRAINT operations run as a single long‑lived transaction. If an outage or fail‑over occurs near the end, SQL Server rolls back everything, wasting time, expanding the transaction log, and extending maintenance windows. Beginning with SQL Server 2017, Microsoft introduced resumable maintenance so work can pause safely and continue later without losing progress. This post focuses on resumable online index creation and rebuild (2017–2022) and resumable online ADD CONSTRAINT(2022).
Category: Indexing
Index Maintenance on Your SQL Server VLDBs
Most database administrators are comfortable with the daily tasks of backup, CHECKDB, index maintenance, and statistics updates. The available guidance for those topics is extensive. Much less has been written about caring for estates that contain hundreds of databases—or a single database large enough to strain conventional maintenance windows. This post will focus on options that help when individual tables or complete databases grow beyond the point where “standard” maintenance jobs finish in a reasonable time.
Filtered Indexes in SQL Server: Targeted Performance in High-Volume Tables
When a table holds millions of rows yet most queries touch only a small, well-defined subset, a traditional non-clustered index feels like using a searchlight to find something sitting under a desk lamp: the index still stores an entry for every row even though the workload rarely needs most of them. SQL Server’s answer is the filtered index—introduced in SQL Server 2008 and still under-used today—allowing you to index just the rows that match a predicate you supply in a WHERE clause.
Optimizing Table Width and Data Types in SQL Server
Organizing data effectively in SQL Server can be a juggling act. You may be tempted to make tables as all-encompassing as possible by giving columns very large data types or piling on extra fields for convenience. While this seems harmless in the short term, it can lead to heavier storage requirements, slower queries, and frequent obstacles when updating the schema. Narrower tables, carefully chosen data types, and a normalized design often work together to keep a database agile and efficient.
Determining When to Optimize SQL Server Workloads Versus Upgrading Hardware
When your SQL Server isn’t performing as expected, it’s tempting to think that upgrading hardware is the quick fix. More CPUs, extra memory, faster disks—they all sound like solutions that should solve the problem. But before you start investing in new equipment, it’s worth taking a step back to see if optimization can address the issues.
Diagnosing and Resolving Last Page Insert Contention in SQL Server
In high-concurrency environments, SQL Server databases may experience performance bottlenecks due to contention issues. One common issue is Last Page Insert Contention, which occurs when multiple sessions attempt to insert records into the last page of an index simultaneously. This contention can lead to significant wait times and reduced performance, particularly in tables with ever-increasing key columns. We will look at page insert contention and give recommendations for improvement.
The Hidden Costs of Over-Indexing SQL Server Tables
Over-indexing in SQL Server can lead to hidden costs that undermine database performance, including increased storage consumption, performance overhead on data modifications, and longer maintenance windows. This article explores how excessive indexing impacts query optimization, disk I/O, and system resources. Learn why a balanced indexing strategy is critical and discover best practices for managing your indexes effectively. Avoid the pitfalls of over-indexing and optimize your SQL Server for both performance and cost-efficiency.
Using Query Hints to Solve SQL Server Performance Issues
As professional DBAs, we’re often tasked with balancing query performance against resource consumption. While SQL Server’s query optimizer generally does an excellent job at selecting execution plans, there are times when we need more control. This is where query hints come into play. These hints provide a powerful way to override the default behavior of the query optimizer, allowing us to directly influence how queries are executed to solve performance bottlenecks. In this post, we will explore how query hints can be leveraged to address common performance issues and fine-tune your SQL Server workloads.
Strategies for Optimizing Version Ghost Record Cleanup in SQL Server
This blog explores the challenges and strategies for managing version ghost records in SQL Server. It discusses issues like single-threaded cleanup tasks, long-running transactions, and locking levels that impact the cleanup process. The post provides actionable strategies such as updating SQL Server, utilizing trace flags, and regular index maintenance to improve ghost record cleanup efficiency.
Understanding the Importance of Bucket Counts in Hash Indexes for Memory-Optimized Tables
In the realm of memory-optimized tables, every table must have at least one index to connect its rows. Notably, every index on such tables is also memory-optimized. Among the various types of indexes available, hash indexes stand out for their unique structure and functionality. Understanding the importance of bucket counts in hash indexes for memory-optimized tables is crucial for maintaining optimal performance in SQL Server. This post looks at the structure of hash indexes, how to specify and adjust bucket counts, and the consequences of incorrect bucket counts. Learn best practices for planning and optimizing your hash indexes to ensure efficient data management and avoid common performance pitfalls.