Sql-server – Do I need to leave some extra space available on the disk which the database log files reside, for log backup operations to successfully occur

disk-spacelogssql serversql-server-2008-r2transaction-log

If I size my log files to evenly split the entire drive they reside on, leaving no extra space available, will log backups still be able to occur successfully? I have several databases, with one log file per database.

Is it good practice to not leave any space on the drive available, i.e. allocate it all to the log files? (The drive is dedicated to the log files in this case, data and the OS live on their own partitions.)

Best Answer

There is no technical problem for SQL Server if the drive where the log file exists has no free space, assuming the log itself doesn't run out of available, unused, VLF entries.

If the log runs out of available space, you'll not be able to commit any transactions until you resolve the problem. If the entire drive is consumed by the log file, the only action you can take is to add a log file on a different drive to the database. If you proactively manage your log file, and never run out of log space, there is no technical prohibition from doing what you're contemplating.

Having said that, I wouldn't recommend sizing your log file to consume all available drive space:

  1. Windows will complain about the disk being out of space, which can be annoying.
  2. If you do run out of log space, and you almost certainly will at some point, the database will not be accessible until you add a new log file.
  3. How much does disk space cost? Almost nothing in comparison with the price of SQL Server Enterprise Edition licensing, and the potential cost to the business from down-time. Ask yourself why you wouldn't leave a little space free on the drive. Please don't take this to mean I'm endorsing using the wrong data types such as using a bigint instead of an int, or even a smallint. Unused disk space is cheap, but space used inside a database should be considered premium cost for the reasons succinctly outlined by @SolomonRutzky here.

In a comment, you mentioned that you see no difference between a log growing to fill the disk, and the disk already being filled with a mostly empty log which subsequently gets filled. The supposition is correct, both events will result in the server returning the following error:

Msg 9002, Level 17, State 2, Line 22
The transaction log for database '<database_name>' is full due to 'LOG_BACKUP'.

However, if you have a SAN, you could thin-provision the drive with a maximum size of, say, 10TB. Create the log file with the estimated "correct" initial size, say 1GB, with growth set to 1GB (or whatever makes sense). Then you won't be using more SAN disk space than you need, but you'll have room to grow the log file without needing to involve the SAN administrator. Win-win.


In a previous version of my answer, I stated the following incorrect information:

Adding a log file when you're already out of log space can be impossible since the mere fact of adding a log file modifies the primary data file, which necessitates writing to the log. It's kind of a chicken-and-egg thing.

After some pretty extensive testing, I am able to successfully add a new log file after the existing log file runs out of space. I wrote a blog post showing how this works at SQLServerScience.com. The actions required for adding a new log file consist of:

  1. Physically creating the new file on disk
  2. Writing new VLF structures to the file
  3. Updating the existing log file - there must be enough space preallocated in the existing log file for just this purpose, that cannot be used for anything else.
  4. Updating the primary mdf to reflect the newly created log file.

The above was validated on SQL Server 2008 R2, and SQL Server 2016.