System Objects Removed in SQL Server 2025
You upgrade a test instance, run the same monitoring query, and one column is gone. That is the kind of removal that does not look like a feature removal. I care about that because it can break a report during upgrade testing or after cutover.

For this post, I compared SQL Server 2022 CU25 with SQL Server 2025 CU9. CU means cumulative update. The SQL Server 2022 instance is Enterprise, and the SQL Server 2025 instance is Enterprise Developer. This post is part 7 in the SQL Server 2025 branch of the series. It follows the changed system procedures post. The method started in the first post on SQL Server 2025. The overall series started with the first post in this series.
The removed-object list is smaller than the new-object list, but it points to checks I can run before an upgrade. A missing object can break code at compile time. A missing column can break monitoring code that nobody remembered was querying a dynamic management view (DMV). A DMV is a system view that exposes server or database state.
The 2022 to 2025 CU9 diff has 15 removed system objects, 53 removed columns, 8 removed wait types, 20 removed Extended Events (XE) events, 8 removed XE maps, 278 removed messages and 9 removed object hashes. XE is SQL Server’s event collection framework.[1]
The removed objects
These are the 15 objects present in the 2022 inventory and absent from the 2025 CU9 inventory:
| Object | Type |
|---|---|
sys.dm_dw_locks |
View |
sys.dm_pal_spinlock_stats |
View |
sys.dm_pal_wait_stats |
View |
sys.dm_toad_tuning_zones |
View |
sys.dm_toad_work_item_handlers |
View |
sys.dm_toad_work_items |
View |
sys.dm_xcs_enumerate_blobdirectory |
Inline table-valued function |
sys.fn_xcs_get_file_rowcount |
Inline table-valued function |
sys.sp_dw_physical_manifest_file_table_insert |
Extended stored procedure |
sys.sp_get_fido_lock |
Extended stored procedure |
sys.sp_get_fido_lock_batch |
Extended stored procedure |
sys.sp_md_discovery_stats_staleness_detection |
Extended stored procedure |
sys.sp_MShelp_get_server_id |
Stored procedure |
sys.sp_release_all_fido_locks |
Extended stored procedure |
sys.sp_release_fido_lock |
Extended stored procedure |
I searched the SQL Server, Azure and Fabric documentation source repositories for each object name as a whole word and fixed string. I found no matches for any of the 15 names. That does not prove that no documentation exists, but it means I could not find a Microsoft Learn source mention with that method on 2026-09-26.[2]
The FIDO procedures connect directly to the SQL Server 2022 results. I covered their appearance in the SQL Server 2022 FIDO post. I still have not found a public source that expands the FIDO name in this SQL Server context, so I am not expanding it here.
The DMV names also connect to the earlier SQL Server 2022 DMV post. In 2022, I treated sys.dm_dw_locks, the TOAD views, and the XCS objects as likely internal or cloud-related. The names did not match ordinary boxed-product features. In 2025 CU9, they are not in the inventory.
RTM and CU9 have different inventories
RTM means release to manufacturing, the initial release build. Against the 2025 RTM inventory, the 2022 diff reports 21 removed objects. Against 2025 CU9, it reports 15. That difference is large enough to change the list I check before an upgrade.
The four sys.dm_os_linux_* DMVs are absent at RTM and present at CU9: 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. Microsoft documents those four Linux-specific DMVs as SQL Server 2025 CU1 additions.[3] The individual sys.dm_os_linux_cpu_stats page also says it applies to SQL Server 2025 on Linux, CU1 and later.[4]
sys.sp_reload_mssqlconf is also absent at 2025 RTM and present at CU9. 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.[5]
The PAL names show the opposite pattern. At RTM, the 2025 inventory has sys.dm_pal_cpu_stats, sys.dm_pal_disk_stats, sys.dm_pal_net_stats and sys.dm_pal_vm_stats. At CU9, the inventory has the sys.dm_os_linux_* names instead. A diff against RTM gives different upgrade results than a diff against a patched build.
Removed columns can break monitoring queries
The removed columns are concentrated in 11 objects. Some of those objects were removed entirely, so their columns are gone with the object. For column removals, I would check documented views and still-present views first.
| Object | Removed columns | Practical note |
|---|---|---|
sys.dm_database_backups |
2 | Documented for Azure SQL Database and Fabric, not SQL Server. The removed columns are database_guid and physical_server_name.[6] |
sys.dm_database_external_governance_sync_state |
1 | I found no Learn page for the view. The removed column is current_blob_references. |
sys.dm_external_governance_sync_state |
1 | I found no Learn page for the view. The removed column is current_blob_references. |
sys.dm_dw_locks |
12 | The whole view was removed. |
sys.dm_pal_spinlock_stats |
6 | The whole view was removed. |
sys.dm_pal_wait_stats |
4 | The whole view was removed. |
sys.dm_toad_tuning_zones |
6 | The whole view was removed. |
sys.dm_toad_work_item_handlers |
6 | The whole view was removed. |
sys.dm_toad_work_items |
7 | The whole view was removed. |
sys.dm_xcs_enumerate_blobdirectory |
7 | The whole function was removed. |
sys.fn_xcs_get_file_rowcount |
1 | The whole function was removed. |
The two governance views look related to a documented feature removal, but I did not find either view name on Learn. Microsoft says Purview access policies are discontinued in SQL Server 2025, along with Data Quality Services (DQS), Master Data Services (MDS) and Synapse Link.[7] I did not find the two governance view names on Learn, so I am not treating the column removals as documented object changes. They are in the same area as the documented Purview access policy removal.
The SQL Server 2025 deprecation page is much shorter. It lists Hot add CPU and lightweight pooling as deprecated in SQL Server 2025, not the objects in this diff.[8]
Removed wait types and XE events
Eight wait types disappeared from the 2025 CU9 inventory:
| Wait type | Documentation status in my check |
|---|---|
TIMEPRIV_TIMEPERIOD |
Described on the sys.dm_os_wait_stats page |
HTDELETE |
Described on the sys.dm_os_wait_stats page |
HTBUILD |
Described on the sys.dm_os_wait_stats page |
PWAIT_PREEMPTIVE_AUDIT_ACCESS_WINDOWSLOG |
Listed as internal use only |
BATCH_MODE_CONCAT_CHILD_SYNC |
Not listed on the wait statistics page |
HADR_LOGCONSUMER_RESET |
Not listed on the wait statistics page |
MISE_PREFETCH_OPEN_ID_CONFIGURATION |
Not listed on the wait statistics page |
COLUMNSTORE_TRANSCODER_CREATE |
Not listed on the wait statistics page |
The first three were documented on the wait statistics page, but they are absent from the SQL Server 2025 CU9 inventory. The sys.dm_os_wait_stats page describes TIMEPRIV_TIMEPERIOD, HTDELETE and HTBUILD, and lists PWAIT_PREEMPTIVE_AUDIT_ACCESS_WINDOWSLOG as internal use only.[9]
The 20 removed XE events are mostly clustered by name: four delta_migration_* events, four rbpex_* events, four FIDO events, three VDW events, two XIO lease events, one metadata discovery event, one Polaris rejected rows event and one FIDO cleanup event in the XeSqlFido package. The full list is:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
sqlserver.delta_migration_failure sqlserver.delta_migration_information sqlserver.delta_migration_task_end sqlserver.delta_migration_task_start sqlserver.fido_glm_rowset_operation sqlserver.fido_lock_manager_message sqlserver.fido_rowgroup_lineage sqlserver.md_discovery_staleness_detection sqlserver.polaris_rejected_rows_aggregations sqlserver.rbpex_incremental_grow sqlserver.rbpex_physical_grow sqlserver.rbpex_physical_shrink sqlserver.rbpex_seed_thread_start sqlserver.rbpex_shrinkmgr_grow sqlserver.vdw_annotations sqlserver.vdw_sp_drop_storage_location sqlserver.vdw_sql_statement_fido_transaction sqlserver.xio_wait_lease_release sqlserver.xio_wait_lease_release_sensitive XeSqlFido.fido_metadata_cleanup |
If an event session references one of those names, I would test the session definition before an upgrade. This inventory does not prove that the event ever fired in SQL Server 2022. It only proves that the event metadata existed in that build and is absent from the 2025 CU9 inventory.
Removed messages are mostly clustered
The diff has 278 removed messages. Most are in two ranges: 113 messages in the 28000 range and 106 in the 29000 range. Another 26 are in the 30000 range. Many of those message texts refer to configuration managers, matrix bricks and related internal coordination terms.
| Range | Removed messages |
|---|---|
| 0-999 | 2 |
| 12000-12999 | 4 |
| 13000-13999 | 11 |
| 22000-22999 | 1 |
| 23000-23999 | 1 |
| 24000-24999 | 3 |
| 28000-28999 | 113 |
| 29000-29999 | 106 |
| 30000-30999 | 26 |
| 34000-34999 | 1 |
| 35000-35999 | 2 |
| 36000-36999 | 1 |
| 41000-41999 | 5 |
| 49000-49999 | 2 |
These examples show the kinds of removed messages in the set:
|
1 2 3 4 5 |
28401 sev 16: Feature or option '%ls' is not available. Please consult Books Online for more information on this feature or option. 29221 sev 10: Configuration manager enlistment stopped. 30118 sev 16: Invalid server name provided to configure a matrix brick. 34901 sev 16: The global lock manager encountered a severe failure. 49540 sev 16: The specified DBCC command is not supported on this platform. |
I check message removals after object and column removals, unless my tooling matches specific message numbers or message text. I still count messages because people can see them in errors, logs and monitoring.
What I check before an upgrade
For an upgrade review, I search monitoring code and XE session definitions for the removed object names, the two sys.dm_database_backups columns, and the 20 removed event names. I also run that search against code that collects wait statistics, even if it only filters known noise wait types.
The RTM-to-CU9 difference is the first thing I would account for when I use this diff. SQL Server 2025 RTM and SQL Server 2025 CU9 do not have the same system surface. If I build an upgrade checklist from RTM, a patched instance can already have a different system surface before the upgrade project starts.
Next, I am looking at versioned internal tables in SQL Server 2025.
If you have seen monitoring code fail because a system DMV changed shape, send me the example on Bluesky or LinkedIn, and I will update the notes.
References
- Extended Events Overview - Microsoft Learn. Defines Extended Events as SQL Server’s event collection and troubleshooting framework. ↩
- MicrosoftDocs/sql-docs, MicrosoftDocs/azure-docs and MicrosoftDocs/fabric-docs - GitHub. The Markdown source of Microsoft Learn for SQL Server, Azure and Fabric, searched with whole-word, fixed-string
git grepon 2026-09-26. The search results are my own. ↩ - What’s New for SQL Server 2025 on Linux - Microsoft Learn. Lists the four
sys.dm_os_linux_*DMVs as SQL Server 2025 CU1 additions. ↩ - sys.dm_os_linux_cpu_stats (Transact-SQL) - Microsoft Learn. States that the DMV applies to SQL Server 2025 on Linux, CU1 and later. ↩
- Use Custom Password Policy for SQL Logins on Linux - Microsoft Learn. Shows
sp_reload_mssqlconfand states the SQL Server 2022 CU23 and SQL Server 2025 CU3 minimum versions for reload without restart. ↩ - sys.dm_database_backups - Microsoft Learn. Documents the DMV for Azure SQL Database and SQL database in Fabric, with no SQL Server applicability listed. ↩
- Discontinued Database Engine Functionality - SQL Server - Microsoft Learn. Lists Data Quality Services, Master Data Services, Synapse Link and Purview access policies as discontinued in SQL Server 2025. ↩
- Deprecated Database Engine Features - SQL Server 2025 - Microsoft Learn. Lists Hot add CPU and lightweight pooling as deprecated in SQL Server 2025. ↩
- sys.dm_os_wait_stats (Transact-SQL) - Microsoft Learn. Source for the documented and internal-only status of the removed wait types. ↩