Cumulative Update 8 for SQL Server 2017

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

This article describes Cumulative Update package 8 (CU8) (build number: 14.0.3029.16) for SQL Server 2017. This update contains fixes that were released after the initial release of SQL Server 2017.

This article also provides important information about the following situations:

  • A behavior change in distributions that use the latest available version of Pacemaker
  • A required script if you use Query Store and you have previously installed SQL Server 2017 Cumulative Update 2 (CU2)

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.

Note After future cumulative updates are released for SQL Server 2017, this and all previous CUs can be located and downloaded from the Microsoft Update Catalog. However, Microsoft recommends that you always install the latest cumulative update 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
11845000 4132042 FIX: Query performance difference between SSAS 2014 and SSAS 2017 Analysis Services Windows
11677210 4135137 SSMS and SSDT do not escape double quotation marks when you export data as CSV Integration Services Windows
11863917 4136679 FIX: SQL Server 2017 Analysis Services crashes after a random query is run against DirectQuery mode Analysis Services Windows
11953216 4163528 FIX: DAX query performance decrease after you upgrade to SQL Server 2017 Analysis Services Windows
11886245 4163526 FIX: A DAX query that contains SWITCH and nested IF statements take more than an hour to finish in SQL Server Analysis Services Windows
11976339 4293761 FIX: Unexpected error when process a table by using the “Process Full” option in SQL Server Analysis Services Analysis Services Windows
11983945 4134175 FIX: Processing a cube with many partitions generates lots of concurrent data source connections in SSAS 2016 and 2017 Analysis Services Windows
11983933 4164562 FIX: Wrong user name appears when two users log on to MDS at different times in SQL Server Data Quality Services Windows
11983950 4135113 FIX: Change tracking record is inconsistent during an update on a table that has a clustered or unique index in SQL Server SQL Engine Windows
11983932 4094858 FIX: “An unexpected error occurred” when you use DAX measures in Power BI table visualizations in SQL Server Analysis Services Windows
11566052 4295097 FIX: Cannot change the “isAvailableInMdx” column property to “False” in SSAS in Tabular mode Analysis Services Windows
11974804 4295233 FIX: Database recovery could hang if it contains in-memory objects and a recovery failure is encountered during a race condition in SQL Server 2017 In-Memory OLTP All
11983952 3028216 FIX: A crash occurs when proactive caching is triggered for a dimension in SSAS Analysis Services Windows
11057337 4052135 FIX: RESTORE HEADERONLY statement for a TDE compressed backup slow to complete in SQL Server SQL Engine All
11983956 4131960 FIX: Access violation when you run a nested select query against a columnstore index in SQL Server SQL Engine Windows
11983946 4162814 FIX: An internal exception access violation occurs and the SSAS server stops responding SQL Engine Windows
11990171 4316655 FIX: An assertion error may occur when you query dm_db_stats_histogram DMF in SQL Server 2017 SQL performance Windows
12038322 4316793 FIX: Unnecessary failovers occur when a SQL Server 2017 Failover Cluster Instance or an Always On Availability Group is managed by Pacemaker High Availability Linux
12052001 4316791

FIX: Two SQL Server instances are the primary replica of an availability group in SQL Server

High Availability Linux
12035281 4316790 FIX: Startup of a database that belongs to an availability group times out in SQL Server on Linux High Availability Linux
12000998 4316789 FIX: Always On database is stuck in “Recovery Pending” state after the host name of an availability replica is renamed in SQL Server High Availability Linux
12044555 4316948 FIX: Access violation occurs when you compile a query and histogram amendment is enabled with default Cardinality Estimation in SQL Server 2017 SQL performance Windows
11983959 4058175 FIX: TDE-enabled backup and restore are slow if the encryption key is stored in an EKM provider in SQL Server SQL security All
11983935 4094706 FIX: Parallel query hangs when a worker thread is aborted in an instance of SQL Server SQL Engine Windows
11983965 4163478 FIX: An access violation occurs when incremental statistics are automatically updated on a table in SQL Server SQL performance Windows
12038298 4337645 FIX: Error 883 occurs when a database that belongs to an availability group is marked as SUSPECT in SQL Server 2017 on Linux SQL Engine Linux
11983961 4163087 FIX: Performance is slow for an Always On AG when you process a read query in SQL Server SQL Engine  Windows
11990858 4338296 FIX: Memory leak after dropping an LOB or off-row column from a memory-optimized table in SQL Server on Linux In-Memory OLTP All
12100858 4338330 FIX: CASE expressions containing identical sub-queries may return incorrect results in SQL Server 2017 SQL performance All
12059522 4338337 FIX: SQL Server crashes and then restarts when the “Adaptive join” option is enabled SQL performance Windows
12059449 4338746 FIX: Error 19432 when you use Always On Availability Groups in SQL Server High Availability Windows
11953689 4338960 FIX: "PAGE_FAULT_IN_NONPAGED_AREA" Stop error when enumerating contents in a SQL Server FileTable directory SQL Engine  Windows
12120313 4339090 Improvement to reduce the fail-over duration for an availability group in SQL Server on Linux High Availability Linux
12062786 4339875 Improvements for Always On Availability Groups on a Pacemaker cluster in SQL Server High Availability Linux
11829060 4342111 Update adds improved support for SAP HANA data sources in SQL Server Analysis Services Analysis Services Windows
10895916 4092075 Improvement: Adds Service Broker support for DBCC CLONEDATABASE in SQL Server SQL Engine All

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.

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.
 

Cumulative update

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.

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