Description of the issue
When updating statistics using indexoptimze.sql on a microsoft azure sql managed instance the maxdop option does not work. I found the version returned by sqlmi fall outside of the range of version being checked checking. ((@Version >= 12.06024 AND @Version < 13)
code in storedprocedure
`DECLARE @Version numeric(18,10) = CAST(LEFT(CAST(SERVERPROPERTY('ProductVersion') AS nvarchar(max)),CHARINDEX('.',CAST(SERVERPROPERTY('ProductVersion') AS nvarchar(max))) - 1) + '.' + REPLACE(RIGHT(CAST(SERVERPROPERTY('ProductVersion') AS nvarchar(max)), LEN(CAST(SERVERPROPERTY('ProductVersion') AS nvarchar(max))) - CHARINDEX('.',CAST(SERVERPROPERTY('ProductVersion') AS nvarchar(max)))),'.','') AS numeric(18,10))
SET @CurrentCommand += 'UPDATE STATISTICS ' + QUOTENAME(@CurrentSchemaName) + '.' + QUOTENAME(@CurrentObjectName) + ' ' + QUOTENAME(@CurrentStatisticsName)
IF @CurrentMaxDOP IS NOT NULL AND ((@Version >= 12.06024 AND @Version < 13) OR (@Version >= 13.05026 AND @Version < 14) OR @Version >= 14.030154)
BEGIN
INSERT INTO @CurrentUpdateStatisticsWithClauseArguments (Argument)
SELECT 'MAXDOP = ' + CAST(@CurrentMaxDOP AS nvarchar)
END
`
SQL Server version and edition
select @@Version
Microsoft SQL Azure (RTM) - 12.0.2000.8 Oct 5 2025 12:46:44 Copyright (C) 2022 Microsoft Corporation
DECLARE @Version numeric(18,10) = CAST(LEFT(CAST(SERVERPROPERTY('ProductVersion') AS nvarchar(max)),CHARINDEX('.',CAST(SERVERPROPERTY('ProductVersion') AS nvarchar(max))) - 1) + '.' + REPLACE(RIGHT(CAST(SERVERPROPERTY('ProductVersion') AS nvarchar(max)), LEN(CAST(SERVERPROPERTY('ProductVersion') AS nvarchar(max))) - CHARINDEX('.',CAST(SERVERPROPERTY('ProductVersion') AS nvarchar(max)))),'.','') AS numeric(18,10))
select @Version
12.0200080000
Version of the script
2025-12-20 18:52:13
What command are you executing?
EXECUTE dbo.IndexOptimize
@databases = 'ALL_DATABASES',
@FragmentationLow = NULL,
@FragmentationMedium = NULL,
@FragmentationHigh = NULL,
@UpdateStatistics = 'ALL',
@StatisticsSample = 100,
@OnlyModifiedStatistics = 'Y',
@Maxdop = '2',
@LogToTable = 'Y'
What output are you getting?
SELECT TOP (50) command FROM [DBAdmin].[dbo].[CommandLog] where commandtype='UPDATE_STATISTICS' order by ID desc
UPDATE STATISTICS [dbo].[RQ_XML] [_WA_Sys_00000006_6DC81E57] WITH FULLSCAN
UPDATE STATISTICS [dbo].[RQ_XML] [_WA_Sys_00000005_6DC81E57] WITH FULLSCAN
UPDATE STATISTICS [dbo].[RQ_XML] [RQ_XML_Ref_Num_ix] WITH FULLSCAN
UPDATE STATISTICS [dbo].[RQ_XML] [PK_RQ_XML] WITH FULLSCAN
UPDATE STATISTICS [dbo].[RQ_Status] [_WA_Sys_00000006_4820CD05] WITH FULLSCAN
UPDATE STATISTICS [dbo].[RQ_Status] [_WA_Sys_00000005_4820CD05] WITH FULLSCAN
UPDATE STATISTICS [dbo].[RQ_Status] [_WA_Sys_00000004_4820CD05] WITH FULLSCAN
UPDATE STATISTICS [dbo].[RQ_Status] [_WA_Sys_00000003_4820CD05] WITH FULLSCAN
as a workaround i updated script to check version > 12 instead of 12.06024
--sfg 20251217 IF @CurrentMaxDOP IS NOT NULL AND ((@Version >= 12.06024 AND @Version < 13) OR (@Version >= 13.05026 AND @Version < 14) OR @Version >= 14.030154)
IF @CurrentMaxDOP IS NOT NULL AND ((@Version >= 12 AND @Version < 13) OR (@Version >= 13.05026 AND @Version < 14) OR @Version >= 14.030154)
BEGIN
INSERT INTO @CurrentUpdateStatisticsWithClauseArguments (Argument)
SELECT 'MAXDOP = ' + CAST(@CurrentMaxDOP AS nvarchar)
END
Description of the issue
When updating statistics using indexoptimze.sql on a microsoft azure sql managed instance the maxdop option does not work. I found the version returned by sqlmi fall outside of the range of version being checked checking. ((@Version >= 12.06024 AND @Version < 13)
code in storedprocedure
`DECLARE @Version numeric(18,10) = CAST(LEFT(CAST(SERVERPROPERTY('ProductVersion') AS nvarchar(max)),CHARINDEX('.',CAST(SERVERPROPERTY('ProductVersion') AS nvarchar(max))) - 1) + '.' + REPLACE(RIGHT(CAST(SERVERPROPERTY('ProductVersion') AS nvarchar(max)), LEN(CAST(SERVERPROPERTY('ProductVersion') AS nvarchar(max))) - CHARINDEX('.',CAST(SERVERPROPERTY('ProductVersion') AS nvarchar(max)))),'.','') AS numeric(18,10))
`
SQL Server version and edition
select @@Version
Microsoft SQL Azure (RTM) - 12.0.2000.8 Oct 5 2025 12:46:44 Copyright (C) 2022 Microsoft Corporation
DECLARE @Version numeric(18,10) = CAST(LEFT(CAST(SERVERPROPERTY('ProductVersion') AS nvarchar(max)),CHARINDEX('.',CAST(SERVERPROPERTY('ProductVersion') AS nvarchar(max))) - 1) + '.' + REPLACE(RIGHT(CAST(SERVERPROPERTY('ProductVersion') AS nvarchar(max)), LEN(CAST(SERVERPROPERTY('ProductVersion') AS nvarchar(max))) - CHARINDEX('.',CAST(SERVERPROPERTY('ProductVersion') AS nvarchar(max)))),'.','') AS numeric(18,10))
select @Version
12.0200080000
Version of the script
2025-12-20 18:52:13
What command are you executing?
EXECUTE dbo.IndexOptimize
@databases = 'ALL_DATABASES',
@FragmentationLow = NULL,
@FragmentationMedium = NULL,
@FragmentationHigh = NULL,
@UpdateStatistics = 'ALL',
@StatisticsSample = 100,
@OnlyModifiedStatistics = 'Y',
@Maxdop = '2',
@LogToTable = 'Y'
What output are you getting?
SELECT TOP (50) command FROM [DBAdmin].[dbo].[CommandLog] where commandtype='UPDATE_STATISTICS' order by ID desc
UPDATE STATISTICS [dbo].[RQ_XML] [_WA_Sys_00000006_6DC81E57] WITH FULLSCAN
UPDATE STATISTICS [dbo].[RQ_XML] [_WA_Sys_00000005_6DC81E57] WITH FULLSCAN
UPDATE STATISTICS [dbo].[RQ_XML] [RQ_XML_Ref_Num_ix] WITH FULLSCAN
UPDATE STATISTICS [dbo].[RQ_XML] [PK_RQ_XML] WITH FULLSCAN
UPDATE STATISTICS [dbo].[RQ_Status] [_WA_Sys_00000006_4820CD05] WITH FULLSCAN
UPDATE STATISTICS [dbo].[RQ_Status] [_WA_Sys_00000005_4820CD05] WITH FULLSCAN
UPDATE STATISTICS [dbo].[RQ_Status] [_WA_Sys_00000004_4820CD05] WITH FULLSCAN
UPDATE STATISTICS [dbo].[RQ_Status] [_WA_Sys_00000003_4820CD05] WITH FULLSCAN
as a workaround i updated script to check version > 12 instead of 12.06024