Cumulative Update 10 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 10 (CU10) (build number: 14.0.3037.1) 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:

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


  • 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, we recommend 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
12150907 4342424 Improvement: Update to support QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_n in USE HINT option in SQL Server 2017 SQL performance All
12201714 4344103 FIX: MEMORYCLERK_SOSMEMMANAGER grows larger and FAIL_PAGE_ALLOCATION error is logged after you enable large page allocations SQL Engine Windows
12171986 4344904 Improvement enables CREATE AVAILABILITY GROUP and ALTER AVAILABILITY GROUP DDLs to set the SESSION_TIMEOUT for a configuration-only replica in SQL Server SQL Engine All
12210593 4053447 FIX: Incorrect prompt to restart SQL Server 2017 on Linux when not required Management Tools Linux
12177844 4133191 FIX: A memory leak occurs in sqlwepxxx.dll causes the WmiPrvSe.exe process to crash SQL Engine Windows
12248777 4341221 FIX: VSS backup fails in secondary replica of Basic Availability Groups in SQL Server 2016 and 2017 SQL Engine Windows
12221447 4345228 FIX: Slow performance in SQL Server 2017 when you run a query that contains HASHBYTES function when compared to SQL Server 2016 SQL Engine Windows
12227459 4345402 FIX: Synchronization of a database takes a long time to finish in SQL Server 2017 Analysis Services Windows
12213556 4345683 FIX: A value set for the “Accepted NTLM SPNs” variable causes an access violation during startup of SQL Server 2017 SQL connectivity Windows
12242752 4340426 FIX: The Excel Add-in still appears on the MDS home page when the option is set to “No” in MDS Configuration Manager Data Quality Services (DQS) Windows
12229848 4346330 FIX: Delete operation doesn’t work in an entity when you enable Approval Required permission in SQL Server 2017 Master Data Services Data Quality Services (DQS) Windows
12128370 4346643 FIX: Errors 3212 and 3013 occur when you back up a database in AlwaysOn Availability Groups in SQL Server 2017 SQL Engine Windows
12242742 4338715 FIX: Many xml_deadlock_report events are reported for one single intra-query deadlock occurrence in SQL Server 2016 and 2017 SQL performance All
12245662 4338576 FIX: Transaction delays on the primary replica if database synchronization is reported incorrectly on a secondary replica in SQL Server High Availability Windows
12245666 4340746 FIX: No records are returned when you run an MDX query after restarting SSAS 2016 and 2017 Analysis Services Windows
12203152 4346812 FIX: Error occurs when you open a symmetric key that is encrypted by an asymmetric key in SQL Server 2017 SQL security Windows
12247780 4347055 FIX: Out of memory error when you run SQL Server 2017 inside a Linux Docker container SQL Engine Linux
12251323 4347088 FIX: Out of memory error occurs even when there are many free pages in SQL Server SQL Engine Windows
12248752 4100582 FIX: Leakage of sensitive data occurs when you enable DDM function in SQL Server 2016 and 2017 SQL security All
12249912 4456883 FIX: Change Tracking cleanup messages unexpectedly recorded in error log for Always On Availability Groups in SQL Server  SQL Engine Windows
12164662 4341398 FIX: Event notifications for AUDIT_LOGIN and AUDIT_LOGIN_FAILED events will cause an unusual growth of TempDB in SQL Server 2016 and 2017 SQL Engine Windows
12201819 2932559 FIX: Totals are wrong after you filter on a pivot table item and remove the filter in SSAS Analysis Services 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


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


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


    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