Как разделить на основе месяца и года в хранилище данных SQL Azure
Я собираюсь использовать ADF для копирования 5 миллиардов строк в хранилище данных SQL Azure. Azure SQL DWH по умолчанию распределит таблицу на 60 распределений, но я хочу добавить еще 50 разделов на основе месяца и года следующим образом:
PARTITION ( DateP RANGE RIGHT FOR VALUES
(
'2015-01-01', 2015-02-01', ......2018-01-01','2018-02-01','2018-03-01','2018-04-01','2018-5-01',.......
))
Но столбец, который я использую для разделения таблицы, включает дату и время:
2015-01-01 00:30:00
Как вы думаете, мой подход к разбиению верен?
2 ответа
5B строк / (50 разделов x 60 распределений) = 1,7 миллиона строк / раздел в среднем
Вероятно, это слишком много разделов, но если у вас много запросов на один месяц, это может стоить того. Вы определенно захотите дефрагментировать ваши хранилища колонок после загрузки.
Я склонен согласиться с Дэвидом, что это, вероятно, излишнее количество разделов. Вы захотите убедиться, что у вас достаточно равномерное распределение данных, и с 1,7 миллионами строк или около того вы окажетесь на нижней стороне. Вероятно, вы можете перейти к разделам на основе квартала (например, "2017-12-31", "2018-03-01", "2018-06-30"), чтобы получить хорошие результаты для производительности запросов. Это даст вам 4 раздела в год с 2015 года (или 20 всего). Итак, математика такова:
5B строк / (20 разделов * 60 распределений) = 4.167M строк / раздел.
Хотя количество разделов имеет значение для сценариев удаления разделов, это таблица фактов с индексами columnstore, которая будет выполнять дополнительный уровень исключения сегментов индекса во время запроса. Чрезмерное разделение может сделать ситуацию хуже, а не лучше.
В руководстве Microsoft указано, что при определении размера разделов, особенно для индексированных таблиц columnstore в Azure DW, МИНИМАЛЬНЫЙ том ДОЛЖЕН составлять 60 миллионов строк на раздел. Все, что ниже, НЕ может обеспечить оптимальную производительность. Логика этого состоит в том, что должно быть МИНИМУМ 1 M строк на распределение на раздел. Поскольку каждый созданный раздел будет внутренне создавать шестьдесят дополнительных дистрибутивов, минимум работает до 60M на раздел, который предлагается создать.