Постановка таблицы дизайна для производительности - PullRequest
0 голосов
/ 26 февраля 2019

В моем хранилище данных SQL Azure есть типичная схема звездочки.Данные сначала выгружаются в промежуточные таблицы через фабрику данных, затем она вызывает основную процедуру, которая вызывает другие процедуры для преобразования данных в соответствующий формат, а затем очищает промежуточные таблицы для этого фрагмента данных.

Должны ли эти промежуточные таблицы иметь индексы?Должны ли они иметь статистику?Я недавно обновился до Gen 2, но у меня не включена функция автоматического создания статистики.Я беспокоюсь о том, что статистика будет создаваться, но не обновляться, и поэтому в конечном итоге все будет замедляться больше, чем что-либо.

Для большего контекста существует процедура перестроения индексов и обновления статистики, которая запускается в одночасье, один раз в день.день.Процесс загрузки данных выполняется ежечасно.

Ответы [ 2 ]

0 голосов
/ 04 марта 2019

Некоторые данные с моей стороны - Ваша таблица фактов должна быть разделена.на самом деле у вас должна быть работа, которая автоматически создает разделы.насколько велика таблица фактов?если ваша таблица фактов становится слишком большой, то, исходя из ваших требований, вы можете подумать о введении архивации старой таблицы, если она не требуется в таблице фактов.

0 голосов
/ 27 февраля 2019

Учитывая, что это промежуточные таблицы, наибольшее влияние будет иметь следующее:

Где возможно, используйте распределение хешей.Это даст наилучшую производительность при обработке таблицы на последующих шагах.В то время как документация иногда предлагает распределение round_robin, и это немного быстрее для приема, следующий запрос к таблице будет медленнее.

Всегда используйте статистику.Я предлагаю создавать их вручную, исходя из ожидаемого использования, для большей предсказуемости производительности ELT.Если вы не создадите и не обновите статистику, то в будущем вы получите ужасную производительность.Если вы не хотите вручную управлять статистикой, обязательно включите автоматическую статистику.

Рассмотрим использование табличных структур HEAP и CLUSTERED COLUMNSTORE для промежуточных таблиц.Как правило, промежуточные таблицы обрабатываются по всей строке, и вы можете обнаружить, что ваша производительность лучше на промежуточном уровне, если вы используете HEAP.Это необходимо проверить на ваших данных, поскольку кэширование Gen2, которое дает гораздо большую производительность, не применяется к таблицам кучи.

Определенно создайте таблицы фактов и измерений в качестве кластеризованных индексов хранилища столбцов.Хешируйте ваши факты и реплицируйте ваши измерения (если у вас нет миллиардов измерений строк, в этом случае распределение хешей может быть более подходящим).

Если вы используете алгоритмы CTAS, вам нужна некластеризованнаяиндексы должны быть очень низкими.Обычно я добавляю индексы только тогда, когда вижу проблему с производительностью запроса, которую я не могу решить никаким другим способом.

Наконец, убедитесь, что вы используете подходящий DWU и класс ресурсов.Общее практическое правило заключается в том, что вы не должны использовать ELT ниже DWU500 и LARGERC.Если вы этого не сделаете, вы обнаружите, что у вас плохие кластерные индексы columnstore, что приведет к будущим проблемам с производительностью.

...