Installing and configuring SQL Server 2025 on Windows Server
Categories:
29 minute read
This guide covers the whole process of installing SQL Server 2025 on Windows Server (2019 / 2022 / 2025), then the post-installation configuration through the Server Properties in SSMS and the SQL Server Configuration Manager.
Prerequisites
Minimum and recommended hardware
| Component | Minimum | Recommended |
|---|---|---|
| Processor | x64, 1.4 GHz | 2.0 GHz or faster |
| Memory (RAM) | 1 GB (512 MB for Express) | ≥ 4 GB, increasing with the size of the databases |
| Disk space | 6 GB free on the system drive, even when the binaries go to another volume (setup temporary files) | ≥ 50 GB for a production environment (excluding data) |
| Display | Super-VGA 800 × 600 | 1920 × 1080 |
| Network | Networking software provided by Windows | Internet access for updates |
Software requirements
| Component | Required version |
|---|---|
| Operating system | Windows Server 2019 / 2022 / 2025 (Server Core included) |
| .NET Framework | 4.7.2 (on Server Core, setup installs the Server Core profile if it is missing, then asks for a restart) |
| Network protocols | TCP/IP, Named Pipes, Shared Memory (built into the OS) |
Note: SQL Server 2025 installs on x64 processors only. 32-bit installations have not been supported since SQL Server 2016.
SQL Server supports at most 64 logical cores per NUMA node. Since SQL Server 2022 CU11, the engine refuses to start beyond that: on very large servers, set the core distribution in the BIOS before installing.
Storage best practices before installing
Separate your files physically to optimize I/O performance:
| Drive letter (example) | Content | Recommended RAID level |
|---|---|---|
C:\ | Operating system | RAID 1 |
D:\ | SQL Server binaries | RAID 1 |
E:\ | Data files (.mdf / .ndf) | RAID 10 |
F:\ | Transaction logs (.ldf) | RAID 10 |
G:\ | TempDB (data + log) | RAID 10 / NVMe |
H:\ | Backups (.bak) | RAID 5 / RAID 6 |
Data files are accessed randomly, while the transaction log is written sequentially, and every commit waits for its log record to be written. Putting the log on a separate volume isolates it from the random I/O of the data files, and avoids losing data and log along with the same volume.
Editions available in SQL Server 2025
SQL Server 2025 replaces the Developer edition with two editions: Enterprise Developer and Standard Developer.
| Edition | Use | Key points |
|---|---|---|
| Enterprise | High-performance production | Every feature, RAM and CPU limited only by the OS (20 cores per instance under Server + CAL licensing) |
| Standard | SMB production | 256 GB of buffer pool, 4 sockets or 32 cores (128 GB and 24 cores in SQL Server 2022) |
| Enterprise Developer | Dev / test only | Identical to Enterprise, free outside production |
| Standard Developer (new) | Dev / test only | Identical to Standard, free outside production |
| Express | Small applications | Free, buffer pool limited to 1,410 MB, 1 socket or 4 cores, 50 GB per database (10 GB up to SQL Server 2022) |
| Evaluation | 180-day trial | Identical to Enterprise |
The Web edition no longer exists in SQL Server 2025. Express with Advanced Services is gone too: its features are now part of Express.
Why Standard Developer matters: teams used to run the Developer edition (equivalent to Enterprise) in dev and test, then Standard in production. That produced differences in behavior (for instance, Batch Mode on Rowstore and Online Index Rebuild are absent from Standard). Standard Developer removes the gap: it offers exactly the features of Standard.
Major new features of SQL Server 2025
Before you start the installation, here are the features that justify the upgrade:
VECTORdata type and theVECTOR_DISTANCEfunction for semantic search (cosine, Euclidean, dot product)- DiskANN vector indexes (
CREATE VECTOR INDEX) for approximate nearest neighbor search at scale (preview) - AI integration: external models (
CREATE EXTERNAL MODEL), calls to Azure OpenAI from T-SQL, support for theVECTORtype in LangChain, Semantic Kernel and Entity Framework Core 10 - Native
jsondata type, and JSON indexes (preview) - Change Event Streaming (preview), and calls to external REST APIs from T-SQL with
sp_invoke_external_rest_endpoint - Optimized Locking, until now limited to Azure SQL, to reduce lock memory and blocking
- Extended Intelligent Query Processing
- Microsoft Fabric integration for hybrid analytics
Downloading the installation media
The licensed Standard and Enterprise editions do not go through this page: their media (ISO) comes from the reseller, or from the Microsoft 365 admin center for volume licensing agreements, with the product key built in. The procedure below covers the free editions and the evaluation.
- Go to the official page: https://www.microsoft.com/sql-server/sql-server-downloads
- Click the download link of the edition you want (Standard Developer, Enterprise Developer, Express). The evaluation downloads from the Evaluation Center, through the “Try SQL Server 2025” link.
- The downloaded file is named
SQL2025-SSEI-Eval.exe,SQL2025-SSEI-StdDev.exe,SQL2025-SSEI-EntDev.exeorSQL2025-SSEI-Expr.exedepending on the edition, and weighs about 5 MB - Run this launcher and pick one of three options:
| Option | Description | When to use it |
|---|---|---|
| Basic | Quick installation of the Database Engine with the default configuration | Quick test environment |
| Custom | Launches the full wizard with every option available | An installation where you want to control each option |
| Download Media | Downloads the full media, as ISO or CAB | Offline installation, deployment on several servers |
- Choose Download Media, select the ISO format, then a destination folder
- Once the download is finished, mount the ISO on the target server and run
setup.exe
Step-by-step installation (graphical wizard)
Step 1: SQL Server Installation Center
When setup.exe starts, the SQL Server Installation Center opens. In the left pane:
- Planning: checks the prerequisites (System Configuration Checker)
- Installation: launches the installation scenarios
Click Installation → New SQL Server stand-alone installation or add features to an existing installation.
Step 2: Edition
| Field | Description |
|---|---|
| Specify a free edition | Select Evaluation or a Developer edition |
| Use pay-as-you-go billing through Microsoft Azure | Activates a production Standard or Enterprise edition without a product key, billed by usage. Requires an active Azure subscription |
| Enter the product key | Enter the license key for Standard / Enterprise |
Tip: you can install in Evaluation mode (180 days), then convert to a licensed edition later with the product key, without reinstalling. Changing the edition restarts the SQL Server services: plan for the interruption.
Click Next.
Step 3: License Terms
Read and accept the Microsoft license terms. Check I accept the license terms and Privacy Statement.
This page also links to the Microsoft privacy statement. In a corporate environment, check that it complies with your GDPR policy.
Click Next.
Step 4: Global Rules, Microsoft Update and Product Updates
The Global Rules page passes on its own if no rule fails.
The Microsoft Update page appears only if Microsoft Update is not already enabled in the Windows Update settings. Checking the box enrolls the server in Microsoft Update: Windows Update will then offer updates for every Microsoft product, SQL Server included. It does not decide which fixes are included in the installation.
Those fixes appear on the next page, Product Updates, which lists the critical updates available for SQL Server. If none is found, the page is not displayed. In production, including them lets you start with an up-to-date server.
Click Next. The Install Setup Files page then installs the setup files, and passes on its own.
Step 5: Install Rules
The program checks the installation rules automatically:
- .NET Framework present
- Pending restart
- Registry access
- Windows Firewall (a warning is possible when the firewall is on)
If every rule is green (✅ Passed), click Next. With a ⚠️ Warning on the firewall, you can set up the rules after the installation.
Step 6: Azure Extension for SQL Server
This page, in the wizard since SQL Server 2022, connects the instance to Azure Arc to use services such as Microsoft Defender for Cloud, Microsoft Purview or Microsoft Entra authentication. The option is checked by default.
- For an instance that must not be connected to Azure, uncheck it.
- To keep it, you need an active Azure subscription, an Azure account or a service principal, a resource group and a region.
The page does not appear on an Azure VM, nor on a VMware ESX host or Azure VMware Solution.
Click Next.
Step 7: Feature Selection
This is one of the most important pages. Here is the detail of each component:
Instance features
| Component | Description | Production recommendation |
|---|---|---|
| Database Engine Services | The main relational engine: storage, queries, transactions, security | ✅ Always check |
| ↳ SQL Server Replication | Transactional, merge and snapshot replication | As needed |
| ↳ Full-Text and Semantic Extractions for Search | Full-text search in text columns | As needed |
| ↳ PolyBase Query Service for External Data | T-SQL queries against external sources such as Oracle, Teradata, MongoDB, SQL Server or ODBC. Since SQL Server 2025, reading Parquet, Delta or CSV files no longer requires this service | If you need multi-source access |
| ↳ Machine Learning Services and Language Extensions | Runs external scripts inside the engine. Since SQL Server 2022, the R, Python and Java runtimes are no longer shipped: they install separately | If you need in-database ML |
| Analysis Services | OLAP, tabular and multidimensional models | Dedicated server recommended |
Data Quality Services and Master Data Services are no longer part of SQL Server 2025. Reporting Services has not been in the installation wizard since SQL Server 2017, and starting with SQL Server 2025, on-premises reporting goes through Power BI Report Server, installed separately.
Shared features
| Component | Description |
|---|---|
| Integration Services | ETL (SSIS packages). Dedicated server recommended |
| Client Tools Connectivity | Connection libraries (OLE DB, ODBC) |
| Client Tools SDK | Development APIs, including the SSIS programming assemblies |
Installation directories
- Instance root directory:
D:\Program Files\Microsoft SQL Server\(avoidC:\) - Shared feature directory and Shared feature directory (x86): for the components shared between instances. The two paths must be different
Best practice: put the SQL Server binaries on a dedicated volume rather than on the system drive
C:\. Setup still needs 6 GB free onC:\for its temporary files.
Click Next. The Feature Rules page passes on its own if every rule is satisfied.
Step 8: Instance Configuration
| Option | Description |
|---|---|
| Default instance | The server is reachable through the machine name alone: SERVERNAME |
| Named instance | The server is reachable through SERVERNAME\INSTANCE_NAME |
- Instance ID: internal identifier used for directories and registry keys
- Instance root directory: confirm the path set in the previous step
When should you use a named instance? When you need to host several instances of SQL Server on the same server (for instance, a production instance and a staging instance). Each named instance has its own services, its own memory and its own ports.
Note: SQL Server Browser must be running for clients to discover named instances.
Click Next.
Step 9: Server Configuration
This page has two essential tabs:
“Service Accounts” tab
Each SQL Server service runs under a Windows account. By default, setup offers a virtual account (NT Service\MSSQLSERVER for the engine of a default instance). Here are the configurable services:
| Service | Recommended account in production | Why |
|---|---|---|
| SQL Server Database Engine | gMSA (for example DOMAIN\gmsa-sqlengine$), otherwise a virtual account on a standalone instance, or a dedicated low-privilege domain account | Security isolation, password managed by AD, network access under a controlled identity |
| SQL Server Agent | gMSA, virtual account or dedicated domain account, by the same rules | Runs jobs, maintenance, backups |
| SQL Server Browser | NT AUTHORITY\LOCAL SERVICE | Discovery of named instances |
gMSA (Group Managed Service Accounts): the best practice in an Active Directory environment. AD manages the password automatically, with no human intervention. A domain administrator must create the gMSA beforehand.
A virtual account reaches the network as the machine account (DOMAIN\SERVER$): that is enough for a standalone instance that writes its backups to a share granted to that account. Virtual accounts are not supported on a failover cluster instance: you then need a gMSA or a domain account.
Startup options:
| Option | Description |
|---|---|
| Automatic | The service starts with Windows |
| Manual | Started on demand |
| Disabled | Service disabled |
Set the Database Engine and the Agent to Automatic. Set the Browser to Automatic only if you have named instances.
Check Grant Perform Volume Maintenance Task privilege to SQL Server Database Engine Service. This enables Instant File Initialization (IFI) for data files: creating them, growing them, adding files and restoring no longer go through zero-initialization of the disk space. IFI does not apply to the data files of a database encrypted with TDE. For the log, since SQL Server 2022, growths up to 64 MB benefit from it without this privilege.
“Collation” tab
The collation sets the sorting and comparison rules for character strings. The collation chosen here is the one of the system databases, and the default for new databases; each database and each column can then have its own.
Setup suggests a collation derived from the Windows locale, picked among the oldest versions for compatibility reasons. It is therefore not always the best one. The Microsoft documentation advises preferring the closest Windows collation.
| Setting | Recommended value | Explanation |
|---|---|---|
| Database Engine collation | The one your applications expect; otherwise a recent Windows collation, such as French_100_CI_AS_SC or Latin1_General_100_CI_AS_SC | 100 = version of the sorting rules, CI = Case Insensitive, AS = Accent Sensitive, SC = Supplementary Characters |
Collations with the _UTF8 suffix (for example Latin1_General_100_CI_AS_SC_UTF8) store Unicode encoded in UTF-8 in the char and varchar types. The nchar and nvarchar types stay in UTF-16 whatever the collation. Keep UTF-8 for the databases or columns that need it. At the server level, it would also apply to tempdb, where a temporary table in varchar(n) then counts its length in bytes: an accented character takes two, and a value that fit in varchar(8) can be truncated.
Why it matters: the server collation applies to the system databases (
master,model,msdb,tempdb) and becomes the default collation of every new database. It cannot be changed after installation without rebuilding the system databases, which means exporting the data, then dropping and recreating every user database. Take the time to choose correctly.
Warning: if you need to work with existing databases, align the collation to avoid
Cannot resolve the collation conflicterrors.
Click Next.
Step 10: Database Engine Configuration
This is the richest page of the wizard. It has six tabs: Server Configuration, Data Directories, TempDB, MaxDOP, Memory and FILESTREAM. The first five are detailed below; FILESTREAM is only useful if you store BLOBs in the file system.
“Server Configuration” tab
Authentication mode:
| Mode | Description | Recommendation |
|---|---|---|
| Windows Authentication Mode | Only Windows/AD accounts can connect | ✅ The most secure: prefer this mode |
| Mixed Mode | Windows authentication + SQL accounts (login/password) | Required if applications connect with SQL logins |
If you choose Mixed Mode:
- Set a strong password for the
saaccount (≥ 12 characters, uppercase, lowercase, digits, special characters) - The
saaccount is the number one target of attacks. In production, disable it after the installation and use named accounts
Specify SQL Server administrators:
Click Add Current User to add your Windows account as an administrator of the instance. Also add an AD group of DBAs (for example DOMAIN\GRP-SQLAdmins).
Setup requires at least one administrator. Do not settle for your personal account: an AD group keeps administrator access to the instance from depending on a single person.
“Data Directories” tab
This is where you set the default paths for the files:
| Directory | Recommended path | Role |
|---|---|---|
| Data root directory | E:\MSSQL\ | Data root |
| User database directory | E:\MSSQL\Data\ | .mdf / .ndf files |
| User database log directory | F:\MSSQL\Log\ | .ldf files |
| Backup directory | H:\MSSQL\Backup\ | .bak backups |
Golden rule: always separate data files and transaction logs on distinct volumes. Transaction logs use sequential writes and must not share a volume with the random I/O of the data files.
“TempDB” tab
Since SQL Server 2016, the wizard configures TempDB at installation time:
| Setting | Recommendation | Explanation |
|---|---|---|
| Number of files | 1 file per logical core, up to 8 files (the default offered) | Reduces contention on the allocation pages (PFS, GAM, SGAM) |
| Initial size per file | Close to the size needed in normal operation (8 MB by default, often 1 GB or more in production) | TempDB starts again from this size at every restart: a size that is too small is paid for in autogrowths during the workload |
| Autogrowth | 64 MB per file (the default, expressed in MB in the wizard) | Predictable, uniform growth |
| TempDB data directory | G:\MSSQL\TempDB\ | Dedicated volume, ideally NVMe |
| TempDB log directory | G:\MSSQL\TempDBLog\ | Can be on the same volume as the TempDB data |
Why 8 files? TempDB is a contention hot spot. Multiplying the data files spreads the allocation requests over several files, which reduces latch waits on the allocation pages. Start with 8; if contention persists, Microsoft recommends adding files in multiples of 4, without exceeding the number of logical cores.
All the TempDB files must have the same size and the same growth settings. SQL Server uses a proportional fill algorithm that sends allocations to the files with the most free space. Files of different sizes concentrate the activity on the largest one.
“MaxDOP” tab
Since SQL Server 2019, the wizard suggests a MAXDOP value based on the CPU topology it detects.
| Scenario | Recommended MAXDOP value |
|---|---|
| Server with 1 NUMA node, ≤ 8 logical processors | at most the number of logical processors |
| Server with 1 NUMA node, > 8 logical processors | 8 |
| Server with several NUMA nodes, ≤ 16 logical processors per node | at most the number of logical processors per node |
| Server with several NUMA nodes, > 16 logical processors per node | half the logical processors per node, without exceeding 16 |
The NUMA nodes in this table are soft-NUMA nodes. Since SQL Server 2016, the engine creates them automatically as soon as a NUMA node or a socket has more than eight physical cores. A server with a single 12-core socket therefore has several soft-NUMA nodes.
MAXDOP = 0 is not recommended. It lets a single parallel query use every available processor, up to 64, which can saturate the server at the expense of the other queries.
Accept the suggested value or adjust it to your needs. You can change it later.
“Memory” tab
Since SQL Server 2019, the wizard also suggests a memory configuration. The option selected by default, Default, leaves max server memory at 2,147,483,647 MB, in other words unlimited: to apply a value, choose Recommended, adjust it if needed, and check the box that accepts the values.
| Setting | Recommendation |
|---|---|
| Min Server Memory | Leave at 0, except with several instances on the same server or virtual machine |
| Max Server Memory | Total RAM, minus the OS reserve, minus the memory of the other services |
Formula:
Max Server Memory = total_RAM - OS_reserve - RAM_for_other_services
The OS reserve depends on the amount of RAM, as explained in the article SQL Server memory consumption: 1 to 2 GB up to 16 GB, 4 GB from 16 to 64 GB, 10% beyond.
Examples:
| Total RAM | Reserved for the OS | Max Server Memory |
|---|---|---|
| 32 GB | 4 GB | 28 GB (28,672 MB) |
| 64 GB | 4 GB | 60 GB (61,440 MB) |
| 128 GB | 13 GB (10%) | 115 GB (117,760 MB) |
The OS reserve also has to absorb the allocations that max server memory does not cap. Since SQL Server 2012, the setting covers almost all the memory allocated through the engine’s memory manager, but not the stacks of the worker threads (2 MB each on x64), nor the allocations requested directly from Windows by extended procedure DLLs, the OLE DB providers of linked servers or sp_OA. The maximum number of workers is 512 + (logical processors − 4) × 16, up to 64 logical processors: 704 workers on 16 processors, so up to 1.4 GB of stacks. Workers are created on demand, and that ceiling is only approached under heavy concurrency or during blocking that holds many sessions. On a server with 32 GB and 16 logical processors and a 4 GB reserve, it still accounts for more than a third of it.
The Microsoft documentation derives another, more cautious starting point from this: subtract the memory of these stacks from the total RAM, then 25% of the rest. It is a starting value, to adjust after observing the actual consumption.
Why cap the memory? By default, SQL Server takes the memory its workload needs, with no ceiling. It gives memory back to Windows only when the OS signals that free memory is running low. Without a cap, the operating system and the other processes can run short of memory, which causes slowdowns.
max server memoryis the first setting to configure on any production instance.
Click Next.
Step 11: Ready to Install
The summary page shows all your selections:
- Edition and product key
- Selected features
- Directory paths
- Service accounts
- Authentication mode
- TempDB, MAXDOP and memory configuration
Read this page carefully. It is your last chance to correct a mistake before the installation.
Tip: the path of the configuration file (
ConfigurationFile.ini) is shown on this page. Copy this file and keep it. You can reuse it for identical installations on other servers. The file contains neither the passwords nor the license acceptance: they are passed on the command line. In silent mode (/Qor/QS),/IACCEPTSQLSERVERLICENSETERMSand/SUPPRESSPRIVACYSTATEMENTNOTICEare mandatory:setup.exe /Q /IACCEPTSQLSERVERLICENSETERMS /SUPPRESSPRIVACYSTATEMENTNOTICE ` /ConfigurationFile="C:\SQLConfig\ConfigurationFile.ini" ` /SQLSVCPASSWORD="********" /AGTSVCPASSWORD="********"The service passwords are not needed with a virtual account or a gMSA. Add
/SAPWDin mixed mode, and/PIDfor a paid edition. Remove theUIMODEline from the file: it is incompatible with/Qand/QS.
Click Install.
Step 12: Installation Progress & Complete
The installation usually takes between 10 and 30 minutes, depending on the hardware and the selected features. A progress bar shows the progress of each component.
At the end, the Complete page shows the status of each feature:
- ✅ Succeeded: installation succeeded
- ❌ Failed: read the setup logs in
C:\Program Files\Microsoft SQL Server\170\Setup Bootstrap\Log\
If the installation fails, the
Summary.txtfile and the associated log folder hold the details of the error.
Click Close.
Installing SSMS (SQL Server Management Studio)
SQL Server 2025 is compatible with SSMS 21 and SSMS 22. The tool has not been part of the installation media since SQL Server 2016: it downloads separately.
- Download SSMS from: https://aka.ms/ssms/22/release/vs_SSMS.exe
- Run the installer and follow the instructions
- Restart if asked
Post-installation configuration in SSMS
Connecting to the instance
- Start SSMS
- In the Connect to Server window:
- Server type: Database Engine
- Server name:
SERVERNAME(default instance) orSERVERNAME\INSTANCE - Authentication: Windows Authentication
- Encryption: Mandatory, the default since SSMS 20. As long as no certificate signed by a trusted authority is installed on the instance, the connection fails with a certificate error: check Trust server certificate, which keeps the encryption but does not verify the identity of the server
- Click Connect
Server properties
Right-click the server in Object Explorer → Properties. Here is the detail of each page:
“General” page
Read-only information: server name, version, edition, OS, collation, memory, number of processors, root directory. Useful for a quick check of the configuration.
“Memory” page
| Setting | Description | Recommended value |
|---|---|---|
| Minimum server memory (in MB) | Threshold below which SQL Server no longer gives memory back to the OS | 0 (except with several instances or on a virtual machine) |
| Maximum server memory (in MB) | Ceiling for the memory of the buffer pool and the other caches of the engine | RAM - OS reserve - other services |
T-SQL equivalent:
EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;
EXEC sp_configure 'max server memory (MB)', 28672; -- 28 GB
RECONFIGURE;
EXEC sp_configure 'min server memory (MB)', 0;
RECONFIGURE;
Parallelism (“Advanced” page, “Parallelism” section)
The “Processors” page only holds the processor affinity and the maximum number of worker threads, to leave at their defaults. The two parallelism settings are on the “Advanced” page.
| Setting | Description |
|---|---|
| Max Degree of Parallelism | Maximum number of processors for a parallel query |
| Cost Threshold for Parallelism | Estimated cost from which the engine considers a parallel plan (default: 5) |
T-SQL equivalent (both options are advanced: without show advanced options set to 1, sp_configure returns error 15123):
EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;
EXEC sp_configure 'max degree of parallelism', 8;
RECONFIGURE;
EXEC sp_configure 'cost threshold for parallelism', 50;
RECONFIGURE;
Cost threshold for parallelism: the default (5) is far too low for most production workloads. A value between 25 and 50 is a good starting point. It keeps small queries from needlessly triggering a parallel plan, which consumes resources and threads.
“Security” page
| Setting | Options |
|---|---|
| Server authentication | Windows Authentication mode / SQL Server and Windows Authentication mode |
| Login auditing | None / Failed logins only / Successful logins only / Both failed and successful logins |
| Enable Common Criteria compliance | For CC-certified environments |
Changing the authentication mode or the auditing level requires a restart of the service. Switching to mixed mode does not enable the sa account: it stays disabled until an ALTER LOGIN sa ENABLE is run.
Recommendation: at least turn on auditing of failed logins (Failed logins only). It lets you detect intrusion attempts.
“Database Settings” page
| Setting | Description | Recommendation |
|---|---|---|
| Database default locations: Data | Default path for .mdf files | E:\MSSQL\Data\ |
| Database default locations: Log | Default path for .ldf files | F:\MSSQL\Log\ |
| Database default locations: Backup | Default path for .bak files | H:\MSSQL\Backup\ |
| Compress backup | Turns compression on by default | ✅ Enable: backups are smaller and often faster, at the cost of CPU during the backup. The gain depends on the data |
| Recovery interval (minutes) | Target recovery time after a crash | Leave at 0 (automatic). This setting only concerns databases whose target recovery time is 0: databases created since SQL Server 2016, model included, use indirect checkpoints and do not follow it |
A new default path is only taken into account when the engine restarts.
SQL Server 2025 adds the ZSTD compression algorithm, faster and more efficient than MS_XPRESS. You choose it per backup with WITH COMPRESSION (ALGORITHM = ZSTD), or as the instance default with the backup compression algorithm option (value 3). Microsoft reports a known issue with this instance setting: read the SQL Server 2025 known issues page before turning it on.
T-SQL equivalent for backup compression:
EXEC sp_configure 'backup compression default', 1;
RECONFIGURE;
“Advanced” page
Important settings:
| Setting | Default value | Recommendation | Explanation |
|---|---|---|---|
| Optimize for Ad hoc Workloads | False | ✅ True | Keeps single-use plans from filling the plan cache. On the first call, only a stub is cached; the full plan is cached on the second call |
| Remote Login Timeout | 10 | 10-20 | Delay in seconds before a remote connection to an OLE DB provider (linked servers) fails |
| Allow Triggers to Fire Others | True | True | Lets triggers fire in cascade |
| Blocked Process Threshold | 0 | 5-10 | If > 0, the engine raises the blocked_process_report event for each task blocked for N seconds. Nothing is recorded by default: you need an Extended Events session, a trace or an alert to collect these reports |
| Boost SQL Server Priority | False | False | Raises the Windows priority of the sqlservr.exe process. Deprecated option, do not turn it on |
The remote query timeout (Remote query timeout, 600 seconds by default) is not on this page, but on the “Connections” page, in the “Remote server connections” section.
T-SQL equivalent (advanced options, hence the first statement):
EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;
EXEC sp_configure 'optimize for ad hoc workloads', 1;
RECONFIGURE;
EXEC sp_configure 'blocked process threshold (s)', 5;
RECONFIGURE;
Configuring the model database
The model database is the template for every new database. Configure it properly:
-- Reasonable initial size and growth
ALTER DATABASE model MODIFY FILE
(NAME = modeldev, SIZE = 256MB, FILEGROWTH = 64MB);
ALTER DATABASE model MODIFY FILE
(NAME = modellog, SIZE = 128MB, FILEGROWTH = 64MB);
Why? By default, the
modelfiles are 8 MB and grow in 64 MB steps. TheFILEGROWTH = 64MBabove therefore keeps the default, and only the initial size changes. A database created at 8 MB grows again and again as soon as it fills up. On the log side, each growth adds VLFs (Virtual Log Files), and a large number of VLFs slows down recovery. Sizingmodelavoids these chains of growths.
SQL Server Configuration Manager
SQL Server Configuration Manager (SQLServerManager17.msc for SQL Server 2025) is the system tool for managing services, network protocols and client aliases.
Access: Configuration Manager is a snap-in for the MMC console, and does not always appear as an application in recent versions of Windows. Type
SQLServerManager17.mscin the Start menu, or opencompmgmt.msc(Computer Management), where it appears as a snap-in.
Structure of Configuration Manager
SQL Server Configuration Manager
├── SQL Server Services
│ ├── SQL Server (MSSQLSERVER) -- Database Engine
│ ├── SQL Server Agent (MSSQLSERVER) -- Job scheduler
│ ├── SQL Server Browser -- Instance discovery
│ ├── SQL Full-text Filter Daemon Launcher (MSSQLSERVER) -- Full-text search
│ └── SQL Server Integration Services -- SSIS (if installed)
├── SQL Server Network Configuration
│ └── Protocols for MSSQLSERVER
│ ├── Shared Memory
│ ├── Named Pipes
│ └── TCP/IP
└── SQL Server Native Client Configuration
├── Client Protocols
└── Aliases
SQL Server Native Client (SNAC) has not shipped with SQL Server since SQL Server 2022, nor with SSMS since version 19. For new development, Microsoft recommends the Microsoft ODBC Driver or the Microsoft OLE DB Driver for SQL Server.
SQL Server Services
Right-click a service → Properties:
“Log On” tab
| Option | Description |
|---|---|
| Built-in account | Local System, Local Service, Network Service |
| This account | Domain account or gMSA |
In production, always use a dedicated domain account or a gMSA. Never use
Local System, which has excessive rights on the machine.
“Service” tab
| Property | Description |
|---|---|
| Start Mode | Automatic / Manual / Disabled |
| Process ID | PID of the running process |
| Binary Path | Path of the sqlservr.exe executable |
“Startup Parameters” tab
Startup parameters of the engine:
| Parameter | Meaning |
|---|---|
-d | Path of the master.mdf file |
-l | Path of the mastlog.ldf file |
-e | Path of the error log file (ERRORLOG) |
You can add more parameters:
| Flag | Effect | When to use it |
|---|---|---|
-T3226 | Suppresses the messages for successful backups and restores from the error log and the system event log | Reduces the noise in the ERRORLOG with frequent backups |
Trace flag 1118, long added here for tempdb, has had no effect since SQL Server 2016: tempdb always allocates uniform extents, and the MIXED_PAGE_ALLOCATION option of ALTER DATABASE sets the behavior of the other databases.
SQL Server Network Configuration: protocols
Shared Memory
- Use: local connections only (client and server on the same machine)
- Configuration: no options. Enabled by default
- Production: leave it enabled for local SSMS connections and maintenance scripts
Named Pipes
- Use: LAN connections, mostly in legacy environments
- Configuration: pipe name (default:
\\.\pipe\sql\query) - Production: leave it disabled unless you have a specific need. On a new installation, Named Pipes is already disabled for network connections, whatever the edition. TCP/IP is preferable
TCP/IP
This is the main protocol for network connections. On a new installation, it is enabled in Enterprise, Standard and Evaluation, but disabled in Developer and Express: on those editions, enable it before looking for a firewall problem. Right-click → Properties:
“Protocol” tab:
| Setting | Description | Recommendation |
|---|---|---|
| Enabled | Enables/disables TCP/IP | ✅ Yes |
| Keep Alive | Interval (ms) for keep-alive packets | 30000 (default) |
| Listen All | Listen on every IP address | Yes in most cases |
“IP Addresses” tab:
Each network interface is listed (IP1, IP2, and so on), plus an IPAll section:
| Setting | Description | Recommendation |
|---|---|---|
| TCP Dynamic Ports | Port assigned dynamically at startup | Leave this field empty for a fixed port. A named instance has 0 here by default (dynamic ports): clear that 0 before entering a fixed port |
| TCP Port | Static port | 1433 for the default instance |
Best practice in production:
- Default instance: port 1433 (fixed)
- Named instance: assign a custom static port (for example 14330) instead of a dynamic port
- Create a Windows Firewall rule to allow the chosen port
Firewall configuration with PowerShell:
New-NetFirewallRule -DisplayName "SQL Server 2025" `
-Direction Inbound -Protocol TCP -LocalPort 1433 `
-Action Allow -Profile Domain
# For SQL Server Browser (UDP 1434): named instances only
New-NetFirewallRule -DisplayName "SQL Server Browser" `
-Direction Inbound -Protocol UDP -LocalPort 1434 `
-Action Allow -Profile Domain
Important: after any change to the network protocols, you must restart the SQL Server service for the changes to take effect.
SQL Native Client Configuration
Client Protocols
Order in which the client tries the protocols:
- Shared Memory (for a local connection)
- TCP/IP
- Named Pipes
You can change the order or disable a protocol through right-click → Properties on the Client Protocols node.
.NET SqlClient does not read this setting: it always tries TCP, then Named Pipes, and that order cannot be changed.
Aliases
Since SQL Server 2022, Configuration Manager no longer lets you create aliases. Microsoft points to the SQL Server Client Network Utility (cliconfg.exe). An alias remains a client-side configuration: every machine that uses it must carry the same definition.
Aliases create alternative connection names that point to a specific server and port. Useful to:
- Change servers without editing the applications’ connection strings
- Use a logical name (
SQL-PROD) instead of a technical name (SRV-SQL-PRD-01\INST01,14330)
| Field | Example |
|---|---|
| Alias Name | SQL-PROD |
| Protocol | TCP/IP |
| Server | SRV-SQL-PRD-01 |
| Port No | 14330 |
Post-installation checks
Run these T-SQL queries to validate the configuration:
-- 1. Version and edition
SELECT @@VERSION;
SELECT SERVERPROPERTY('ProductVersion') AS Version,
SERVERPROPERTY('Edition') AS Edition,
SERVERPROPERTY('ProductUpdateLevel') AS CU, -- no more service packs: CU level
SERVERPROPERTY('Collation') AS Collation;
-- 2. Memory configuration
SELECT name, value_in_use
FROM sys.configurations
WHERE name IN ('max server memory (MB)', 'min server memory (MB)');
-- 3. MAXDOP and Cost Threshold
SELECT name, value_in_use
FROM sys.configurations
WHERE name IN ('max degree of parallelism', 'cost threshold for parallelism');
-- 4. Optimize for Ad hoc Workloads
SELECT name, value_in_use
FROM sys.configurations
WHERE name = 'optimize for ad hoc workloads';
-- 5. TempDB: number of files, startup sizes and growth
-- (sys.master_files gives the startup size; tempdb.sys.database_files the current size)
SELECT name, physical_name, size * 8 / 1024 AS [Size_MB],
CASE WHEN is_percent_growth = 1
THEN CAST(growth AS varchar(10)) + ' %'
ELSE CAST(growth * 8 / 1024 AS varchar(10)) + ' MB'
END AS Growth
FROM sys.master_files
WHERE database_id = DB_ID('tempdb');
-- 6. Backup compression
SELECT name, value_in_use
FROM sys.configurations
WHERE name = 'backup compression default';
Overview of the post-installation architecture
graph LR
subgraph "Windows Server"
OS["OS + 4 GB RAM reserved"]
FW["Windows Firewall<br/>Port 1433 TCP"]
end
subgraph "SQL Server 2025"
ENG["Database Engine<br/>(sqlservr.exe)"]
AGT["SQL Server Agent<br/>(sqlagent.exe)"]
BRW["SQL Server Browser<br/>(sqlbrowser.exe)"]
end
subgraph "Storage"
D["D:\ Binaries"]
E["E:\ Data (.mdf/.ndf)"]
F["F:\ Logs (.ldf)"]
G["G:\ TempDB"]
H["H:\ Backups (.bak)"]
end
subgraph "Protocols"
SM["Shared Memory"]
TCP["TCP/IP :1433"]
NP["Named Pipes"]
end
ENG --> D
ENG --> E
ENG --> F
ENG --> G
ENG --> H
ENG --> SM
ENG --> TCP
ENG --> NP
TCP --> FW
AGT --> ENG
BRW --> |UDP 1434| FWProduction configuration checklist
graph TD
A[Installation finished] --> B{Max Server Memory set?}
B -->|No| B1[Set it now]
B -->|Yes| C{MAXDOP set?}
C -->|No| C1[Set it from the NUMA layout]
C -->|Yes| D{Cost Threshold ≥ 25?}
D -->|No| D1[Raise it to 25-50]
D -->|Yes| E{TempDB: 1 file per logical core, 8 at most?}
E -->|No| E1[Add files]
E -->|Yes| F{Instant File Init enabled?}
F -->|No| F1[Grant Perform volume maintenance tasks in secpol.msc]
F -->|Yes| G{Backups configured?}
G -->|No| G1[Set up a maintenance plan]
G -->|Yes| H[✅ Ready for production]Summary of the essential sp_configure commands
-- Show the advanced options
EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;
-- Memory
EXEC sp_configure 'max server memory (MB)', 28672;
RECONFIGURE;
-- Parallelism
EXEC sp_configure 'max degree of parallelism', 8;
RECONFIGURE;
EXEC sp_configure 'cost threshold for parallelism', 50;
RECONFIGURE;
-- Plan cache optimization
EXEC sp_configure 'optimize for ad hoc workloads', 1;
RECONFIGURE;
-- Backup compression
EXEC sp_configure 'backup compression default', 1;
RECONFIGURE;
-- Blocked process threshold (monitoring)
EXEC sp_configure 'blocked process threshold (s)', 5;
RECONFIGURE;
-- Final check
SELECT name, value_in_use
FROM sys.configurations
WHERE name IN (
'max server memory (MB)',
'min server memory (MB)',
'max degree of parallelism',
'cost threshold for parallelism',
'optimize for ad hoc workloads',
'backup compression default',
'blocked process threshold (s)'
)
ORDER BY name;
-- Hide the advanced options again (the setting applies to every user)
EXEC sp_configure 'show advanced options', 0;
RECONFIGURE;