powershelldba.de · Uwe Janke

SQL Server 2025 Configuration Options: New, Changed and Obsolete

Every upgrade brings a handful of new sp_configure options, and almost nobody removes the old ones. I diffed sys.configurations and sys.database_scoped_configurations between SQL Server 2022 and 2025, then set every interesting option on a live 2025 instance to see what actually happens. The result: 10 new server options, 6 new database scoped options, one removed option that breaks deployment scripts, a list of settings that are dead but still accept values, and one RECONFIGURE trap that silently blocks all later configuration changes.

Test setup: SQL Server 2022 RTM-CU26 (16.0.4265.3) and SQL Server 2025 RTM-CU7 (17.0.4065.4), both Developer Edition in Linux containers with default settings. Every list, count, default and error message in this article was read from these two instances. A few options behave differently on Windows (marked below); where Linux rejected an option, I say so instead of guessing the Windows behavior. Both instances were reset to defaults after the tests.

The Diff at a Glance

Catalog viewSQL 2022 CU26SQL 2025 CU7NewRemovedChanged
sys.configurations971071001 (value range)
sys.database_scoped_configurations3540611 (default)

Two things stand out. First, Microsoft removed nothing at server level. Options for features that were discontinued years ago are still there and still accept values. Second, the one removal at database level, DW_COMPATIBILITY_LEVEL, is a hard syntax error on 2025. More on both below.

The 10 New Server Options

All defaults below are the values a fresh 2025 CU7 instance reports. "Static" means the change only becomes active after a service restart (is_dynamic = 0), so value and value_in_use differ until then.

OptionDefaultRangeTypeWhat it controls
external rest endpoint enabled00-1dynamicAllows sp_invoke_external_rest_endpoint. Prerequisite for calling REST and AI endpoints from T-SQL.
external AI runtimes enabled00-1dynamicAllows external AI runtimes for the new AI features (for example a locally hosted model runtime used by CREATE EXTERNAL MODEL).
allow server scoped db credentials00-1dynamicLets database scoped credentials use the server's managed identity (Azure Arc scenario).
availability group commit time (ms)00-10dynamic, advancedGroup commit delay for AG log blocks. 0 means the classic 10 ms. Lower values reduce commit latency on synchronous replicas, at the cost of more and smaller log blocks.
max UCS send boxcars256256-2048static, advancedAG transport (UCS): how many message batches can be in flight to a secondary.
ADR cleaner lock timeout (s)51-32767dynamic, advancedLock timeout of the Accelerated Database Recovery version cleaner.
SLOG memory quota (%)751-100dynamic, advancedMemory quota for the ADR secondary log (sLog).
max lock manager cache memory (%)2020-60static, advancedUpper limit of the lock manager cache as a percentage of SQLOS committed memory.
tiered memory enabled00-1static, advancedTiered memory support. On CU7 Developer on Linux, setting it fails with Cannot configure tiered memory for this edition of SQL Server.
max server tiered memory (MB)21474836470-2147483647static, advancedUpper limit for tiered memory, companion to the option above.

Which of These Matter on Day One

One Changed Option: backup compression algorithm

The maximum of backup compression algorithm went from 2 to 3. Value 3 is ZSTD, the new compression algorithm in SQL Server 2025. Both the server default and the explicit syntax work on 2025:

EXEC sp_configure 'backup compression algorithm', 3;  -- 3 = ZSTD
RECONFIGURE;

BACKUP DATABASE MyDb TO DISK = N'...\MyDb.bak'
WITH INIT, COMPRESSION (ALGORITHM = ZSTD);
-- msdb.dbo.backupset.compression_algorithm = 'ZSTD'

The same BACKUP statement on 2022 fails with Incorrect syntax near 'ZSTD'. If you share one backup script between both versions, drive the algorithm through the server default instead of hard-coding it in the statement.

Database Scoped Configurations

Six New Options

OptionDefaultMeaning
OPTIONAL_PARAMETER_OPTIMIZATIONONOPPO: separate plan variants for col = @p OR @p IS NULL patterns. Needs compatibility level 170.
OPTIMIZED_SP_EXECUTESQLOFFCompiles a statement once instead of in every session at the same time (compile storms).
CE_FEEDBACK_FOR_EXPRESSIONSONCardinality estimation feedback extended to expressions.
READABLE_SECONDARY_TEMPORARY_STATS_AUTO_CREATEONTemporary statistics may be created on readable AG secondaries.
READABLE_SECONDARY_TEMPORARY_STATS_AUTO_UPDATEONTemporary statistics may be updated on readable AG secondaries.
FULLTEXT_INDEX_VERSION2Full-text index format version used for new full-text indexes.

OPPO and optimized sp_executesql are measured in detail in Optimized Locking, Optimized sp_executesql and OPPO, Tested.

One Changed Default: DOP_FEEDBACK

DOP_FEEDBACK is OFF by default on 2022 and ON by default on 2025. Degree-of-parallelism feedback lets the engine lower the DOP of a repeatedly executed query if parallelism does not pay off. It requires Query Store and compatibility level 160 or higher, so after an in-place upgrade it is active in every database that already runs at level 160. If you see plans running with a lower DOP than MAXDOP allows, this is the first thing to check.

One Removal That Breaks Scripts: DW_COMPATIBILITY_LEVEL

ALTER DATABASE SCOPED CONFIGURATION SET DW_COMPATIBILITY_LEVEL = 0;
-- SQL Server 2022: succeeds
-- SQL Server 2025: Msg 102, Incorrect syntax near 'DW_COMPATIBILITY_LEVEL'.

The option was meant for Azure Synapse and never did anything on a boxed SQL Server, but deployment scripts that script out every scoped configuration may contain it. On 2025 that statement is a syntax error and the deployment stops. Search your pipelines and scripts for it before the first deployment against a 2025 target.

Also worth knowing: on 2025, tempdb and every newly created database run at compatibility level 170, so new databases get OPPO and the other level-170 behavior without anyone deciding it.

Zombie Options: Dead Features, Live Settings

This is the part that surprised me most. Nothing was removed from sys.configurations, including options for features Microsoft discontinued years ago. I set each of them on 2025 CU7 and looked at value_in_use afterwards:

OptionStatus of the featureBehavior on 2025 CU7
remote data archiveStretch Database, discontinued July 2024Accepted, value_in_use = 1. Does nothing useful.
precompute rankDiscontinued since SQL Server 2008Accepted, value_in_use = 1.
hadoop connectivityHadoop external data sources unsupported since 2022Still listed. On Linux: cannot be enabled in this edition.
Data processed daily/weekly/monthly limit in TBSynapse serverless limits, no meaning on a boxed serverAccepted and active.
SMO and DMO XPsDMO is long gone, SMO still uses itDefault 1. Do not disable, SSMS and SMO-based tools depend on it.
open objectsKept for backward compatibility onlyAccepts 500, stays pending (value_in_use = 0).
lightweight poolingFiber mode, not recommendedAccepted, static. Conflicts with CLR.
priority boostDeprecatedOn Linux rejected: not supported by this edition.
set working set sizeNo effect for many versionsOn Linux rejected: not supported by this edition.
c2 audit mode, remote proc transDeprecatedStill present.

Why this matters: configuration baselines and compliance scans compare values. An instance can carry remote data archive = 1 from a 2016 build script, migrate through three versions, and still show up as "configured" in every inventory. None of these is dangerous by itself, but they are noise in audits, and they hide the settings that do matter. Clean them up before the migration so the 2025 baseline starts clean.

The RECONFIGURE Trap: allow updates

allow updates has had no function since SQL Server 2005. It is still there, and it is the one zombie that actively causes damage:

EXEC sp_configure 'allow updates', 1;
RECONFIGURE;
-- Msg 5808: Ad hoc update to system catalogs is not supported.

-- later, someone runs a completely unrelated change:
EXEC sp_configure 'cost threshold for parallelism', 50;
RECONFIGURE;
-- Msg 5808: Ad hoc update to system catalogs is not supported.
Silent failure: after the first statement, value = 1 stays pending, and every later plain RECONFIGURE on the instance fails with the same error. In the test, cost threshold for parallelism stayed at value_in_use = 5 while value showed 50. If the change runs from a script or a job that does not stop on errors (sqlcmd without -b, for example), sp_configure output looks changed and the setting is not active.

RECONFIGURE WITH OVERRIDE pushes everything through, including allow updates = 1, which still has no effect. The clean fix is to put the value back:

EXEC sp_configure 'allow updates', 0;
RECONFIGURE;

This is not new in 2025, but 2025 did not fix it either, and migration projects are exactly where old build scripts get replayed.

Deprecation Counters: Two New Entries

The Deprecated Features performance counter object grew from 255 to 257 instances. The two new ones:

Check which deprecated features your workload actually uses, on the old server, before the upgrade:

SELECT RTRIM(instance_name) AS feature, cntr_value AS uses_since_startup
FROM   sys.dm_os_performance_counters
WHERE  object_name LIKE '%Deprecated Features%'
  AND  cntr_value > 0
ORDER BY cntr_value DESC;

Pre-Migration Check Script

Run this on the source instance. It returns pending values (changed but not active), zombie options that are not at their default, and the scoped configuration that will break on 2025:

-- 1. Pending: value differs from value_in_use (restart needed or failed RECONFIGURE)
SELECT name, value, value_in_use, is_dynamic
FROM   sys.configurations
WHERE  value <> value_in_use;

-- 2. Zombie options that are not at their default
SELECT name, value, value_in_use
FROM   sys.configurations
WHERE  (name = 'allow updates'        AND value <> 0)
   OR  (name = 'remote data archive'  AND value <> 0)
   OR  (name = 'precompute rank'      AND value <> 0)
   OR  (name = 'hadoop connectivity'  AND value <> 0)
   OR  (name = 'open objects'         AND value <> 0)
   OR  (name = 'lightweight pooling'  AND value <> 0)
   OR  (name = 'priority boost'       AND value <> 0)
   OR  (name = 'set working set size' AND value <> 0)
   OR  (name = 'c2 audit mode'        AND value <> 0)
   OR  (name = 'remote proc trans'    AND value <> 0)
   OR  (name = 'SMO and DMO XPs'      AND value <> 1);

-- 3. Scoped configuration that is a syntax error on 2025 (run per database)
SELECT DB_NAME() AS db, name, value
FROM   sys.database_scoped_configurations
WHERE  name = 'DW_COMPATIBILITY_LEVEL' AND is_value_default = 0;

A min server memory (MB) row in query 1 is normal: SQL Server reports a small internal value_in_use (16 on the test instance) while the configured value is 0.

For a full side-by-side between the old and the new instance, dbatools does it in a few lines. Compare-sqmServerConfiguration from sqmSQLTool returns only the differences, and Export-sqmServerConfiguration keeps a JSON snapshot of the old instance for the migration record.

$old = Get-DbaSpConfigure -SqlInstance SQL2022 | Select-Object Name, ConfiguredValue
$new = Get-DbaSpConfigure -SqlInstance SQL2025 | Select-Object Name, ConfiguredValue
Compare-Object $old $new -Property Name, ConfiguredValue |
    Sort-Object Name, SideIndicator

New options appear only with the => side indicator; values that differ between the two instances appear on both sides.

Checklist for the 2025 Baseline

  1. Reset the zombies on the source before migration (query 2). Especially allow updates.
  2. Remove DW_COMPATIBILITY_LEVEL from deployment scripts.
  3. Add the three new external/AI switches to the hardening baseline with value 0 and to your audit or policy checks.
  4. Decide on DOP_FEEDBACK deliberately: it is now on by default for databases at level 160 and above.
  5. Leave the new engine limits alone (boxcars, ADR, sLog, lock manager cache, tiered memory) unless you have a measured reason.
  6. Consider ZSTD as backup compression default, after comparing backup time, size and CPU against your current algorithm on real data.
  7. Run query 1 after every change window: a pending value is either a restart you forgot or a RECONFIGURE that failed.

For the migration itself, see Migration to SQL Server 2025: Risks, Issues, and Safe Approach, and for the overall feature picture SQL Server 2025: What's New for Developers and DBAs.

The Bottom Line

SQL Server 2025 adds ten server options, and only four of them deserve attention on day one: the three switches that open the database to external endpoints and AI runtimes, and the AG commit time. The rest are engine limits for Microsoft Support. The more useful work is on the other side: nothing old was removed, so dead options for Stretch, Hadoop and full-text ranking keep living in your configuration, and allow updates can still quietly block every RECONFIGURE on the instance. A migration is the one time someone looks at all of these settings anyway. Use it to start the 2025 instance with a baseline that only contains settings that do something.

← Back to Blog