Issue
SQL error: [Microsoft][ODBC SQL Server Driver][SQL Server]The transaction log for database
'tempdb' is full. To find out why space int he log cannot be reused, see the log_reuse_wait_desc
column in sys.databases
Product Line
Andover Continuum
Environment
SQL Server
Cause
Low disk space or unreasonably low maximum size for tempdb database growth.
Resolution
SQL Server allocates a database called tempdb, primarily for worktable / #temp table usage. Sometimes, you will encounter a transaction log full error
Causes
Usually, tempdb fills up when you are low on disk space, or when you have set an unreasonably low maximum size for database growth.
Many people think that tempdb is only used for #temp tables. When in fact, you can easily fill up tempdb without ever creating a single temp table. Some other scenarios that can cause tempdb to fill up:
- any sorting that requires more memory than has been allocated to SQL Server will be forced to do its work in tempdb;
- if the sorting requires more space than you have allocated to tempdb, one of the above errors will occur;
- DBCC CheckDB('any database') will perform its work in tempdb -- on larger databases, this can consume quite a bit of space;
- DBCC DBREINDEX or similar DBCC commands with 'Sort in tempdb' option set will also potentially fill up tempdb;
- large resultsets involving unions, order by / group by, cartesian joins, outer joins, cursors, temp tables, table variables, and hashing can often require help from tempdb;
- any transactions left uncommitted and not rolled back can leave objects orphaned in tempdb;
- use of an ODBC DSN with the option 'create temporary stored procedures' set can leave objects there for the life of the connection.
Short-term fix
Restarting SQL Server will re-create tempdb from scratch, and it will return to its usually allocated size. In and of itself, this solution is only effective in the very short term; assumedly, the application and/or T-SQL code which caused tempdb to grow once, will likely cause it to grow again.
Long-term prevention
Here are some suggestions for maintaining a healthy tempdb:
Make sure that tempdb is set to autogrow -- do *NOT* set a maximum size for tempdb. If the current drive is too full to allow autogrow events, then buy a bigger drive, or add files to tempdb on another device (using ALTER DATABASE) and allow those files to autogrow. You will need at least one data file and at least one log file in order to avoid this problem from halting your system in the future.