KB4535007 - Cumulative Update 19 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 19 (CU19) 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.3281.6 2017.140.3281.6
Analysis Services 2017.140.249.28


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


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


  • 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
13200685 4523102 FIX: SQL Server 2016 and 2017 database remains in frozen I/O state indefinitely when backed up by VSS SQL Engine Windows
13323998 4524542 FIX: MDS and/or LocalDB patch installation fails if you patch SQL Server 2016 or 2017 with a next CU Setup & Install Windows
13323994 4527355 FIX: Synchronized job may fail when the target servers start to synchronize the database in SQL Server 2016 and 2017 Analysis Services Windows
13324008 4527716 FIX: You may encounter a non-yielding scheduler condition when you run query with parallel batch-mode sort operator in SQL Server 2016 and 2017 SQL performance Windows
13324014 4528066 FIX: Unable to restore SQL Server 2012 databases on SQL Server 2016 and 2017 because of NCCI SQL Engine Windows
13324012 4528067 FIX: Error 8959 may occur on IAM page when you query sys.dm_db_index_physical_stats against partitioned columnstore table after partition switch in SQL Server SQL Engine Windows
13323986 4528250 FIX: Assertion error occurs when you use IDENT_CURRENT on view that has identity columns in SQL Server 2016 and 2017 In-Memory OLTP Windows
13324006 4529876 FIX: Memory may not get released when you process partitions with data in SQL Server 2016 and 2017 Analysis Services Windows
13323996 4530212 FIX: Access violation occurs when you use sys.dm_os_memory_objects in SQL Server 2016 and 2017 SQL performance Linux
13324000 4530251 FIX: Error 8601 occurs when you run a query with partition function in SQL Server SQL performance Windows
13324018 4530259 FIX: Scripts generated by SSMS collect different wait types after you install SQL Server 2016 or 2017 SQL Engine Windows
13324002 4530443 FIX: Non-yielding scheduler issue occurs in SQL Server 2016 and 2017 when you run an online build for an index that's not partition-aligned SQL performance Windows
13324020 4530475 FIX: IsError function fails to detect error in Excel XIRR function when MDX query is executed from SSIS 2016 and 2017 Analysis Services Windows
13323988 4531010 FIX: CREATE INDEX with new CE reads the partition table and results in huge row count higher than the total table row count in SQL Server 2016 and 2017 SQL performance Windows
13288075 4531386 FIX: Assertion occurs when sys.sp_cdc_enable_tableis used to enable CDC on column set table in SQL Server 2017 SQL Engine Windows
13257848 4531736 FIX: SQLDiag fails to generate output due to missing stored procedure tempdb.dbo.sp_sqldiag14 in SQL Server 2017 Management Tools Windows
13320404 4534893 FIX: Debugging an SSIS package in SSDT 2017 always starts DtsDebugHost in 32-bit instead of 64-bit Integration Services Windows
13336052 4537350 FIX: Access violation occurs when you run DBCC CHECKTABLE against a table with Clustered Columnstore Index in SQL Server 2017 SQL Engine Windows
13189393 4537438 FIX: Access violation occurs when you join two columns in SQL Server 2017 in which Adaptive joins are permitted SQL performance All
13333767 4537649 FIX: Deadlock may occur when you create a database by using non-default collation in SQL Server 2017 SQL Engine Windows
13325751 4538174 FIX: Error occurs and AG will be in non-synchronizing state when failover happens in primary AG of Distributed Availability Group in SQL Server 2017 on Linux High Availability Linux
13264329 4538205 Improvement: Download new CAB files that have fixes for R/Python runtime features SQL Engine Windows
13298386 4538268 FIX: "Expired BLOB handle" error occurs when cross-database transaction involves communication with MSDTC in SQL Server 2017 SQL performance All
13315613 4538275 FIX: Database initialization may fail by using automatic seeding in SQL Server 2017 High Availability Linux
13356506 4538356 FIX: Secondary replica update may fail if availability group configured on Linux in SQL Server 2017 High Availability Linux
13312017 4538365 FIX: Change Tracking cleanup does not work when invalid cleanup and hardened cleanup version are negative in SQL Server 2017 SQL Engine Windows
13293961 4538377 FIX: Non-yielding scheduler condition occurs when you run batch mode query with multiple joins in SQL Server 2017 SQL Engine Windows
13343024 4538378 FIX: The "is_media_read_only" value remains unchanged for a SQL Server data file even though the media is no longer read-only SQL Engine Windows
13356804 4538447 FIX: cleanup_server_retention_window does not function properly when you try to cleanup execution logs in SSISDB Integration Services Windows
13135043 4538497 FIX: Slow query performance when using query predicates with UPPER, LOWER or RTRIM with default CE in SQL Server 2017 SQL performance Windows
13358148 4538849 FIX: Transaction commit may cause extra latency at low workloads in SQL Server 2017 High Availability Windows
13357902 4540449 FIX: Error occurs in sp_xml_preparedocument where MSXMLSQL tries to access virtual address space beyond limit in SQL Server 2017 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


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


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


    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