Как я могу избежать предупреждения о чрезмерном предоставлении гранта здесь? Или мне даже нужно беспокоиться об этом? - PullRequest
0 голосов
/ 10 июля 2019

Я написал хранимую процедуру, которая ожидает VARCHAR, представляющий некоторые данные в формате XML.Вот пример того же самого:

'<Documents><Filters><DocClasses><DocClass Value="QUO" /></DocClasses></Filters></Documents>'

Я обрабатываю XML, чтобы заполнить переменную таблицы:

DECLARE @DocClassesFiltered        BIT
DECLARE @DocClasses                TABLE
       ([DocClass]                 VARCHAR(3)           PRIMARY KEY)
SET @DocClassesFiltered = 0

Я использую sp_xml_preparedocument и т. Д., Который является стандартным для болота, поэтому я не буду утомлять васдокументируя это.Достаточно сказать, что я храню его дескриптор в переменной с именем @ idoc

. Затем я заполняю переменную таблицы следующим образом:

IF EXISTS
  (SELECT TOP 1 1
     FROM OPENXML(@idoc, 'Documents/Filters/DocClasses/DocClass', 2)
             WITH([Value]          VARCHAR(3)     '@Value') [DAL])
  BEGIN
    SET @DocClassesFiltered = 1

    INSERT
      INTO @DocClasses
          ([DocClass])
    SELECT [Value]
      FROM OPENXML(@idoc, 'Documents/Filters/DocClasses/DocClass', 2)
              WITH([Value]          VARCHAR(3)     '@Value') [DAL]
  END

В выводе «Фактический план выполнения» это приводит кпредупреждение Грант памяти запроса обнаружил «ExcessiveGrant», что может повлиять на надежность.Размер гранта .... (и т. Д.)

Мои вопросы: 1) Нужно ли вообще об этом беспокоиться?2) Если так, как я могу избежать этого?

1 Ответ

0 голосов
/ 17 июля 2019

Я предотвратил чрезмерное предоставление, сначала посчитав количество строк, а затем используя результат в ТОПе.Это, по-видимому, приводит к тому, что SQL предлагает гораздо лучшую оценку необходимой памяти, а предупреждение «Чрезмерное предоставление» «исчезает».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...