Why SQL Server RTM Diffs Do Not Match CU Diffs

You run a careful version diff, write down the removed objects, and then patch the test instance. A few names move. The two inventories produce different results because they came from different builds.

A woman DBA circles a difference between two photographs of the same building, one taken on opening day and one taken after later changes.

This post is part of the Undocumented Changes in SQL Server 2022 and 2025 series. The contents page lists every part in order.

I saw this in my SQL Server 2025 work. The removed-objects post used SQL Server 2025 CU9 and linked back to the post that surfaced the RTM problem. The method came from the first post in this series. This post examines the differences caused by the patch level.

CU means cumulative update, a servicing release after the base product version. RTM means release to manufacturing, the initial release line. Microsoft lists SQL Server 2025 CU9 as build 17.0.5005.3, released September 15, 2026. The same build page lists GDR build 17.0.1135.8 in the SQL Server 2025 General Distribution Release section, released September 8, 2026.[1] My RTM inventory file did not record the build, so I am using 17.0.1135.8 RTM+GDR from my series notes.

For this post, I compared the SQL Server 2025 RTM inventory with the SQL Server 2025 CU9 inventory. I also compared SQL Server 2022 CU25 to each 2025 build. The first comparison tells me what changed inside the 2025 line. The second tells me how many 2022-to-2025 findings flip when the target build changes.

RTM to CU9 is not a no-op

This table shows the categories I discuss below, using item names as keys inside each category. CU9 also adds one spinlock and four Extended Events maps, and changes three maps. A changed object hash means the object name exists in both inventories, but the hash of its module definition changed.

Category New at CU9 Removed by CU9 Changed detail
System objects 21 4 0
Changed object hashes 17 4 75
Columns 94 54 0
Messages 80 3 54
Wait types 1 0 0
Extended Events 3 0 3
Configuration options 1 0 0

Those are not all user-facing features. Some are internal names. An RTM inventory does not answer the same question as an inventory from a patched build.

The Linux dynamic management view (DMV) names are the easiest example. A DMV is a system view that exposes server or database state. SQL Server 2025 RTM has sys.dm_pal_cpu_stats, sys.dm_pal_disk_stats, sys.dm_pal_net_stats and sys.dm_pal_vm_stats. SQL Server 2025 CU9 has sys.dm_os_linux_cpu_stats, sys.dm_os_linux_disk_stats, sys.dm_os_linux_net_stats and sys.dm_os_linux_vm_stats instead.

Microsoft’s SQL Server 2025 on Linux page lists the four the sys.dm_os_linux_ views DMVs under SQL Server 2025 CU1.[2] The sys.dm_os_linux_cpu_stats reference page also says it returns Linux CPU statistics in SQL Server 2025 CU1 and later.[3] The documented CU1 availability matches the CU9 inventory. If I diff SQL Server 2022 against 2025 RTM, the Linux DMVs look removed and the PAL names look new. If I diff against CU9, that finding disappears.

sys.sp_reload_mssqlconf shows another object whose presence depends on the SQL Server build. It is present in SQL Server 2022 CU25 and SQL Server 2025 CU9, but absent from the 2025 RTM inventory. Microsoft documents it as the way to reload mssql.conf without restarting the service in SQL Server 2022 CU23 and later, and SQL Server 2025 CU3 and later.[4]

The configuration option max lock manager cache memory (%) moved the other way. It is absent from 2025 RTM and present in CU9. Microsoft documents that option as available in SQL Server 2025 CU5 and later.[5]

The 2022-to-2025 answer changes

These counts compare SQL Server 2022 CU25 with two SQL Server 2025 targets. The flip columns count names that appear in only one target diff.

Category New vs RTM New vs CU9 New-name flips Removed vs RTM Removed vs CU9 Removed-name flips
System objects 148 159 19 21 15 6
Columns 854 840 94 107 53 54
Messages 1,155 1,230 79 280 278 4
Wait types 134 135 1 8 8 0
Extended Events 473 476 3 20 20 0
Configuration options 9 10 1 0 0 0

The object flips are concrete. Against RTM, the 2022-to-2025 diff says the four the sys.dm_os_linux_ views DMVs, sys.sp_MShelp_repl_connection_string_key and sys.sp_reload_mssqlconf were removed. Against CU9, none of those six names are removed.

Against RTM, the 2022-to-2025 diff says the four the sys.dm_pal_ views host-stat views are new. Against CU9, those four names are gone, and the CU9-only new-object set includes change event stream procedures, sys.sp_mi_dag_repair, sys.sp_multidb_milink and sys.sp_repl_get_azure_storage_access_token.

The column results show the same RTM-to-CU9 naming change, but in more rows. The RTM diff reports 107 removed columns. The CU9 diff reports 53. The difference is mostly the PAL-to-Linux DMV naming round trip. The result comes from different object names in the two inventories. The object names changed between the two 2025 inventories.

The message results include new IDs, removed IDs and changed message text. CU9 added 80 message IDs compared with RTM, removed 3 and changed 54 existing message texts. As a result, a 2022-to-2025 message diff has 79 new-name flips and 4 removed-name flips. If a tool watches for specific message IDs, RTM and CU9 can produce different review lists.

Extended Events (XE) is SQL Server’s event collection framework.[6] CU9 adds the wait type AUDIT_LOGINCACHE_STATIC_LOCK. CU9 also adds three XE events compared with RTM: sqlserver.deferred_drop_enqueued, sqlserver.trigger_execution_blocked_on_backend and ucs.ucs_sspi_auth_encryption_info.

What I will do next time

For my own version diffs, I will not use an RTM build unless the upgrade target is RTM. My checklist is short:

  1. Patch both sides to a recent cumulative update before collecting inventory.
  2. Record the full build number beside every inventory file.
  3. Keep the RTM inventory only if it answers an RTM-specific question.
  4. Re-run the diff after patching, before writing upgrade checks from the first result.
  5. Treat a name change as a finding to investigate, not as proof that a feature was removed.

RTM data can be correct for an RTM build. An RTM inventory describes the RTM build, not the later CU build that I plan to review. If the upgrade target is SQL Server 2025 CU9, I use the CU9 inventory for the upgrade review.

If you have seen a patch-level system object change affect upgrade testing, tell me on Bluesky or LinkedIn, and I’ll update the notes.

References

  1. SQL Server 2025 build versions (KB5005684) - Microsoft Learn. Lists SQL Server 2025 CU and GDR build numbers, including CU9 build 17.0.5005.3 and GDR build 17.0.1135.8. ↩
  2. What’s New for SQL Server 2025 on Linux - Microsoft Learn. Lists the four the sys.dm_os_linux_ views DMVs under SQL Server 2025 CU1. ↩
  3. sys.dm_os_linux_cpu_stats (Transact-SQL) - Microsoft Learn. States that the DMV returns Linux CPU statistics in SQL Server 2025 CU1 and later. ↩
  4. Use Custom Password Policy for SQL Logins on Linux - Microsoft Learn. Shows sp_reload_mssqlconf and states the SQL Server 2022 CU23 and SQL Server 2025 CU3 minimum versions for reload without restart. ↩
  5. Server Configuration: max lock manager cache memory (%) - Microsoft Learn. States that the option is available in SQL Server 2025 CU5 and later. ↩
  6. Extended Events Overview - Microsoft Learn. Defines Extended Events as SQL Server’s event collection and troubleshooting framework. ↩