How to Fix a Full TempDB in MS SQL Server

How to Fix a Full TempDB in MS SQL Server

TempDB is a critical system database for temporary operations. A full TempDB can cause performance degradation and failed transactions. Follow these steps to resolve and prevent issues.

1. Diagnose TempDB Space Usage

Check overall usage:
USE tempdb;
EXEC sp_spaceused;

Detailed space breakdown:

SELECT 
    SUM(user_object_reserved_page_count) * 8 / 1024 AS [User Objects (MB)],
    SUM(internal_object_reserved_page_count) * 8 / 1024 AS [Internal Objects (MB)],
    SUM(version_store_reserved_page_count) * 8 / 1024 AS [Version Store (MB)],
    SUM(unallocated_extent_page_count) * 8 / 1024 AS [Free Space (MB)]
FROM sys.dm_db_file_space_usage;

2. Address Active Sessions

Identify sessions consuming TempDB:

SELECT 
    session_id, 
    login_name,
    host_name,
    SUM(internal_objects_alloc_page_count) * 8 / 1024 AS [Internal Objects (MB)],
    SUM(user_objects_alloc_page_count) * 8 / 1024 AS [User Objects (MB)]
FROM sys.dm_db_session_space_usage
JOIN sys.dm_exec_sessions ON session_id = session_id
GROUP BY session_id, login_name, host_name
ORDER BY [Internal Objects (MB)] + [User Objects (MB)] DESC;

Terminate problematic sessions:

KILL <session_id>; -- Replace with actual session ID

3. Manage TempDB Size

Shrink individual TempDB files:

DBCC SHRINKFILE (tempdev, 10240); -- Shrink to 10GB
DBCC SHRINKFILE (templog, 1024); -- Shrink log to 1GB

Check file sizes and growth settings:

SELECT 
    name,
    size * 8 / 1024 AS [Size (MB)],
    growth,
    is_percent_growth
FROM tempdb.sys.database_files;

4. Optimize TempDB Configuration

Increase file sizes and add multiple files:

Adjust existing files

ALTER DATABASE tempdb MODIFY FILE (NAME = tempdev, SIZE = 8GB, FILEGROWTH = 1GB);
ALTER DATABASE tempdb MODIFY FILE (NAME = templog, SIZE = 2GB, FILEGROWTH = 512MB);

Add new data files (1 per CPU core, up to 8)

ALTER DATABASE tempdb ADD FILE (NAME = tempdev2, FILENAME = 'D:\MSSQL\tempdb2.ndf', SIZE = 8GB, FILEGROWTH = 1GB);
ALTER DATABASE tempdb ADD FILE (NAME = tempdev3, FILENAME = 'D:\MSSQL\tempdb3.ndf', SIZE = 8GB, FILEGROWTH = 1GB);

5. Prevent Future Issues

Implement proactive monitoring:

Create alert for TempDB space

EXEC msdb.dbo.sp_add_alert 
    @name = N'TempDB Space Warning',
    @message_id = 0,
    @severity = 0,
    @enabled = 1,
    @delay_between_responses = 300,
    @notification_message = N'TempDB space is critically low',
    @performance_condition = N'Databases|Percent Log Used|tempdb|>|90';

Check version store retention:

SELECT 
    transaction_id,
    elapsed_time_seconds,
    session_id 
FROM sys.dm_tran_active_snapshot_database_transactions
ORDER BY elapsed_time_seconds DESC;

6. Post-Resolution Checklist

  • Restart SQL Server if space cannot be reclaimed (TempDB resets on restart)
  • Place TempDB files on fast storage separate from user databases
  • Review queries for excessive temp table usage or sorting operations
  • Ensure all TempDB data files are equal size for proportional fill

Note : No Full Backup or differential backup will be taken for Temp DB.(Because all operation are before commit of data..i.e it will be commit or rollback. )

Leave a Comment