Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Глубина секционирования  [new]
Студент123,
Guest
Добрый день коллеги.

Подскажите пожалуйста, хочу усвоить секционирования, но не могу найти разумного объяснения, какова должна быть глубина? месяц или год, на что именно базироваться.
Моя таблица фактов:

Select  YEAR(DateDoc)  as [YEAR]
      , MONTH(DateDoc) as [MONTH]
	  , COUNT(DateDoc) as [COUNT_ROW]
From Table1
Group by YEAR(DateDoc)
       , MONTH(DateDoc) 
Order by YEAR(DateDoc)
       , MONTH(DateDoc)


+

YEAR MONTH COUNT_ROW
2007 1 302289
2007 2 311134
2007 3 282051
2007 4 284513
2007 5 288121
2007 6 273023
2007 7 321245
2007 8 426289
2007 9 357626
2007 10 386056
2007 11 337846
2007 12 333960
2008 1 356703
2008 2 394781
2008 3 336620
2008 4 342780
2008 5 313360
2008 6 319919
2008 7 384719
2008 8 464021
2008 9 485014
2008 10 426619
2008 11 334426
2008 12 388153
2009 1 372972
2009 2 395312
2009 3 383943
2009 4 392895
2009 5 350238
2009 6 418417
2009 7 495574
2009 8 627192
2009 9 621377
2009 10 560079
2009 11 529901
2009 12 592524
2010 1 444790
2010 2 517020
2010 3 554298
2010 4 496996
2010 5 463083
2010 6 516949
2010 7 532522
2010 8 737412
2010 9 711524
2010 10 634057
2010 11 627221
2010 12 667138
2011 1 589625
2011 2 635931
2011 3 647923
2011 4 621193
2011 5 609526
2011 6 611887
2011 7 641958
2011 8 909080
2011 9 857626
2011 10 732949
2011 11 764772
2011 12 782621
2012 1 707373
2012 2 786102
2012 3 762772
2012 4 689723
2012 5 704651
2012 6 663629
2012 7 766803
2012 8 941309
2012 9 843691
2012 10 818658
2012 11 773075
2012 12 790492
2013 1 786625
2013 2 801110
2013 3 708594
2013 4 743286
2013 5 660382
2013 6 659829
2013 7 828092
2013 8 982950
2013 9 969335
2013 10 942836
2013 11 845140
2013 12 921586
2014 1 829031
2014 2 857427
2014 3 772968
2014 4 814434
2014 5 740582
2014 6 735686
2014 7 909446
2014 8 1053598
2014 9 1084142
2014 10 979139
2014 11 808984
2014 12 972143
2015 1 742388
2015 2 758832
2015 3 772267
2015 4 779860
2015 5 694760
2015 6 762500
2015 7 882464
2015 8 1090699
2015 9 1123834
2015 10 998700
2015 11 928750
2015 12 1082105
2016 1 870409
2016 2 977248
2016 3 982719
2016 4 937145
2016 5 905641
2016 6 969916
2016 7 273198


исходя из таблички до какой глубины лучше секционировать данные, для снижения обработки отчетов и процессинга кубов?
в чем преимущество в нескольких файловых группах или лить в одну группу?
14 июл 16, 12:40    [19408612]     Ответить | Цитировать Сообщить модератору
 Re: Глубина секционирования  [new]
Студент123,
Guest
забыл...

Microsoft SQL Server 2016 (RTM) - 13.0.1601.5 (X64) Apr 29 2016 23:23:58 Copyright (c) Microsoft Corporation Enterprise Evaluation Edition (64-bit) on Windows Server 2012 R2 Standard 6.3 <X64> (Build 9600: ) (Hypervisor)
14 июл 16, 12:42    [19408623]     Ответить | Цитировать Сообщить модератору
 Re: Глубина секционирования  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4804
Студент123,,

Глубину секционирования вам надо определить эмпирическим путем. Секционировать так и так и посмотреть, как лучше работают ваши запросы, насколько компактно ложатся данные и т.д. Нет ответа на вопрос как точно надо. Надо экспериментировать и думать.
14 июл 16, 13:08    [19408806]     Ответить | Цитировать Сообщить модератору
 Re: Глубина секционирования  [new]
Студент123,
Guest
a_voronin
Студент123,,

Глубину секционирования вам надо определить эмпирическим путем. Секционировать так и так и посмотреть, как лучше работают ваши запросы, насколько компактно ложатся данные и т.д. Нет ответа на вопрос как точно надо. Надо экспериментировать и думать.

Спасибо! Я Вас понял, почти все запросы в SSRS будут иметь одну аналитическую цель, сопоставление расчетных показателей периодов (выбранных пользователем в месяцах или просто месяц) к аналогичным прошлых нескольких лет или предшествующим (на примере квартала), в моем случае глубина должна быть "Месячная".

Но БД (DWH) актуализируется по скользящиму месяцу т.е. последние 30 дней, как тут лучше поступить с колоночными индексами? мало представляю как с ними работать в реальной жизни, архитектуру данного индекса уже усвоил, но не имел дела с ним.
14 июл 16, 13:17    [19408872]     Ответить | Цитировать Сообщить модератору
 Re: Глубина секционирования  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5111
Студент123,,
тут два момента:
1. производительность ХД (загрузка данных)
2. производительность запросов к ХД

по п.2 нужно идти от запросов с учётом того, что секции будут использоваться для фильтрации только если в запросе есть условие по ключу секции
14 июл 16, 13:41    [19409008]     Ответить | Цитировать Сообщить модератору
 Re: Глубина секционирования  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4804
Студент123,
a_voronin
Студент123,,

Глубину секционирования вам надо определить эмпирическим путем. Секционировать так и так и посмотреть, как лучше работают ваши запросы, насколько компактно ложатся данные и т.д. Нет ответа на вопрос как точно надо. Надо экспериментировать и думать.

Спасибо! Я Вас понял, почти все запросы в SSRS будут иметь одну аналитическую цель, сопоставление расчетных показателей периодов (выбранных пользователем в месяцах или просто месяц) к аналогичным прошлых нескольких лет или предшествующим (на примере квартала), в моем случае глубина должна быть "Месячная".

Но БД (DWH) актуализируется по скользящиму месяцу т.е. последние 30 дней, как тут лучше поступить с колоночными индексами? мало представляю как с ними работать в реальной жизни, архитектуру данного индекса уже усвоил, но не имел дела с ним.


От колоночных индексов хорошо работают аггрегаты и оконные функции, также в некоторых случаях хорошо работают JOINы, но вставка в одну огромную секцию колоночного индекса может стать очень долгой операцией. Поэтому есть смысл партиционировать его в разрезе порций загрузки (по дням, месяцам, номерам загрузки и т.п.)
14 июл 16, 16:07    [19409871]     Ответить | Цитировать Сообщить модератору
 Re: Глубина секционирования  [new]
Студент123,
Guest
Что-то не догоняю, ETL реализована скриптом, поочередно запускает некоторые ХП с параметрами, затем в одной транзакции переливает данные из промежуточной в DWH.

Созданное секционирование по таблице фактов, дало не тормоза на удаление с последующей вставкой данных (актуализация) а наоборот прирост примерно на 10-20%, ожидал полностью противоположное. Подскажите пожалуйста как мониторить выгоду или проигрыш используемой функции секционирования.

----
Колоночный индекс, возможно ли?
ETL отрабатывает ежедневно и раз в месяц берет данные за последние два месяца (т.к. редактирование документов задним числом не запрещено, но гарантированно бизнесом что это уложиться в этот период)

Ближе к делу: в таблице фактов держать неизменные данные как оно и должно быть (без последних двух месяцев), при этом ежедневные пакеты заливать в дополнительную таблицу (дубль таблицы фактов) и раз в месяц актуализировать эти данные. Как только в таблице наберется два месяца (к примеру авг. и сент.), создавать в фактах новую секцию (из примера авг.) и перемещать туда данные В полном объеме. Это позволит мне использовать колоночный индекс, без всякого извращения (удаление, создание индекса). В запросах использовать Вьюшку dbo.Fakt union dbo.StageFakt

Или может есть способ более рационального подхода?
15 июл 16, 09:25    [19412517]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить