KB4101464 - Cumulative Update 6 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 6 (CU6) 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 Build version File version
SQL Server 14.0.3025.34 2017.140.3025.34
Analysis Services 2017.140.204.1



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


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

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
11701210 4089819 Latch timeout on Secondary Replica, Deadlock Between Readonly Query High Availability Windows
11701217 3147012 FIX: Large disk checkpoint usage occurs for an In-Memory optimized filegroup during heavy non-In-Memory workloads In-Memory OLTP Windows
11701155 4038932 FIX: Change Data Capture functionality does not work in SQL Server Integration Services Windows
11701174 4058747 FIX: Error when upgrading SSIS catalog database in SQL Server 2016 and 2017 Standard Edition Integration Services Windows
11751554 4100582 FIX: Leakage of sensitive data occurs when you enable DDM function in SQL Server 2017 SQL security All
11806534 4100873 FIX: Database Mail cannot connect to SQL Server 2017 on Linux when non-default TCP port is used SQL Engine Linux
11797615 4100918 FIX: SQL Server Agent cannot connect to SQL Server 2017 on Docker when non-default TCP port is used Integration Services Linux
11701200 4088901 FIX: Assertion failure when sys.dm_db_log_space_usage statement is run on a database snapshot in SQL Server 2016 and 2017 High Availability Windows
11701181 4090486 FIX: Managed Backup fails when database is renamed with trailing white space in SQL Server 2016 and 2017 Management Tools Windows
11587927 4099335 False error reporting when you execute the Test-SqlAvailabilityGroup cmdlet in SQL Server Management Tools Windows
11701170 4058289 FIX: ALTER PROCEDURE WITH ENCRYPTION statement fails when you encrypt a non-published stored procedure in SQL Server 2016 and 2017 SQL Engine Windows
11701190 4078596 FIX: Random access violations occur when you run monitoring stored procedure in SQL Server 2016 and 2017 SQL performance Windows
11701156 4089950 Update to support partition elimination in query plans that have spatial indexes in SQL Server 2016 and 2017 SQL performance Windows
11804747 4101323 FIX: Errors occur when you upgrade to SQL Server 2017 CU4 or later and not enable SQL Server Agent on Linux SQL Engine Linux
11797978 4101554 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 High Availability Windows
11701180 4074881 FIX: Assertion error when data is bulk-inserted into a table that contains non-clustered and clustered columnstore indexes in SQL Server 2016 and 2017 SQL Engine Windows
11751562 4096875 FIX: "Access is denied" error when you try to create a database in SQL Server 2017 Express LocalDB SQL Engine Windows
11797614 4099126 FIX: "Access Violation" error when you execute a complex query with multiple joins and the Adaptive Join feature is enabled in SQL Server SQL performance Windows
11684530 4099334 FIX: Incorrect user name is displayed when a user logs in MDS and accesses Users and Groups functional area in SQL Server 2017 Data Quality Services (DQS) Windows
11701169 4057615 FIX: "Incorrect syntax near the keyword 'KEY'" error when you add an Oracle table with primary column named 'KEY' in SQL Server 2016 and 2017 Integration Services Windows
11715371 4098763 FIX: R script fails on parallel execution in SQL Server 2017 SQL Engine Windows
11642085 4098732 FIX: A calculation error occurs when a secured measure is queried in SSAS 2017 Analysis Services Windows
11701167 4090025 FIX: Random masking does not mask BIGINT values correctly in SQL Server SQL security Windows
11701162 4077708 FIX: Assert in "HadrRefcountedObject::Release" when you configure a replica for manual seeding mode in SQL Server High Availability Windows
11751257 4096258 FIX: An unexpected exception occurs and SSAS crashes when you execute a particular DAX function in SQL Server 2017 Analysis Services Windows
11701157 4089324 FIX: Error 15665 when you call sp_set_session_context repeatedly with null key value in SQL Server 2016 SQL Engine Windows
11807574 4101482 FIX: Automatic seeding fails when you use an Always On availability group in SQL Server High Availability All
11701196 4083949 FIX: SSAS may crash when you run a DAX query by using a non-admin Windows user in SQL Server 2016 and 2017 Analysis Services Windows
11701201 4086136 FIX: SSAS stops responding when you run an MDX query in SQL Server 2016 and 2017 Analysis Services (Multidimensional model) Analysis Services Windows
11701140 4086173 FIX: Access violation occurs when executing a DAX query on a tabular model in SQL Server 2014 and 2017 Analysis Services Analysis Services Windows
11701208 4089623 FIX: Out of memory occurs and query fails when you run MDX query with NON EMPTY option in SSAS Analysis Services Windows
11706961 4090032 FIX: Memory gets exhausted when you run Power BI report that executes DAX query on SSAS 2016 and 2017 Multidimensional mode Analysis Services Windows
11701179 4093226 FIX: “DirectQuery may not be used with this data source” error when you browse a Direct Query model in SQL Server Analysis Services Windows
11701215 4089276 Improves the query performance when an optimized bitmap filter is applied to a query plan in SQL Server 2016 and 2017 SQL Performance All
11701184 3192154 A non-optimal query plan choice causes poor performance when values outside the range represented in statistics are searched in SQL Server 2016 and 2017 SQL Performance Windows
11701193 4074862 FIX: Unexpected error when you create a subcube in SQL Server 2016 and 2017 Analysis Services (Multidimensional model) Analysis Services Windows
11719463 4131496 Improvement: Enable "forced flush" mechanism in SQL Server 2017 on Linux SQL Engine All
11697318   Fixes an issue in which the database cannot be detached or dropped after its storage is disconnected and reconnected.    

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


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.

Query Store notice


You must run this script if you use Query Store and you are updating from SQL Server 2017 Cumulative Update 2 (CU2) directly to SQL Server 2017 Cumulative Update 3 (CU3) or any later Cumulative Update. Executing this script is not needed if you have previously installed SQL Server 2017 Cumulative Update 3 (CU3) or any later SQL Server 2017 Cumulative Update.

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