Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Вступление в партицирование
|
|||
|---|---|---|---|
|
#18+
Yasha123Владислав Колосовfelix_ff, у меня как раз ситуация с большим количеством ad hoc запросов и достаточно широкой таблицей, по которой все наборы индексов строить не оптимально. Разделение на секции дало многократный рост производительности, поскольку запросы обращаются к относительно небольшим интервалам временнЫх меток данных. Теперь мне интересно проверить - как изменится план и производительность, если я уберу секции и оставлю тот же кластерный индекс. так если вам "помогло" секционирование, то ключ секционирования присутствовал во всех where. значит, дата есть во всех этих таблицах и кластерный по дате вам обеспечил бы ровно такой же выборочный просмотр диапазонаУгу, тут нужно не "оставлю тот же кластерный индекс", а "сделаю вместо партицирования такой кластерный индекс, который обеспечсит работу в той же области диска, как и партицирование". Как в примере invm на самом деле показано не увеличение производительности при секционировании, наоборот, показано уменьшение производительности без секционирования, в случае, когда столбец не первый в индексе:invmНо в реальности увеличение производительности при секционировании вполне возможно. Например, когда столбец секционирования не первый в индексе. Но зачем его делать не первым? Если таблица секционируется по дате, дата, разумеется, всегда включена в запросы (иначе секционирование не будет работать), тогда достаточно вместо секционирования просто сделвать дату первым полем в кластерном индексе, и запросы с и без секционирования будут выполняться одинаково по скорости. А то странное сравнение - давайте сравним запрос к секции, с запросом к таблице без индексов - ооо, секционирование рулит!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2019, 19:35 |
|
||
|
Вступление в партицирование
|
|||
|---|---|---|---|
|
#18+
alexeyvgЕсли таблица секционируется по дате, дата, разумеется, всегда включена в запросы (иначе секционирование не будет работать)Не должна. Секционирование работать будет, а вот partition elimination -- нет. Просто придется лазить во все партиции: при скане и так понятно, при поиске по индексу -- будет seek в каждую партицию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2019, 19:56 |
|
||
|
Вступление в партицирование
|
|||
|---|---|---|---|
|
#18+
Гавриленко Сергей АлексеевичalexeyvgЕсли таблица секционируется по дате, дата, разумеется, всегда включена в запросы (иначе секционирование не будет работать)Не должна. Секционирование работать будет, а вот partition elimination -- нет. Просто придется лазить во все партиции: при скане и так понятно, при поиске по индексу -- будет seek в каждую партицию.Мы стравниваем затраты на доступ к данным в секционированной таблице, и в несекционированной. А не тонкости работы секционирования. "секционирование не будет работать" - я имел в виду, что не будет выполняться исходная цель - с помощью секционирования уменьшить расходы на выполнение запроса. То есть рассматриваем такую ситуацию: В 2х таблицах есть поле [Год] В первой таблице оно используется для разделения на секции Во второй таблице оно включено в кластерный индекс первым полем. В этих двух вариантах в запросах WHERE [Год] = nnn AND <другие условия> сервер будет читать данные из одной области диска, в первом случае, определённой секционированием, во втором случае диапазонм кластерного индекса. Т.е. разницы в производительности такого запроса не будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2019, 21:36 |
|
||
|
Вступление в партицирование
|
|||
|---|---|---|---|
|
#18+
invm, хочу парировать на тему "секционирование - средство администрирования" т.к. сам пользуюсь именно для ускорения обсчета кубов, а не для удобства управления. но никогда тесты не проводил, а теперь вдруг захотелось. имеем базу и 2 аналогичные таблицы на ~300млн строк, одна (t1) с кластерным индексом по полю типа datetime (со временем), вторая (t2) секционирована по полю типа int в формате YYYYMM (т.е. месяц года) в каждой секции примерно 11млн записей и на том же сервере, но на другом диске куб с тремя измерениями: dates - с 09/2016 по 03/2019, ключ типа int в формате YYYYMMDD clients - примерно 4млн записей, ключ типа bigint sales_orders - ключ типа инт - тупая нумерация продаж в некоем разрезе, не больше 1000 записей и 4 группы мер у которых: 1. из t1 в группу мер sales_1_1 c одной секцией 2. из t1 в группу мер sales_1_N c ежемесячными секциями по условию (пример) sale_date between '20181201' and '20181231 23:59:59' 3. из t2 в группу мер sales_N_1 c одной секцией 4. из t2 в группу мер sales_N_N c ежемесячными секциями по условию (пример) sale_month = 201812 в каждой, 2 меры, сумма по полю sales_fact и distinct_count по полю order_number (связь с измерением sales_order) что накладывает требование по дополнительной сортировке данных. обработка измерений сделана заранее. обработка групп мер - full process. причем, для каждого случая предварительно рестарт SQL и SSAS, и две последовательные обработки, на графиках, каждый раз вторая. дальше графики, единственное пояснение для них всех - гафики начинаются с момента старта процессинга. до начала получения данных (розовый толстый) это как раз и есть работа SQL по сортировке (эту оптимизацию не делал нигде, никак). (модераторов прошу простить за широкие графики и пустые места, которые можно было бы сократить, но сделано это только для удобства сравнения) смотрим: ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2019, 17:07 |
|
||
|
Вступление в партицирование
|
|||
|---|---|---|---|
|
#18+
sales_1_1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2019, 17:08 |
|
||
|
Вступление в партицирование
|
|||
|---|---|---|---|
|
#18+
sales_1_N ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2019, 17:09 |
|
||
|
Вступление в партицирование
|
|||
|---|---|---|---|
|
#18+
sales_N_1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2019, 17:09 |
|
||
|
Вступление в партицирование
|
|||
|---|---|---|---|
|
#18+
sales_N_N ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2019, 17:10 |
|
||
|
Вступление в партицирование
|
|||
|---|---|---|---|
|
#18+
да, забыл, в настройках процессинга 20 соединений максимум, т.е. одновременно не более 20 секций ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2019, 17:12 |
|
||
|
Вступление в партицирование
|
|||
|---|---|---|---|
|
#18+
Столбец секционирования действительно у меня не первый в индексе, мне он и не нужен первым. Например ID (уникальный) + DATE (секции). Я выбираю в этом случае одну строку поиском по ID или выбираю просмотр секции запросом диапазона дат или использую дополнительные фильтры. Для AdHoc запросов по нагруженной таблице это отличный вариант, т.к. избавляет меня от хранения и поддержания многочисленных индексов. Я к тому, что утверждение "секционирование только для администрирования" не является истинным. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2019, 17:29 |
|
||
|
Вступление в партицирование
|
|||
|---|---|---|---|
|
#18+
Гипотетически. Мне требуется ежемесячно выполнять сложный расчет для накопленных данных в одной таблице. Я создаю 20 секций, создаю сиквенс, который разбрасывает данные по секциям. У меня 100500 ядер и я запускаю в параллель 20 расчетов, каждый из которых съедает 4-6 ядер. Вот и профит от секционирования. Если не ошибаюсь, сейчас придумали эскалацию до секции, так что удержаний таблицы не будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2019, 17:38 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=39783244&tid=1688161]: |
0ms |
get settings: |
6ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
130ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
63ms |
get tp. blocked users: |
2ms |
| others: | 248ms |
| total: | 483ms |

| 0 / 0 |
