Server Build Checklist

Settings to apply on every new SQL Server instance before it goes live. The values below are starting points; adjust them for the server.

Instance settings

EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;
EXEC sp_configure 'max server memory (MB)', 28672;      -- example for a 32 GB server
EXEC sp_configure 'max degree of parallelism', 8;
EXEC sp_configure 'cost threshold for parallelism', 50;
EXEC sp_configure 'optimize for ad hoc workloads', 1;
EXEC sp_configure 'backup compression default', 1;
EXEC sp_configure 'backup checksum default', 1;
EXEC sp_configure 'remote admin connections', 1;
RECONFIGURE;
  • Max server memory: leave the operating system at least 4 GB, or 10 to 20 percent of RAM on larger servers, plus room for anything else running on the box.
  • MAXDOP: the number of cores per NUMA node, no higher than 8.
  • Cost threshold for parallelism: 50 is a common starting point; the default of 5 is too low for modern hardware.
  • Remote admin connections: enables the dedicated admin connection from another machine, for when the server is too busy to log in normally.

Storage and tempdb

  • Separate volumes for data, log, tempdb and backups, formatted with a 64 KB allocation unit size.
  • Tempdb: one data file per core up to eight, all the same size and growth, on fast storage.
  • File growth in fixed MB, never percent, for model and every user database.

Windows and service accounts

  • Power plan set to High performance.
  • SQL Server runs as a domain or group managed service account with least privilege. Register the SPNs (see Generating the SPNs (Kerberos)).
  • Grant the service account ‘Perform volume maintenance tasks’ for instant file initialisation. Check it:
SELECT servicename, service_account, instant_file_initialization_enabled
FROM sys.dm_server_services;

Before go-live

  • Latest cumulative update applied.
  • Backup, DBCC CHECKDB, index and statistics maintenance jobs in place (see Index Maintenance Solution (Ola Hallengren)).
  • Database Mail, the DBA operator and severe-error alerts configured (see SQL Agent Alerts for Severe Errors).
  • Error log recycling and job history clean-up scheduled.

Verify

SELECT name, value_in_use
FROM sys.configurations
WHERE name IN (N'max server memory (MB)', N'max degree of parallelism',
               N'cost threshold for parallelism', N'optimize for ad hoc workloads',
               N'backup compression default', N'backup checksum default',
               N'remote admin connections')
ORDER BY name;

From my SQL Server DBA handbook.