Cumulative Update 16 for SQL Server 2017

Applies to: SQL Server 2017 on Windows (all editions)SQL Server 2017 on Linux (all editions)

Note Due to a change made in SQL Server 2017 CU16, any single-stripe TDE compressed backups taken on SQL Server 2017 CU7 through CU12 will not be able to be restored on SQL Server 2017 CU16. Downgrade to the previous CU in order to restore these backups. This issue will be fixed in a future CU.

This article describes Cumulative Update package 16 (CU16) for SQL Server 2017. This update contains fixes that were released after the initial release of SQL Server 2017 and updates the SQL Server and Analysis services components to the following builds:

Component Product version File version
SQL Server 14.0.3223.3 2017.140.3223.3
Analysis Services 14.0.249.14 2017.140.249.14

 

Important notices

This article also provides important information about the following situations:

  • Pacemaker: A behavioral change is made in distributions that use the latest available version of Pacemaker. Mitigations methods are provided.
  • Query Store: You must run this script if you use Query Store and you have previously installed SQL Server 2017 Cumulative Update 2 (CU2).
  • Analysis Services CU build version: Beginning in SQL Server 2017, the Analysis Services build version number and SQL Server Database Engine build version number do not match. For more information, see Verify Analysis Services cumulative update build version.
     

Cumulative updates

Cumulative updates (CU) are now available at the Microsoft Download Center.

Only the most recent CU that was released for SQL Server 2017 is available at the Download Center.

CU packages for Linux are available at https://packages.microsoft.com/.

Notes

  • Each new CU contains all the fixes that were included with the previous CU for the installed version of SQL Server.
  • SQL Server CUs are certified to the same levels as Service Packs, and should be installed at the same level of confidence.
  • Microsoft recommends ongoing, proactive installation of CUs as they become available according to these guidelines:
     
    • Historical data shows that a significant number of support cases involve an issue that has already been addressed in a released CU.
    • CUs may contain added value over and above hotfixes. This includes supportability, manageability, and reliability updates.
  • We recommend that you test CUs before you deploy them to production environments.

How to obtain this cumulative update package for Windows


The following update is available from the Microsoft Download Center:

If the download page does not appear, contact Microsoft Customer Service and Support to obtain the cumulative update package.

Notes

  • After future cumulative updates are released for SQL Server 2017, this and all previous CUs can be downloaded from the Microsoft Update Catalog. However, we recommend that you always install the latest cumulative update that is available.

How to obtain this cumulative update package for Linux


To update Linux to the latest CU, you must first have the Cumulative Update repository configured. Then, update your SQL Server packages by using the appropriate platform-specific update command.

For installation instructions and direct links to the CU package downloads, see the release notes.

Additional hotfixes that are included in this cumulative update package


VSTS bug number KB article number Description Fix area Platform
12119927 4338773 FIX: Deadlock errors when you run an SSIS package in parallel in SQL Server Integration Services Windows
13051092 4459709 FIX: Poor performance occurs when you run a query against columnstore in an RCSI-enabled database in SQL Server 2016 and 2017 SQL Engine Windows
12822164 4489150 FIX: Filtered index may be corrupted when you rebuild index in parallel in SQL Server 2014 and 2016 SQL performance All
12947197 4491560 FIX: Access violation occurs when you query sys.dm_hadr_availability_replica_states in SQL Server 2016 and 2017 High Availability Windows
12757005 4493364 FIX: Error occurs when you back up a virtual machine with non-component based backup in SQL Server 2016 and 2017 SQL Engine Windows
12947201 4494225 FIX: Access violation occurs when you run a query against sys.availability_replicas in SQL Server 2016 and 2017 High Availability Windows
12947202 4494805 FIX: Adding new Publication may fail if distribution database is in AG and collation is set to BIN in SQL Server 2016 and 2017 SQL Engine Windows
12947204 4497222 FIX: Database may crash when multiple threads update permissions on the same database in SQL Server 2016 and 2017 Analysis Services Windows
12947198 4497928 FIX: Indirect checkpoints on tempdb database cause "Non-yielding scheduler" error in SQL Server 2016 and 2017 SQL Engine All
12887076 4501542 FIX: Refresh command hangs occasionally because of thread deadlock in SSAS 2017 Tabular mode Analysis Services Windows
12947206 4502400 FIX: SQL Server 2014 and 2016 do not perform the requested pre-row assignments when you use MERGE statement that performs assignments of local variables for each row SQL performance All
12947196 4502428 FIX: Assertion error occurs when you run a query to access sys.dm_db_xtp_checkpoint_files in SQL Server 2016 and 2017 In-Memory OLTP Windows
12949744 4506023 FIX: Geocentric Datum of Australia 2020 is added to SQL Server 2014 SQL Engine All
12965328 4508065 FIX: Login to SQL Server 2017 on Linux takes more time with SQL authentication than SQL Server 2017 on Windows SQL security Linux
13010512 4508472 FIX: Intermittent "row not found" error at Azure SQL DB Subscriber caused by duplication of BEGIN TRAN statements SQL Engine Windows
12991748 4508621 FIX: Data processing is much slower in SSAS 2016 SP2 and 2017 than in SSAS 2016 SP1 Analysis Services Windows
12960368 4508623 FIX: "sys.fn_hadr_backup_is_preferred_replica(database)" query fails for WSFC type in SQL Server 2017 High Availability Windows
13002397 4509084 FIX: Unexpected index will be deleted when you delete attribute including index in SQL Server 2017 Data Quality Services (DQS) Windows
13017918 4510934 FIX: Prolonged non-transactional usage of FileTable without instance restart may cause non-yielding scheduler error or server crash in SQL Server 2014 SQL Engine Windows
12883479 4511593 FIX: DBCC SHOW_STATISTICS permission check fails with an AV error in SQL Server 2016 and 2017 SQL performance Windows
12912593 4511715 FIX: Filled transaction log causes outages when you run Query Store in SQL Server 2016 and 2017 SQL Engine Windows
12969979 4511885 FIX: Resolving state occurs when an assertion occurs in SQL Server 2017 In-Memory OLTP Windows
13045214 4512016 FIX: Syscommittab cleanup causes a lock escalation that will block the syscommittab flush in SQL Server 2014 SQL Engine Windows
12965938 4512026 FIX: Access violation occurs when you insert LOB data in Clustered Columnstore Index in SQL Server 2017 SQL Engine All
12963180 4512130 FIX: Data masking may not be applied when you use PIVOT or UNPIVOT function on masked column in SQL Server 2016 and 2017 SQL security Windows
13019220 4512150 FIX: Extended event sql_statement_post_compile does not populate object_name field in SQL Server 2017 SQL Engine Windows
12942301 4512151 FIX: Access Violation occurs when you use LOG function with a remote query in SQL Server 2016 or 2017 SQL Engine All
12870479 4512210 FIX: SQL Server 2017 on Linux fails with last chance exception error SQL Engine Linux
13017382 4512603 FIX: SSAS 2017 crashes intermittently due to c0000005 Access violation error Analysis Services Windows
13042973 4512820 Improvement: Microsoft Distributed Transaction Coordinator is enabled on Linux in SQL Server 2017 SQL Engine Linux
13042881 4512956 FIX: Querying sys.tables returns temporary tables created by concurrent users starting from SQL Server 2012 SQL Engine Windows
12352573 4512979 FIX: SQL Server 2017 on Linux fails in script upgrade mode for the database SSISDB after you apply CU9 SQL Engine Linux
12283135 4513095 FIX: Access violation occurs when you start the Full-Text service in Linux in SQL Server 2017 SQL Engine Linux
13049894 4513096 FIX: Repair fails for Machine Learning components on server with no Internet access Setup & Install Windows
12978596 4513097 FIX: Restore or RESTORE VERIFYONLY of a TDE-compressed backup fails in SQL Server 2016 and 2017 SQL Engine Windows
12905640 4513235 FIX: Database is inaccessible when you upgrade tabular model compatibility level from 1103 to 1400 in SQL Server 2017 Analysis Services Windows
12827636 4513236 FIX: Internal thread deadlock may occur on primary or secondary replica of availability group in SQL Server 2016 SP2 and 2017 High Availability Windows
12996125 4513237 FIX: Async secondary replica receives logs from primary replica in SQL Server 2017 on Linux but it does not harden or redone High Availability All
12680777 4514829 FIX: Intermittent failures when you back up to Azure storage from SQL Server 2017 SQL Engine Windows

Notes for this update


Hybrid environments deployment

When you deploy an update to a hybrid environment (such as AlwaysOn, replication, cluster, and mirroring), we recommend that you refer to the following articles before you deploy the update:
 

Cumulative update package information


Prerequisites

To apply this cumulative update package, you must be running SQL Server 2017.

Restart information

You may have to restart the computer after you apply this cumulative update package.

Registry information

To use one of the hotfixes in this package, you do not have to make any changes to the registry.

More CU package information


Pacemaker notice


IMPORTANT

All distributions (including RHEL 7.3 and 7.4) that use the latest available Pacemaker package 1.1.18-11.el7 introduce a behavior change for the start-failure-is-fatal cluster setting when its value is false. This change affects the failover workflow. If a primary replica experiences an outage, the cluster is expected to failover to one of the available secondary replicas. Instead, users will notice that the cluster keeps trying to start the failed primary replica. If that primary never comes online (because of a permanent outage), the cluster never fails over to another available secondary replica.

This issue affects all SQL Server versions, regardless of the cumulative update version that they are on.

To mitigate the issue, use either of the following methods.

Method 1

Follow these steps:

  1. Remove the start-failure-is-fatal override from the existing cluster. 
       # RHEL, Ubuntu         pcs property unset start-failure-is-fatal         # or         pcs property set start-failure-is-fatal=true   # SLES         crm configure property start-failure-is-fatal=true
  2. Decrease the cluster-recheck-interval value. 
       # RHEL, Ubuntu         pcs property set cluster-recheck-interval=<Xmin>   # SLES         crm configure property cluster-recheck-interval=<Xmin>
  3. Add the failure-timeout meta property to each AG resource. 
       # RHEL, Ubuntu         pcs resource update ag1 meta failure-timeout=60s   # SLES         crm configure edit ag1      # In the text editor, add `meta failure-timeout=60s` after any `param`s and before any `op`s
     

    Note In this code, substitute the value for <Xmin> as appropriate. If a replica goes down, the cluster tries to restart the replica at an interval that is bound by the failure-timeout value and the cluster-recheck-interval value. For example, if failure-timeout is set to 60 seconds and cluster-recheck-interval is set to 120 seconds, the restart is tried at an interval that is greater than 60 seconds but less than 120 seconds. We recommend that you set failure-timeout to 60s and cluster-recheck-interval to a value that is greater than 60 seconds. Setting cluster-recheck-interval to a small value is not recommended. For more information, refer to the Pacemaker documentation or consult the system provider.


Method 2

Revert to Pacemaker version 1.1.16.

    Query Store notice


    IMPORTANT

    If you use the Query Store feature, and you have previously installed Cumulative Update 2 (CU2) (14.0.3008.27), the following requirement applies to you:

    After you install Cumulative Update 3 (CU3) (14.0.3015.40) or a later CU, you must immediately run the following script to delete all plans that were collected by Query Store while CU2 was installed:

    SET NOCOUNT ON;DROP TABLE IF EXISTS #tmpUserDBs;SELECT [database_id], 0 AS [IsDone]INTO #tmpUserDBsFROM master.sys.databasesWHERE [database_id] > 4 AND [state] = 0 -- must be ONLINE AND is_read_only = 0 -- cannot be READ_ONLY AND [database_id] NOT IN (SELECT dr.database_id FROM sys.dm_hadr_database_replica_states dr -- Except all local Always On secondary replicas  INNER JOIN sys.dm_hadr_availability_replica_states rs ON dr.group_id = rs.group_id  INNER JOIN sys.databases d ON dr.database_id = d.database_id  WHERE rs.role = 2 -- Is Secondary   AND dr.is_local = 1   AND rs.is_local = 1)DECLARE @userDB sysname;WHILE (SELECT COUNT([database_id]) FROM #tmpUserDBs WHERE [IsDone] = 0) > 0BEGIN SELECT TOP 1 @userDB = DB_NAME([database_id]) FROM #tmpUserDBs WHERE [IsDone] = 0 -- PRINT 'Working on database ' + @userDB EXEC ('USE [' + @userDB + '];DECLARE @clearPlan bigint, @clearQry bigint;IF EXISTS (SELECT [actual_state] FROM sys.database_query_store_options WHERE [actual_state] IN (1,2))BEGIN IF EXISTS (SELECT plan_id FROM sys.query_store_plan WHERE engine_version = ''14.0.3008.27'') BEGIN  DROP TABLE IF EXISTS #tmpclearPlans;  SELECT plan_id, query_id, 0 AS [IsDone]  INTO #tmpclearPlans  FROM sys.query_store_plan WHERE engine_version = ''14.0.3008.27''  WHILE (SELECT COUNT(plan_id) FROM #tmpclearPlans WHERE [IsDone] = 0) > 0  BEGIN   SELECT TOP 1 @clearPlan = plan_id, @clearQry = query_id FROM #tmpclearPlans WHERE [IsDone] = 0   EXECUTE sys.sp_query_store_unforce_plan @clearQry, @clearPlan;   EXECUTE sys.sp_query_store_remove_plan @clearPlan;   UPDATE #tmpclearPlans   SET [IsDone] = 1   WHERE plan_id = @clearPlan AND query_id = @clearQry  END;  PRINT ''- Cleared possibly affected plans in database [' + @userDB + ']'' END ELSE BEGIN  PRINT ''- No affected plans in database [' + @userDB + ']'' ENDENDELSEBEGIN PRINT ''- Query Store not enabled in database [' + @userDB + ']''END')  UPDATE #tmpUserDBs  SET [IsDone] = 1  WHERE [database_id] = DB_ID(@userDB)END