Skip to content

Indexoptimze does not recognize sql managed instance version properly and therefore does not use maxdop #984

@sgrant914

Description

@sgrant914

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions