As of November 13, 2018, there have been four Cumulative Updates (CU) for the Service Pack 2 branch of SQL Server 2016. There have been a large number of hotfixes in each of these cumulative updates. If you are running on the SQL Server 2016 SP2 branch (which you should be by now), I really think you should be running the latest SQL Server 2016 SP2 Cumulative Update.

Table 1 shows the SQL Server 2016 SP2 CU builds that have been released so far:

Build Description Release Date
13.0.5149 SP2 CU1 May 30, 2018
13.0.5153 SP2 CU2 July 16, 2018
13.0.5216 SP2 CU3 September 20, 2018
13.0.5233 SP2 CU4 November 13, 2018
     

Table 1: SQL Server 2016 SP2 CU Builds

You can follow the KB article link below to see all of the CU builds for the SQL Server 2016 RTM, SQL Server 2016 SP1 and SQL Server 2016 SP2 branches.

SQL Server 2016 Build Versions

Like I have done for other versions and branches of SQL Server, I decided to scan the hotfix list for all of the Cumulative Updates in the SP2 branch, 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 2016 features you are using.

Here are the fixes in the SP2 branch:

SQL Server 2016 SP2 Cumulative Update 1 (Build 13.0.5149), 29 total public hot fixes

Performance issues occur in the form of PAGELATCH_EX and PAGELATCH_SH waits in TempDB when you use SQL Server 2016

FIX: Error 9002 when there is no sufficient disk space for critical log growth in SQL Server 2014, 2016, and 2017

FIX: “Cannot use SAVE TRANSACTION within a distributed transaction” error when you execute a stored procedure in SQL Server

PFS page round robin algorithm improvement in SQL Server 2016

FIX: A memory assertion failure occurs and the server is unable to make any new connections in SQL Server

FIX: One worker thread seems to hang after another worker thread is aborted when you run a parallel query in SQL Server

FIX: TDE enabled database backup with compression causes database corruption in SQL Server 2016

FIX: Restore of a TDE compressed backup is unsuccessful when using the VDI client

FIX: Performance is slow for an Always On AG when you process a read query in SQL Server

FIX: Floating point overflow error occurs when you execute a nested natively compiled module that uses EXP functions in SQL Server

FIX: Database cannot be dropped after its storage is disconnected and reconnected in SQL Server

FIX: TDE database goes offline during log flush operations when connectivity issues cause the EKM provider to become inaccessible in SQL Server

FIX: TDE-enabled backup and restore operations are slow if the encryption key is stored in an EKM provider in SQL Server

FIX: Access violation occurs when you query a table with an integer column in SQL Server 2017 and SQL Server 2016

FIX: Parallel redo in a secondary replica of an availability group that contains heap tables generates a runtime assert dump or the SQL Server crashes with an access violation error

FIX: An assertion failure occurs when you execute a nested select query against a columnstore index in SQL Server

FIX: RESTORE HEADERONLY statement for a TDE compressed backup takes a long time to complete in SQL Server

FIX: An access violation occurs when incremental statistics are automatically updated on a table in SQL Server

 

SQL Server 2016 SP2 Cumulative Update 2 (Build 13.0.5153), 21 total public hot fixes

FIX: Many xml_deadlock_report events are reported for one single intra-query deadlock occurrence in SQL Server 2016

FIX: An instance of SQL Server may appear unresponsive then a “Non-yielding Scheduler” error may occur in SQL Server 2016

FIX: Parallel redo does not work after you disable Trace Flag 3459 in an instance of SQL Server

Improvement: Configure SESSION_TIMEOUT value for a Distributed Availability Group replica in SQL Server 2016 and 2017

FIX: Slow performance of SQL Server 2016 when Query Store is enabled

FIX: “PAGE_FAULT_IN_NONPAGED_AREA” Stop error when enumerating contents in a SQL Server FileTable directory

Transparent Data Encryption added for Log Shipping in SQL Server

FIX: Query on a secondary replica takes two times as long to run as on a primary replica in SQL Server

FIX: “Corrupted index” message and server disconnection when an update statistics query uses hash aggregate on SQL Server

FIX: DMVs sys.dm_db_log_stats and sys.dm_db_log_info may return incorrect values for the last database of the SQL Server 2016 instance

FIX: VSS backup fails in secondary replica of Basic Availability Groups in SQL Server 2016

FIX: TDE enabled database backup with compression causes database corruption in SQL Server

FIX: Error 19432 when you use Always On Availability Groups in SQL Server

FIX: Event notifications for AUDIT_LOGIN and AUDIT_LOGIN_FAILED events will cause an unusual growth of TempDB in SQL Server 2016

 

 SQL Server 2016 SP2 Cumulative Update 3 (Build 13.0.5216), 28 total public hot fixes

FIX: Leakage of sensitive data occurs when you enable DDM function in SQL Server 2016 and 2017

FIX: Out of memory error occurs even when there are many free pages in SQL Server

Improvement: Update to add spill information of batch-mode operators to “Warnings” section of Showplan XML in SQL Server 2016

FIX: A memory leak occurs in sqlwepxxx.dll causes the WmiPrvSe.exe process to crash

FIX: Assertion error occurs when you use sys.dm_exec_query_statistics_xml in SQL Server 2016

FIX: The SQL Service shuts down after SP2 is installed on SQL Server 2016 with c2 audit mode enabled

FIX: Transaction delays on the primary replica if database synchronization is reported incorrectly on a secondary replica in SQL Server

Update adds lightweight query profiling hint in SQL Server 2016

FIX: Error 41317 when you enable server audit and you use in-memory transactions in SQL Server

FIX: Access violation in cross data center failover if you use Always On Availability Groups in SQL Server

FIX: Slow query performance occurs when you use NULL filters on Partition Key with default CE in SQL Server 2016

FIX: Upgrading SP1 instance fails when you use SxS instances of SQL Server 2016 SP1 and SP2

FIX: Poor performance occurs when you run a query against columnstore in an RCSI-enabled database in SQL Server 2016

FIX: Workloads that utilize many frequent, short transactions in SQL Server 2016 and 2017 may consume more CPU than in SQL Server 2014

 

 SQL Server 2016 SP2 Cumulative Update 4 (Build 13.0.5233), 36 total public hot fixes

FIX: Access violation occurs when SQL Server 2016 tries to start Query Store Manager during startup

FIX: Access violation when you try to access a table when page compression is enabled on the table in SQL Server

FIX: SQL Server may generate EXCEPTION_ACCESS_VIOLATION dump file when you merge two partitions of system-versioned temporal tables in SQL Server 2016

FIX: “9003 error, sev 20, state 1” error when a backup operation fails on a secondary replica that is running under asynchronous-commit mode

FIX: Overestimations when using default Cardinality Estimator to query table with many null values

FIX: Query operation freezes when you insert data into a clustered columnstore index in parallel in SQL Server data warehousing

FIX: Access violation occurs in compile code when you parse the forced plan in SQL Server 2017

FIX: The “modification_counter” in DMV sys.dm_db_stats_properties shows incorrect value when partitions are merged through ALTER PARTITION in SQL Server 2016

FIX: Assertion error occurs when you run a MERGE statement with an OUTPUT clause in SQL Server 2017

FIX: “ran out of memory” error when executing a query on a table that has a large full-text index in SQL Server 2014

FIX: Backing up a SQL Server 2008 database by using a VSS backup application may fail after installing CU10 for SQL Server 2017

FIX: Assertion error occurs when you restart the SQL Server 2016 database

FIX: Query plans are different on clone database created by DBCC CLONEDATABASE and its original database in SQL Server 2016

FIX: Access violation occurs when you query data from a view created on a table with columnstore index in SQL Server 2016

FIX: Excessive memory usage when you trace RPC events that involve Table-Valued Parameters in SQL Server 2017

FIX: Access violation occurs in Distribution Agent in SQL Server 2017

FIX: Assertion occurs when you use parallel redo in a secondary replica of SQL Server 2016 AG

FIX: DefaultLanguage.LCID property changes for partially contained In-Memory OLTP database

FIX: Assertion error occurs during restoration of TDE compressed backups in SQL Server 2016

FIX: Error 3961 occurs when you use Application roles for the second time in read-only secondary replicas in SQL Server 2016 AG

FIX: Access violation when you run a granular audit policy for DML in SQL Server

 

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 you install a Cumulative Update or Service Pack 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 you.

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. You have done your job as a good DBA.

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”.