Introduction
I am going to maintain a list of Performance and Stability Fixes in SQL Server 2019 CU Builds, which is simply a curated list of the more important fixes and improvements in each SQL Server 2019 Cumulative Update. As of March 31, 2020, there have been four Cumulative Updates (CU) for SQL Server 2019. There were a large number of hotfixes in the first two cumulative updates (as you might expect). CU3 had a lower number of fixes and improvements. In contrast, CU4 had a higher number of fixes.
If you are running on SQL Server 2019, I really think you should be running the latest SQL Server 2019 Cumulative Update as soon as you can test and deploy it. Remember, there are not going to be any Service Packs for SQL Server 2017 and later, so you are going to want to get in the habit of testing and deploying SQL Server 2019 Cumulative Updates as they become available.

You can follow the KB article link below to see all of the CU builds for the SQL Server 2019.
Just as I have done for other versions of SQL Server, I decided to scan the hotfix list for all of the Cumulative Updates for SQL Server 2019, looking for performance and general reliability-related fixes for the SQL Server Database Engine. I came up with the list below, but this listing is completely arbitrary on my part. You may come up with a completely different list, based on what specific SQL Server 2019 features you are using.
Here are the fixes, by Cumulative Update, for SQL Server 2019:
SQL Server 2019 Cumulative Update 4
Build 15.0.4033.1, 36 Public Hotfixes
- FIX: Scalar UDF Inlining issues in SQL Server 2019
- FIX: Severe spinlock contention occurs in SQL Server 2019
- FIX: Access Violation occurs when you run query on computed columns in SQL Server
- FIX: Parallel sampled filtered statistics may cause incorrect histogram scaling in SQL Server 2016 and 2019
- FIX: Non-yielding Scheduler error may occur with Always On availability group in Microsoft SQL Server
- FIX: Missing log block may occur when you use Always On availability group in SQL Server
- FIX: Intermittent non-yielding scheduler occurs when memory-optimized database running under heavy I/O activities in SQL Server 2016 and 2019
- FIX: System or background task may fail when number of sessions reaches the maximum limit in SQL Server 2016 and 2019
- FIX: Non-yielding scheduler condition occurs with CONNECTION_MANAGER spinlock in SQL Server
- FIX: Non-yielding scheduler dump occurs in InterlockedCompareExchangePointer and SOS_RWLock in SQL Server 2016 and 2019
- FIX: Performance degradation occurs on PMEM devices with Hybrid Buffer Pool enabled in SQL Server 2019
- FIX: Slow query performance when using query predicates with UPPER, LOWER or RTRIM with default CE in SQL Server 2017 and 2019
- FIX: SQL Server may terminate due to lock conflicts during error message processing in SQL Server 2016 and 2019
SQL Server 2019 Cumulative Update 3
Build 15.0.4023.6, 11 Public Hotfixes
- FIX: .NET Framework DbDataAdapter.FillSchema method returns NULL on database with compatibility level 140 in SQL Server 2019 and 2017
- Improvement: Enable hybrid buffer pool read caching in SQL Server 2019
- Improvement: Size and retention policy are increased in default XEvent trace system_health in SQL Server 2019 and 2016
- FIX: Error occurs when you interact with SQL Server Agent in SQL Server 2019
SQL Server 2019 Cumulative Update 2
Build 15.0.4013.40, 85 Public Hotfixes
- FIX: SQL Server database remains in frozen I/O state indefinitely when backed up by VSS
- FIX: Exception error 3628 may occur when you run stored procedure in SQL Server
- FIX: UPDATE STATISTICS takes very long time to generate maintenance plan for large databases in SQL Server
- FIX: You may encounter a non-yielding scheduler condition when you run query with parallel batch-mode sort operator in SQL Server
- FIX: Unable to restore SQL Server 2012 databases on SQL Server 2016, 2017 or 2019 because of NCCI
- FIX: Error 8959 may occur on IAM page when you query sys.dm_db_index_physical_stats against partitioned columnstore table after partition switch in SQL Server
- FIX: Assertion error occurs when you use IDENT_CURRENT on view that has identity columns in SQL Server
- FIX: Access violation occurs when you use sys.dm_os_memory_objects in SQL Server
- FIX: Error 8601 occurs when you run a query with partition function in SQL Server
- FIX: Non-yielding scheduler issue occurs in SQL Server when you run an online build for an index that’s not partition-aligned
- FIX: CREATE INDEX with new CE reads the partition table and results in huge row count higher than the total table row count in SQL Server
- FIX: Unable to execute sys.dm_exec_requests when you install SQL Server 2019 or when you upgrade from prior versions of SQL Server
- Improvement: Fix incorrect memory page accounting that causes out-of-memory errors in SQL Server 2019
- FIX: Access violation occurs when you run DBCC CHECKTABLE against a table with Clustered Columnstore Index in SQL Server 2017 and 2019
- FIX: Logreader doesn’t execute when you upgrade from SQL Server 2017 to 2019
- FIX: SOS_BLOCKALLOCPARTIALLIST spin lock contention may occur when TF 834 is enabled in SQL Server 2019
- Improvement: Port additional two system tables in Tempdb Memory-Optimized Metatdata feature in SQL Server 2019
- FIX: Error due to explicit transaction isolation level hint when accessing Memory-Optimized Tempdb catalog views in SQL Server 2019
- FIX: Log shipping agent is not able to log history and error information to SQL Server 2019
- FIX: Severe contention on LOGCACHE_ACCESS spinlock in SQL Server 2019
- Improvement: Correct the floating point data type in SQL Server 2019
- FIX: Latest drivers fail to work with in-memory compiled queries in SQL Server 2019
- FIX: Passwords are masked in audit logs in SQL Server 2019
- FIX: Non-yielding scheduler condition occurs when you run batch mode query with multiple joins in SQL Server 2017 and 2019
- FIX: Exception occurs when you run UNION ALL+ORDER BY/MERGE UNION ALL queries on table that contains randomized encrypted data in SQL Server 2019
- Improvement: Restore database and add database to the AG in SQL Server 2019
- FIX: Concurrent PFS update in SQL Server 2019 may cause corruption of ADR
- FIX: Changes made using ALTER DATABASE…SQL Server 2019 fails to log changes in SQL Error log or raise database trigger
- FIX: Scalar UDF Inlining issues in SQL Server 2019
- FIX: Severe spinlock contention occurs in SQL Server 2019
- Improvement: Module and offset information is sent as output for dumps in SQL Server 2019
- FIX: Dumps occur because of OOM condition in SQL Server 2019
- FIX: Contained AG master database dependency creates deadlock during replica restart at certain condition in SQL Server 2019
- FIX: Query on Clustered Columnstore Index in SQL Server 2019 uses more CPU time than in SQL Server 201
- FIX: Error occurs in sp_xml_preparedocument where MSXMLSQL tries to access virtual address space beyond limit in SQL Server 2017 and 2019
SQL Server 2019 Cumulative Update 1
Build 15.0.4003.23, 62 Public Hotfixes
- FIX: Transaction log isn’t truncated on a single node Availability Group in SQL Server
- FIX: Orphaned CLR sessions cause blocking in SQL Server
- FIX: Access violation occurs when you run queries that involve PIVOT or UNPIVOT in SQL Server 2016, 2017 and 2019
- FIX: Incorrect results occur with index intersection on partitioned table with a clustered columnstore index in SQL Server
- FIX: Stack dump occurs when table type has a user-defined constraint in SQL Server 2016, 2017 and 2019
- FIX: Access violation occurs when a clone database verification fails in SQL Server 2016, 2017 and 2019
- FIX: Non-yielding scheduler error occurs when you run batch query with sort operation in SQL Server 2017 and 2019
- FIX: Database cannot recover and reports error 5243 in SQL Server
- FIX: “A system assertion check has failed” error when a procedure call is made from CLR with an OUTPUT large object argument
- FIX: Access violation occurs when you query sys.dm_db_persisted_sku_features DMV in SQL Server 2019
- FIX: Using temporary tables across multiple scopes may cause Error 213 or access violation in SQL Server 2019
- FIX: Assertion error when you run internal query in batch mode for populating full-text index on computed LOB in SQL Server 2019
- FIX: Access violation occurs when attempting to fetch the IAM page of the table in SQL Server 2019
- FIX: Restore fails when you try to restore compressed TDE backups prior to SQL Server 2016 SP2 CU4 on SQL Server 2016 SP2 CU8
- FIX: Worker stealing stops working when AG contains one or more encrypted databases in SQL Server 2019
- FIX: Access violation occurs when worker stealing is enabled and CPU capacity reaches maximal configured value in SQL Server 2019
- FIX: Error occurs when you try to install SQL Server 2019 on a low power CPU
- FIX: Error 8601 occurs when you run a query with partition function in SQL Server
- Improvement: Add new fields to latch_suspend_end Extended Event in SQL Server 2019
- Improvement: Execute Database upgrade scripts when Database state changes in SQL Server 2019
- Improvement: Corrupt statistics can be detected by using extended_logical_checks in SQL Server 2019
- FIX: Access violation occurs when you set database containment to NONE in SQL Server 2019
- Improvement: Update the hktempdb.dll version in SQL Server 2019
- FIX: Spurious lines may be added to the SQL Server error log at each initialization in SQL Server 2019
- FIX: Heap corruption occurs when ADR is disabled and aborted transactions are present in SQL Server 2019 database
Final Words
The reason that I put these lists together is that I want to convince more people to try to keep their SQL Server instances up to date with Cumulative Updates. If you do the proper testing, planning and preparation, I think the risks from installing a SQL Server Cumulative Update are quite low (despite the occasional issues that people run into).
If someone installs a Cumulative Update on a Production system the day it is released, after doing no testing whatsoever, and then run into problems (and don’t have a plan on how to recover), then I don’t have that much sympathy for them.
On the other hand, if you go through a thoughtful and thorough testing process, and you have a plan for how you will install the CU, and how you would recover if there were any problems, then you are much less likely to have any problems. You are also much more likely to avoid the issues that are fixed by all of the included fixes in the new build of SQL Server. As a data professional, you have done your job!
Finally, Microsoft has changed their official guidance about whether you should install SQL Server Cumulative Updates. As they say, “we now recommend ongoing, proactive installation of CU’s as they become available”.
6 thoughts on “Performance and Stability Fixes in SQL Server 2019 CU Builds”