Параллельное обновление статистики


14

В SQL Server 2008 или более поздней версии UPDATE STATISTICS WITH FULLSCANэто однопоточная операция или она может использовать параллелизм? Как насчет обновления статистики с выборкой по умолчанию - может ли она использовать параллелизм? Я не вижу опции, указывающей MAXDOPс обновлением статистики.

Ответы:


22

Параллельное обновление статистики доступно с SQL Server 2005. Оно описано в статье TechNet «Статистика, используемая оптимизатором запросов в Microsoft SQL Server 2005» :

Извлечение статьи

Когда выполняется полное сканирование (независимо от того, запрошено это явно или нет), внутренний запрос, сгенерированный для сбора данных, имеет общую форму:

SELECT
    StatMan([SC0])
FROM 
(
    SELECT TOP 100 PERCENT
        [Column] AS [SC0]
    FROM [Table] WITH (READUNCOMMITTED)
    ORDER BY [SC0]
) AS _MS_UPDSTATS_TBL
OPTION (MAXDOP 16)

Обратите внимание на MAXDOPподсказку (хотя пользователь не может указать подсказку вручную). Там, где собирается выборочная статистика, внутренний запрос используетTABLESAMPLE предложение, которое предотвращает параллелизм. Движок также генерирует MAXDOP 1подсказку на внутренний запрос, который немного избыточен.

Если вам когда-либо понадобится уменьшить параллелизм, MAXDOPподсказку во внутреннем запросе можно переопределить с помощью регулятора ресурсов. (только для предприятия).

SQL Server 2016 добавляет параллельное обновление выборки статистики.


1

Начиная с SQL Server 2016 SP2 вы можете использовать MAXDOPопцию.

Обновление добавляет поддержку опции MAXDOP для операторов CREATE STATISTICS и UPDATE STATISTICS :

В этом обновлении добавлена ​​поддержка опции MAXDOP для операторов CREATE STATISTICS и UPDATE STATISTICS в Microsoft SQL Server 2016 и 2017. Это позволяет переопределить параметр по умолчанию для максимальной степени параллелизма (MAXDOP), заданный на уровне базы данных или сервера.

Примечание. Полученная степень параллелизма ограничивается параметром MAX_DOP группы рабочей нагрузки, если используется регулятор ресурсов.

Например, предположим, что используется таблица Sales.SalesOrderDetail и для нее уже создано несколько статистических данных. В этом случае следующий скрипт обновляет каждую статистику со степенью параллелизма, равной 8.

UPDATE STATISTICS Sales.SalesOrderDetail WITH MAXDOP = 8

-3

ОБНОВЛЕНИЕ СТАТИСТИКА не имеет какого-либо внутреннего параллелизма. Неважно, работаете ли вы с FULLSCAN или SAMPLING. Конечно, вы можете запустить несколько команд UPDATE STATISTICS одновременно, по одному на другом соединении, с помощью нескольких заданий агента SQL или некоторой другой ухищрения. В зависимости от конкретной ситуации с оборудованием и данными, вы можете обнаружить, что простая переиндексация таблиц выполняется быстрее, чем ОБНОВЛЕНИЕ СТАТИСТИКИ с FULLSCAN, и, возможно, является лучшим вариантом.


Я прошу прощения за уценку, но вы понятия не имеете, о чем говорите. Из этого документа msdn.microsoft.com/en-us/library/dd535534(v=sql.100).aspx "Параллельный сбор статистики для полного сканирования : для статистики, собираемой с помощью полного сканирования , создание одного объекта статистики может выполняться параллельно для как разделенные, так и разделенные таблицы. " Однако я не вижу параллелизма при использовании UPDATE STATISTICS с полным сканированием таблицы на 30 миллионов строк
SQL Learner,

Кроме того, обновление статистики берет блокировку стабильности схемы, поэтому, если вы запустите другую статистику обновления, она будет ждать до завершения предыдущей.
Ученик SQL

4
@SQLLearner: Не обижайся, но независимо от правильности этого ответа, почему ты задаешь этот вопрос, если прочел этот документ? Это дает вам ответ на все, что вы просили. Если вы не видите параллелизма в вашем конкретном сценарии, то, пожалуйста, отредактируйте вопрос, указав это и любые другие соответствующие детали.
Джон Зигель

Джон Зигель, найдя и прочитав технический документ после публикации вопроса, однако поиски в Интернете все еще не уверены, может ли обновление statis использовать параллелизм.
Ученик SQL

4
Вы правы, в отношении белой книги и SQL2008. Я только что прочитал эту белую книгу; информация в моей голове устарела. У меня было много проблем с sql2005 или, может быть, даже с sql2000 в отношении переиндексации, UPDATE STATISTICS, FULLSCAN и SAMPLE, времени, необходимого для работы, и стохастического качества данных на страницах статистики. Я полагаю, что вся эта боль теперь вода под мостом. Я бы сказал, что вы можете запускать UPDATE STATS для разных таблиц параллельно, но это кажется большим количеством проблем, чем оно того стоит, и у вас может быть слишком много конфликтов ввода-вывода, чтобы оно того стоило.
пролив
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.