As of May 15, 2017, there have been three Cumulative Updates (CU) for the Service Pack 1 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 SP1 branch (which you should be by now), I really think you should be running the latest SQL Server 2016 SP1 Cumulative Update.

Table 1 shows the SQL Server 2016 SP1 CU builds that have been released so far.

BuildDescriptionRelease Date
13.0.4411SP1 CU1January 18, 2017
13.0.4422SP1 CU2March 20, 2017
13.0.4435SP1 CU3May 15, 2017

Table 1: SQL Server 2016 SP1 CU Builds

You can follow the KB article link below to see all of the CU builds for the SQL Server 2016 RTM and SQL Server 2016 SP1 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 SP1 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 SP1 branch:

SQL Server 2016 SP1 Cumulative Update 1 (Build 13.0.4411), 54 total public hot fixes

FIX: The “sys.dm_db_column_store_row_group_physical_stats” query runs slowly on SQL Server 2016

FIX: DMV sys.dm_os_spinlock_stats returns incorrect results after you install SQL Server 2016 RTM CU2

FIX: SQL Server crashes when you execute a spatial data query that has been compiled in SQL Server 2016

FIX: An Always On secondary replica goes into a disconnecting state

FIX: A memory leak occurs when SQL Server procedure cache consumes too much memory

FIX: DMV sys.dm_hadr_availability_replica_states returns an incorrect synchronization health state for a distributed availability group

FIX: Out of memory occurs when you use long Hekaton transactions in SQL Server 2016

FIX: The Target Recovery Time of a database set to a nonzero value causes an assertion and a lease timeout in SQL Server 2014 or 2016

Decrease in performance and “non-yielding scheduler” errors caused by unnecessary spinlocks in SQL Server

FIX: Latch Contention may occur on execution of parallel queries on database that has Snapshot Isolation enabled in SQL Server 2016

FIX: Cannot execute the DBCC CLONEDATABASE command on an instance of SQL Server 2016 SP1 after an in-place upgrade

FIX: SQL Server crashes when you execute the OPENJSON function in a contained database in SQL Server 2016

FIX: SQL Server runs out of memory when you query data from memory-optimized tables if Resource Governor is enabled

FIX: Error messages are logged if database mirroring is configured by Transact-SQL in SQL Server 2016 and no database activity occurs for more than 90 seconds

Update to enable changing the PolyBase service accounts without reinstalling the PolyBase feature in SQL Server 2016

FIX: Error when create a stored procedure that uses a synonym together with an index hint in SQL Server 2016

FIX: An assert error occurs when you insert data into a memory-optimized table that contains a clustered columnstore index in SQL Server 2016

FIX: Error 3628 when you create or rebuild a columnstore index in SQL Server 2016

FIX: An access violation occurs when you execute DBCC CHECKDB on a database in SQL Server 2016

FIX: A dump file is generated when you enable system-versioning on a table in SQL Server 2016

FIX: Kernel crash when you create a database after you drop a database that contains FILESTEAM data in SQL Server 2016

FIX: An assertion occurs when you bulk insert data into a table from multiple connections in SQL Server 2016

An error occurs when you use ODBC driver to retrieve sql_variant data in SQL Server 2014 or 2016

FIX: Automatic update of statistics feature doesn’t run after you truncate a table that has a clustered columnstore index

FIX: A query that contains a hint against a view that references at least one temporal table in a different database can generate a dump file in SQL Server 2016

 

SQL Server 2016 SP1 Cumulative Update 2 (Build 13.0.4422), 101 total public hot fixes

FIX: The change table is ordered incorrectly for updated rows after you enable change data capture for a Microsoft SQL Server database

FIX: Memory leak when you query sys.dm_sql_referenced_entities view in SQL Server 2014 or 2016

FIX: Changing the data type and then updating the table with more than 4,000 records causes database corruption

FIX: Cannot insert data into a table that uses a clustered columnstore index in SQL Server 2016

FIX: Incremental statistics runs with higher sample rate than regular statistics when statistics are created or updated in SQL Server 2014 or 2016

FIX: DMV sys.dm_hadr_availability_replica_states returns an incorrect synchronization health state for a distributed availability group

FIX: ALTER TABLE, ADD CONSTRAINT, and PRIMARY KEY statements do not detect a duplicate key in SQL Server 2016

FIX: Cannot install SQL Server R Services during an offline installation of SQL Server 2016 updates

Improvement: Enhance VDI Protocol with VDC_Complete command in SQL Server

FIX: Unable to rebuild the partition online for a table that contains a computed partitioning column in SQL Server 2016

FIX: Assertion error when dm_exec_query_statistics_xml is used in a query plan that contains certain operators in SQL Server 2016

FIX: Wrong number of rows returned in sys.partitions for Columnstore index in SQL Server 2016

Statistics are removed after rebuilding a specific partition of an partitioned aligned index on a partitioned table in SQL Server

FIX: On failover, the new secondary replica stops accepting transaction log records until the instance is restarted in SQL Server

FIX: Deadlock when you execute a query plan with a nested loop join in batch mode in SQL Server 2014 or 2016

FIX: SQL Server crashes when you execute a spatial data query that has been compiled in SQL Server 2016

FIX: An assert error occurs when you insert data into a memory-optimized table that contains a clustered columnstore index in SQL Server 2016

FIX: DBCC CLONEDATABASE doesn’t copy the runtime cache of the query store to the clone in SQL Server 2016 SP1

FIX: Distribution Agent fails for a SQL Server 2014 publisher and a SQL Server 2012 subscriber in Transactional Replication

FIX: Incorrect full-text keys are recorded for the rows that aren’t indexed correctly by a full-text index in SQL Server

FIX: Data type conversion error in a query that involves a column store index in SQL Server 2016

FIX: Error 2809 when you execute a stored procedure that takes a table-valued parameter from RPC calls in SQL Server 2014 or 2016

FIX: Deadlock causes deferred transaction on the secondary replica in an Always On environment

FIX: “Non-yielding Scheduler” condition when you parallel-load data into a columnstore index in SQL Server 2016

SQL Server crashes with an access violation when you use the TRY…CATCH construct for bulk copy

FIX: Rebuilding a nonclustered index to add columns by using CREATE INDEX with DROP_EXISTING=ON and ONLINE=ON causes blocking

FIX: DBCC CHECKFILEGROUP reports false inconsistency error 5283 on a database that contains a partitioned table in SQL Server

Update improves DMV sys.dm_server_services and sys.dm_os_sys_info in SQL Server 2016

FIX: A memory leak occurs when SQL Server procedure cache consumes too much memory

FIX: “Incorrect syntax for definition of the ‘default’ constraint” error when you add an arbitrary columnstore column in SQL Server 2016

FIX: Error when you add a NOT NULL column with default values to a non-empty clustered columnstore index in SQL Server 2016 Standard and Express edition

FIX: Memory leak when you run a query that you don’t have sufficient permissions for in SQL Server 2014 or 2016

FIX: Intra-query deadlock when values are inserted into a partitioned clustered columnstore index in SQL Server 2014 or 2016

FIX: Assert memory dump on a mirror server in SQL Server

FIX: Error 5262 when you execute DBCC CHECKDB on the primary replica in SQL Server 2012, 2014 or 2016

FIX: Availability databases in incorrect initializing/synchronizing state after failover of SQL Server 2014 or 2016 AlwaysOn availability group

FIX: More CPU consumption when many consecutive transactions insert data into a temp table in SQL Server 2016 than in SQL Server 2014

FIX: CREATE OR ALTER statement applied on a DDL trigger fails on the next execution in SQL Server 2016

Improvement: Enable SQL Server Managed Backup to back up databases that are larger than 50 GB to Microsoft Azure in SQL Server 2016

Improvement: Improves the query performance for SQL Server 2016 by changing the use of histograms on UNIQUE columns

FIX: The sys.column_store_segments catalog view displays incorrect values in the column_id column in SQL Server 2016

FIX: Memory is paged out when columnstore index query consumes lots of memory in SQL Server 2014 or 2016

FIX: An access violation occurs when you execute DBCC CHECKDB on a database in SQL Server 2016

FIX: Error 21050 when you remove a table that is not part of a publication in SQL Server 2014 or 2016

FIX: Queries that run against secondary databases always get recompiled in SQL Server

FIX: Out-of-memory errors when you execute DBCC CHECKDB on database that contains columnstore indexes in SQL Server 2014 or 2016

FIX: Error 3628 when you create or rebuild a columnstore index in SQL Server 2016

FIX: Significantly increased PAGELATCH_EX contentions in sys.sysobjvalues in SQL Server 2016

FIX: Incorrect query result when you use varchar(max) variable in the search condition in SQL Server 2014 or 2016

FIX: You cannot select any replica when you fail over from an availability group that’s in the resolving state

FIX: No automatic failover after database mirroring stops unexpectedly in SQL Server

FIX: TDE encrypted Databases go in suspect state during the recovery phase when you restart SQL Server

FIX: Bad query plan created on secondary replicas after FULLSCAN statistics update on primary replica in SQL Server 2016

FIX: Checkpoint files grow excessively when you insert data into memory-optimized tables in SQL Server 2016

 

SQL Server 2016 SP1 Cumulative Update 3 (Build 13.0.4435), 70 total public hot fixes

FIX: Query against sys.dm_db_partition_stats DMV is slow if the database contains many partitions in SQL Server 2016

FIX: Error occurs when you drop a subscription by using a non-sysadmin account in SQL Server

FIX: Access violation occurs when used SELECT TOP query to retrieve data from clustered columnstore index in SQL Server 2016

FIX: Large memory allocations of type MEMOBJ_XSTMT occur when you run the sys.dm_exec_query_stats script in SQL Server

FIX: Parallel redo causes high memory usage in SQL Server 2016 when it’s compared to SQL Server 2014 or earlier versions

FIX: SQL Server 2016 consumes more memory when columnstore index is reorganizeda>

FIX: Error when you execute DBCC CLONEDATABASE on an “Always Encrypted” enabled database in SQL Server 2016

Update enables DML query plan to scan query memory-optimized tables in parallel in SQL Server 2016

Intra-query deadlock on communication buffer when you run a bulk load against a clustered columnstore index in SQL Server 2016

FIX: Error 608 when a stored procedure that inserts rows into a temporary table on which a spatial index is created is run in SQL Server

FIX: Wrong number of rows returned in sys.partitions for Columnstore index in SQL Server 2016

FIX: An assertion occurs when you run an UPDATE statement on a clustered columnstore index in SQL Server 2016

FIX: A severe error occurs when you create a spatial index with the GEOMETRY_GRID or GEOGRAPHY_GRID option in SQL Server

FIX: SQL Server 2016 stops responding when the “Latch_Suspend_End” extended event is triggered incorrectly

FIX: Out-of-memory error when you run a query to access LOB columns through In-Memory OLTP in SQL Server 2016

FIX: DMV sys.dm_hadr_availability_group_states displays “NOT_HEALTHY” in synchronization_health_desc column on secondary replicas in SQL Server

Update reduces the execution frequency of the sp_MSsubscription_cleanup stored procedure in SQL Server

FIX: Deadlock when you use sys.column_store_row_groups and sys.dm_db_column_store_row_group_physical_stats DMV with large DDL operations in SQL Server 2016

FIX: Restore fails when you do backup with compression and checksum on TDE enabled database in SQL Server 2016

FIX: A memory leak in SQLWEP causes the host process Wmiprvse.exe to crash in SQL Server

FIX: Failed assertion and many access violation dump files after the sp_replcmds stored procedure is canceled in SQL Server

FIX: The sys.column_store_segments catalog view displays incorrect values in the column_id column in SQL Server 2016

FIX: Intra-query deadlock occurs when you execute parallel query that contains outer join operators in SQL Server 2016

FIX: Database schema is corrupted when you restore a database from a snapshot 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”.