Skip to content
Microsoft SQL Server

SQL Server Error 1101

Could not allocate a new page because the filegroup is full

Severity 17 Log & Storage Space
Applies to: All supported SQL Server versions (2016 to 2025), Azure SQL Managed Instance
Last technically reviewed 24 October 2026 on SQL Server 2025 (17.0.1145.4)
The full message
Msg 1101, Level 17, State 1, Line 1
Could not allocate a new page for database 'AppDb' because the 'PRIMARY' filegroup is full due to lack of storage space or database files reaching the maximum allowed size. Note that UNLIMITED files are still limited to 16TB. Create the necessary space by dropping objects in the filegroup, adding additional files to the filegroup, or setting autogrowth on for existing files in the filegroup.
Other forms of this message
Followed by, for CREATE INDEX (reproduced)
The statement has been terminated.
The object-level message for the same condition (reproduced, error 1105)
Msg 1105, Level 17, State 2, Line 1
Could not allocate space for object 'dbo.Orders' in database 'AppDb' because the 'PRIMARY' filegroup is full due to lack of storage space or database files reaching the maximum allowed size. Note that UNLIMITED files are still limited to 16TB. Create the necessary space by dropping objects in the filegroup, adding additional files to the filegroup, or setting autogrowth on for existing files in the filegroup.
Error number
1101
Severity
17 (resource or software problem)
State
1
Product
Microsoft SQL Server Database Engine
Versions
All supported SQL Server versions (2016 to 2025), Azure SQL Managed Instance
Last reviewed
24 October 2026

What it means

Error 1101 means SQL Server needed a new page in a filegroup whose data files are all full and cannot grow, so the statement that needed it failed.

Like error 1105, error 1101 is about the data files of one filegroup: none of them has a free page left, and none can grow because autogrowth is off, MAXSIZE has been reached, or the volume is full. The statement fails at severity 17 (insufficient resources) and is rolled back; nothing is damaged. The message names the database and the filegroup, which tells you which files to look at.

The difference from 1105 is what the message names. 1105 names the table or index whose rows did not fit. 1101 names no object: in our tests on SQL Server 2025 it came from statements that needed fresh pages for something new, such as SELECT ... INTO a new table, building an index, or the first rows of a new table, after ordinary inserts had already filled the file. Both have the same fixes, and both often appear together in the same incident, so treat them as one problem: make room in the filegroup.

Common causes

  • The data file has autogrowth disabled or has reached its MAXSIZE, so the filegroup is full even though the disk may have space.
  • The volume holding the data files is full, so autogrowth cannot extend them.
  • An index create or rebuild, or a SELECT INTO, needs room for a complete new copy of the data on top of what is already there.
  • The objects live in a secondary filegroup that is much smaller than PRIMARY, or a new table was created on a filegroup that is already full.

Diagnose it

Read-only These queries only read metadata and dynamic management views. They do not change data, permissions or configuration, so they are safe to run first.

Used and maximum size of every data file, by filegroup

Run in the database named in the message.

SELECT fg.name AS filegroup_name, f.name AS logical_name, f.physical_name,
       f.size / 128.0 AS size_mb,
       CAST(FILEPROPERTY(f.name, 'SpaceUsed') AS int) / 128.0 AS used_mb,
       CASE f.max_size WHEN -1 THEN 'unlimited' WHEN 0 THEN 'no growth' ELSE CAST(f.max_size / 128 AS varchar(20)) + ' MB' END AS max_size,
       CASE WHEN f.growth = 0 THEN 'off' WHEN f.is_percent_growth = 1 THEN CAST(f.growth AS varchar(10)) + ' %' ELSE CAST(f.growth / 128 AS varchar(10)) + ' MB' END AS autogrowth
FROM sys.database_files AS f
JOIN sys.filegroups AS fg ON fg.data_space_id = f.data_space_id
ORDER BY fg.name, f.file_id;
What to look for

The filegroup from the message, with every file at used_mb close to size_mb and either autogrowth = off or a size already at max_size.

Free space on the volumes that hold the files

SELECT DISTINCT vs.volume_mount_point,
       vs.total_bytes / 1048576 AS total_mb,
       vs.available_bytes / 1048576 AS free_mb
FROM sys.database_files AS f
CROSS APPLY sys.dm_os_volume_stats(DB_ID(), f.file_id) AS vs
WHERE f.type_desc = 'ROWS';
What to look for

If free_mb is close to zero, growing the file is not possible until space is freed or a file is added on another volume.

Largest objects in each filegroup

SELECT TOP (10) ds.name AS filegroup_name,
       OBJECT_SCHEMA_NAME(p.object_id) AS schema_name,
       OBJECT_NAME(p.object_id) AS object_name,
       SUM(au.total_pages) / 128.0 AS reserved_mb
FROM sys.allocation_units AS au
JOIN sys.partitions AS p ON au.container_id = CASE WHEN au.type = 2 THEN p.partition_id ELSE p.hobt_id END
JOIN sys.data_spaces AS ds ON ds.data_space_id = au.data_space_id
GROUP BY ds.name, p.object_id
ORDER BY reserved_mb DESC;
What to look for

Which tables fill the filegroup, so you can judge whether the growth is expected or a staging or logging table that nobody purges. An index rebuild on one of the largest tables needs about that much free space again.

How to fix it

Each fix is labelled with what it changes. Try read-only checks and the least invasive fix first, and test changes outside production.

Let the data file grow

Changes configuration

If the volume has room, turn autogrowth on with a fixed increment and raise MAXSIZE to a deliberate limit. Use the logical name from the first diagnostic.

ALTER DATABASE AppDb
MODIFY FILE (NAME = N'AppDb', FILEGROWTH = 256MB, MAXSIZE = 100GB);

Add a file to the full filegroup on another volume

Changes configuration

When the volume itself is full, add a data file to the filegroup named in the message, on a volume with space. New allocations in that filegroup can then use it.

ALTER DATABASE AppDb
ADD FILE (NAME = N'AppDb_2', FILENAME = N'E:\SqlData\AppDb_2.ndf', SIZE = 4GB, FILEGROWTH = 256MB)
TO FILEGROUP [PRIMARY];

Create the new object on a filegroup with space

Changes schema

For a one-off copy or a new index, you can place it on another filegroup that has room instead of growing the full one. Check that the backup and restore plan covers that filegroup too.

CREATE INDEX IX_Orders_CustomerId
ON dbo.Orders (CustomerId)
ON [ARCHIVE];

Drop objects that are no longer needed

Changes schema

Microsoft lists dropping unnecessary indexes or tables as a way to free space in the filegroup. Do it only with the owner of the data, after checking that nothing uses them and that they are in a backup.

Caution: Dropping a table or index cannot be undone without a restore, and dropping an index can slow down the queries that used it. Do not rebuild or shrink to reclaim space while the filegroup is full: both need free space to work.

-- After agreement with the data owner and a verified backup
DROP TABLE dbo.Orders_Staging_2024;

Examples

SELECT INTO a new table when the filegroup is full

A throwaway database with an 8 MB data file, MAXSIZE 8 MB and no autogrowth. The loop fills the file with wide rows until error 1105 stops it (caught and printed); the copy then needs new pages.

-- Setup (throwaway database): data file SIZE = 8MB, MAXSIZE = 8MB, FILEGROWTH = 0
CREATE TABLE dbo.Orders (id INT IDENTITY, pad CHAR(4000) NOT NULL DEFAULT 'x');
BEGIN TRY
    WHILE 1 = 1 INSERT dbo.Orders DEFAULT VALUES;   -- fill the data file
END TRY
BEGIN CATCH
    PRINT 'File full: error ' + CAST(ERROR_NUMBER() AS varchar(10));   -- 1105
END CATCH;

SELECT * INTO dbo.Orders_Copy FROM dbo.Orders;
Result
Msg 1101, Level 17, State 1, Line 10
Could not allocate a new page for database 'AppDb' because the 'PRIMARY' filegroup is full due to lack of storage space or database files reaching the maximum allowed size. Note that UNLIMITED files are still limited to 16TB. Create the necessary space by dropping objects in the filegroup, adding additional files to the filegroup, or setting autogrowth on for existing files in the filegroup.

Reproduced on SQL Server 2025 (17.0.1145.4), 23 October 2026.

Building a clustered index on a full filegroup

Same throwaway setup. Building the clustered index writes a new, sorted copy of the table, so it needs about as much free space as the table already uses.

CREATE TABLE dbo.Orders (id INT IDENTITY, pad CHAR(4000) NOT NULL DEFAULT 'x');
BEGIN TRY
    WHILE 1 = 1 INSERT dbo.Orders DEFAULT VALUES;   -- fill the data file
END TRY
BEGIN CATCH
    PRINT 'File full: error ' + CAST(ERROR_NUMBER() AS varchar(10));   -- 1105
END CATCH;

CREATE CLUSTERED INDEX CX_Orders ON dbo.Orders (id);
Result
Msg 1101, Level 17, State 1, Line 9
Could not allocate a new page for database 'AppDb' because the 'PRIMARY' filegroup is full due to lack of storage space or database files reaching the maximum allowed size. Note that UNLIMITED files are still limited to 16TB. Create the necessary space by dropping objects in the filegroup, adding additional files to the filegroup, or setting autogrowth on for existing files in the filegroup.
The statement has been terminated.

Reproduced on SQL Server 2025 (17.0.1145.4), 23 October 2026.

How to prevent it

Alert on used space per filegroup and free space per volume, not only on disk space: a capped file fills up while the disk still looks healthy. Before an index rebuild, a large SELECT INTO or a bulk load, check that the target filegroup has free space at least the size of the data being written.

Set MAXSIZE on purpose and review it with the capacity plan, and keep autogrowth increments fixed and reasonable. The transaction log is a separate file with its own limit; when it fills, the error is 9002.

Common questions

Should I treat 1101 and 1105 differently?

No. Both mean the filegroup in the message has no room and cannot grow. 1105 tells you which object was being written; 1101 does not. The fixes are the same.

Will shrinking another file help?

Only if you shrink a file on the same volume to free disk space for the full file to grow. Shrinking a file in the full filegroup does not create usable space; it needs free pages inside the file to release.

Inserts worked until now. Why does only the index build fail?

An index build or SELECT INTO writes a complete new copy of the data, so it needs far more free space at once than a single insert. A filegroup that is almost full can run out during the build.

Learn more on CodeWithSQL

Official documentation

Last technically reviewed 24 October 2026; examples and diagnostics run on SQL Server 2025 (17.0.1145.4). Message text checked against the engine's sys.messages catalogue.

Still stuck on a SQL Server error?

Browse the full SQL Server error library, or get hands-on help from an experienced SQL professional.