SQL Server burns 100% of a single CPU core for a *very* long time when starting up a database with 64K filegroups and files. It does almost no IO, it is just burning CPU. This is unexpected because startup should probably be IO bound.Repro:1. Create a database with 64K filegroups and one file each (on an SSD drive)2. Kill SQL Server3. Start it4. Observe high CPU for a long time, almost no IO and the database being inaccessible due to X-locks.Script:--setupCREATE DATABASE FgTest ON PRIMARY ( NAME = N'FgTest_Data', FILENAME = N'C:\FgTest.mdf', SIZE = 16MB, MAXSIZE = UNLIMITED, FILEGROWTH = 16MB) LOG ON ( NAME = N'FgTest_Log', FILENAME = N'C:\FgTest.ldf', SIZE = 16MB, MAXSIZE = UNLIMITED, FILEGROWTH = 16MB)GOALTER DATABASE FgTest SET RECOVERY SIMPLE GOUSE FgTestGO--test limitsDECLARE @i INT = 0WHILE @i < 100BEGIN DECLARE @nextID INT = (SELECT MAX(file_id) FROM sys.database_files) + 2 DECLARE @filegroupName NVARCHAR(MAX) = 'FG_' + CONVERT(NVARCHAR(MAX), @nextID) DECLARE @fileName NVARCHAR(MAX) = 'F_' + CONVERT(NVARCHAR(MAX), @nextID) DECLARE @sql NVARCHAR(MAX) = ' ALTER DATABASE FgTest ADD FILEGROUP ' + @filegroupName + ' ALTER DATABASE FgTest ADD FILE (NAME = N''' + @fileName + ''', FILENAME = N''C:\FgTest\FgTest_' + @fileName + '.ndf'', SIZE = 512KB) TO FILEGROUP ' + @filegroupName + ' ' EXEC sp_executesql @sql IF @i % 10 = 0 PRINT 'Added filegroup ' + @filegroupName + ', file ' + @filegroupName SET @i = @i + 1ENDThis is an availability problem because the server is unavailable for a really long time.
Product Language
Version
Category
Operating System
Operating System Language
Steps to Reproduce
Actual Results
Expected Results
Platform
Virtualization