Hash Match (Aggregate) -> проблема производительности агрегирования потока после миграции в Azure - PullRequest
0 голосов
/ 18 апреля 2019

После переноса базы данных с сервера onprem в Azure у меня возникла проблема с производительностью запроса, которую вы можете найти ниже.

План фактического выполнения Azure: https://ufile.io/o0z6ve6q

План фактического выполнения Onprem: https://ufile.io/9kj3nc7d

В Azure он поставляется с Stream Aggregate, который требует сортировки данных, поэтому сортировка используется перед Stream Aggregate.

Можно ли как-то легко решить эту проблему, не перестраивая сам запрос?

Предыдущим экземпляром был SQL Server 2008, а azure - 2016.

ВЫБРАТЬ

        [CommunicationId]

        , CASE WHEN [SurveyPageName] like '%dystrybucja%' OR [SurveyPageName] LIKE '%pytania dodatkowe%' THEN [SurveyPageName] ELSE 
          ISNULL(LTRIM(RIGHT([SurveyPageName], LEN([SurveyPageName]) - CHARINDEX('-', [SurveyPageName]))),'')
          END
                +CASE WHEN [SurveyLineName] = 'Material range - Flexible Questions' THEN ''
                  WHEN [SurveyLineName] = 'Materials in catalogue - Products' THEN ''
                  WHEN [SurveyLineName] LIKE 'Zakres produktów%' THEN ''
                   ELSE '.'+ISNULL([SurveyLineName],'')
                  END
                  +CASE WHEN SurveyQuestion='ANS Y/N' THEN ''
                    ELSE '.'+ISNULL(SurveyQuestion,'.')
                    END
                  +CASE WHEN fac.SurveyProductId IS NULL THEN ''
                        WHEN SurveyProductName IS NULL THEN ''
                        WHEN SurveyProductName = SurveyLineName THEN ''
                        ELSE '.'+SurveyProductName
                     END AS [Question]

        ,MAX(CASE WHEN SurveyQuestion='Lost Since Last Visit' AND ISNULL([AnswerValue],[AnswerText]) < 0 THEN 0 
                  ELSE ISNULL([AnswerValue],[AnswerText])
                  END) AS Answer


      FROM FactSurvey fac with (nolock)
      LEFT JOIN DimSurvey dim with (nolock) ON dim.[DimSurveyKey] = fac.[DimSurveyKey]
      WHERE dim.IsText = 0
      AND [SurveyPageName] NOT LIKE 'Wagi produktów%'
      AND dim.SurveyQuestion NOT like '%RA'
      AND [SurveyPageName] NOT LIKE 'Territory_KPI_Calculation'
      AND [SurveyQuestion] NOT LIKE N'Szerokosc produktów%'
      AND [SurveyQuestion] NOT LIKE N'Szer.%miej.%ekspo%'
      AND [SurveyQuestion] NOT LIKE N'Weight'
      AND [SurveyQuestion] NOT LIKE N'Only%for%'
      AND [SurveyPageName] NOT LIKE N'KPI%'
      AND ([SurveyPageName] NOT LIKE N'Report_Perfect Store%' 
        OR ([SurveyPageName]+[SurveyQuestion] LIKE  N'Report_Perfect Store%' + N'%[%]%'
        OR [SurveyPageName]+[SurveyQuestion] LIKE  N'Report_Perfect Store%' + N'%decimal%'))
      GROUP BY [CommunicationId]
                      ,CASE WHEN [SurveyPageName] like '%dystrybucja%' OR [SurveyPageName] LIKE '%pytania dodatkowe%' THEN [SurveyPageName] ELSE 
                      ISNULL(LTRIM(RIGHT([SurveyPageName], LEN([SurveyPageName]) - CHARINDEX('-', [SurveyPageName]))),'')
                      END
                  +CASE WHEN [SurveyLineName] = 'Material range - Flexible Questions' THEN ''
                  WHEN [SurveyLineName] = 'Materials in catalogue - Products' THEN ''
                  WHEN [SurveyLineName] LIKE 'Zakres produktów%' THEN ''
                   ELSE '.'+ISNULL([SurveyLineName],'')
                  END
                  +CASE WHEN SurveyQuestion='ANS Y/N' THEN ''
                    ELSE '.'+ISNULL(SurveyQuestion,'.')
                    END
                  +CASE WHEN fac.SurveyProductId IS NULL THEN ''
                        WHEN SurveyProductName IS NULL THEN ''
                        WHEN SurveyProductName = SurveyLineName THEN ''
                        ELSE '.'+SurveyProductName
                     END
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...