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

Откуда:
Сообщений: 2
Всем доброго времени суток.

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

Кто с чем сталкивался, кто что может посоветовать?

Я немного тестировал с выводом плана выполнения запроса секционированную таблицу и не секционированную. Тестировал на таблице с 10 миллионами записей. Update, Select. По времени выполнения что Update что Select отрабатывает одинаково. При выборке разницу можно увидеть только в плане выполнения запроса. см. ниже.
21 апр 17, 02:07    [20420664]     Ответить | Цитировать Сообщить модератору
 Re: Секционирование в MS SQL Server  [new]
kossql
Member

Откуда:
Сообщений: 2


К сообщению приложен файл. Размер - 50Kb
21 апр 17, 02:07    [20420665]     Ответить | Цитировать Сообщить модератору
 Re: Секционирование в MS SQL Server  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31371
kossql
Всем доброго времени суток.

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

Кто с чем сталкивался, кто что может посоветовать?

Я немного тестировал с выводом плана выполнения запроса секционированную таблицу и не секционированную. Тестировал на таблице с 10 миллионами записей. Update, Select. По времени выполнения что Update что Select отрабатывает одинаково. При выборке разницу можно увидеть только в плане выполнения запроса. см. ниже.
Быстродействие либо не изменится, либо может упасть.

Удаление старых данных можно сделать быстрым, если это решается удалением секции.

Так же можно очень сильно ускорить загрузку данных при определённых условиях.
21 апр 17, 02:12    [20420667]     Ответить | Цитировать Сообщить модератору
 Re: Секционирование в MS SQL Server  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36989
kossql
Хотелось бы поговорить и послушать о секционировании таблиц для улучшения быстродействия
Секционирование улучшает быстродействие примерно так же, как оператор delete.
kossql
кто что может посоветовать
Я могу посоветовать проблему озвучить, которую вы пытаетесь решать.
kossql
Тестировал на таблице с 10 миллионами записей. Update, Select.По времени выполнения что Update что Select отрабатывает одинаково.
Я тут потестировал. Запрос "select 1" по скорости уделывает все остальные запросы, и даже с секционированием заморачиваться не надо.
21 апр 17, 02:15    [20420668]     Ответить | Цитировать Сообщить модератору
 Re: Секционирование в MS SQL Server  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31371
kossql
При выборке разницу можно увидеть только в плане выполнения запроса. см. ниже.
Тест ничего не показывающий.
Если у вас FinishDate является условием для любых запросов, то нужно его включать в индексы, или, скорее всего, включить в кластерный индекс.
А если не является, то и секционирование не будет использовано.
21 апр 17, 02:17    [20420669]     Ответить | Цитировать Сообщить модератору
 Re: Секционирование в MS SQL Server  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 33702
Блог
вполне себе улучшает быстродействие при попадании в нужную секцию
21 апр 17, 07:55    [20420805]     Ответить | Цитировать Сообщить модератору
 Re: Секционирование в MS SQL Server  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
Критик
вполне себе улучшает быстродействие при попадании в нужную секцию
Это если всю секцию просканировать надо?
21 апр 17, 22:30    [20424024]     Ответить | Цитировать Сообщить модератору
 Re: Секционирование в MS SQL Server  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31371
Критик
вполне себе улучшает быстродействие при попадании в нужную секцию
Попадание в нужную секцию эквивалентно сканированию диапазону ключа кластерного индекса.
Естественно, если данные позволяют сделать секционирование, то логично кластерный индекс сделать по тому полю, по которому будет разделение на секции, и которое будет во всех запросах.
Раз уж такой случай, что нужно сканировать секции. Хотя это само по себе очень странно.

Или вы не про сканирование секции?
22 апр 17, 01:48    [20424228]     Ответить | Цитировать Сообщить модератору
 Re: Секционирование в MS SQL Server  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 33702
Блог
alexeyvg,

с кластерным индексом конечно так, но иногда его нельзя/не так просто создать из-за ПО, которое работает с базой
22 апр 17, 10:18    [20424422]     Ответить | Цитировать Сообщить модератору
 Re: Секционирование в MS SQL Server  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31371
Критик
alexeyvg,

с кластерным индексом конечно так, но иногда его нельзя/не так просто создать из-за ПО, которое работает с базой
Тогда речь об очень специфических случаях.

И в ответ на "Хотелось бы поговорить и послушать о секционировании таблиц для " желательно это упомянуть.

А то люди втыкают секционирование, "что бы было побыстрее", и получают катастрофу.

Вот у нас очень квалифицированные ребята, но по WEBу, воткнули несколько лет назад секционирование в базу, и система остановилась, на несколько недель, потому что база большая, и откатить назад было нереально.
Вот как раз тогда меня и взяли на эту работу :-)
22 апр 17, 20:02    [20425416]     Ответить | Цитировать Сообщить модератору
 Re: Секционирование в MS SQL Server  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
Критик
alexeyvg,

с кластерным индексом конечно так, но иногда его нельзя/не так просто создать из-за ПО, которое работает с базой
Видать очень капризное ПО. Кластерный создать нельзя, а секционирование можно.
24 апр 17, 22:45    [20431146]     Ответить | Цитировать Сообщить модератору
 Re: Секционирование в MS SQL Server  [new]
o-o
Guest
Mind
Критик
alexeyvg,

с кластерным индексом конечно так, но иногда его нельзя/не так просто создать из-за ПО, которое работает с базой
Видать очень капризное ПО. Кластерный создать нельзя, а секционирование можно.

ооо, на ловца и зверь бежит.
у нас тут сегодня симпозиум какой-то по секционированию.
на все вкусы.
приглашаю 2 соседние темы почитать для расширения кругозора
24 апр 17, 22:49    [20431155]     Ответить | Цитировать Сообщить модератору
 Re: Секционирование в MS SQL Server  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31371
Mind
Критик
alexeyvg,

с кластерным индексом конечно так, но иногда его нельзя/не так просто создать из-за ПО, которое работает с базой
Видать очень капризное ПО. Кластерный создать нельзя, а секционирование можно.
Такое реально есть.
Секционирование более прозрачно для приложений.
Может, оно слишком сложно для этих "программистов"?. Вот получить список индексов и констрейнов на таблице они могут, и проверяют, что бы никто не испортил их гениальное творение инедксами и прочим.
25 апр 17, 00:22    [20431250]     Ответить | Цитировать Сообщить модератору
 Re: Секционирование в MS SQL Server  [new]
IDVT
Member

Откуда:
Сообщений: 313
alexeyvg
....Так же можно очень сильно ускорить загрузку данных при определённых условиях.
можно немного подробнее, про ускорение загрузки? или речь идет о bulk insert?
25 апр 17, 10:28    [20431752]     Ответить | Цитировать Сообщить модератору
 Re: Секционирование в MS SQL Server  [new]
uaggster
Member

Откуда:
Сообщений: 827
IDVT
alexeyvg
....Так же можно очень сильно ускорить загрузку данных при определённых условиях.
можно немного подробнее, про ускорение загрузки? или речь идет о bulk insert?

Нет.
Речь о switch partition.
Создаешь рядом с основной секционированной таблицей загрузочную таблицу, целиком повторяющую по структуре (индексам, ограничениям и т.д.), вмещающую в точности сведения одной секции, и выполняешь switch partition.
И данные из загрузочной таблицы моментально оказываются в рабочей таблице.

Достоинства: Рабочая таблица не блокируется во время формирования данных в партиции и обновление рабочей таблицы происходит мгновенно и одномоментно для всей секции.
Очень удобно, если стоит задача не блокировать огромную таблицу на период формирования каких то локальных данных.
25 апр 17, 12:29    [20432282]     Ответить | Цитировать Сообщить модератору
 Re: Секционирование в MS SQL Server  [new]
IDVT
Member

Откуда:
Сообщений: 313
uaggster
Речь о switch partition.
спасибо за ответ, насколько я понимаю это возможно только в одной файловой группе. Все верно?
25 апр 17, 12:52    [20432384]     Ответить | Цитировать Сообщить модератору
 Re: Секционирование в MS SQL Server  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31371
IDVT
можно немного подробнее, про ускорение загрузки? или речь идет о bulk insert?
Нет, в том ответе ведь шла речь о секционировании.
Вот uaggster уже написал.
Добавлю, что так же быстро можно делать удаление.

Но не всегда бизнес-логика с этим совместима, не всегда порция вставляемых или удаляемых данных соответствует секции.

Про bulk insert - это отдельная тема.
Можно превратить операцию insert ... select в операцию с минимальным логированием, да, как bulk insert.
Вот, почитайте, там вначале статьи про это говорится: https://msdn.microsoft.com/en-us/library/dd425070(v=sql.100).aspx
25 апр 17, 12:57    [20432402]     Ответить | Цитировать Сообщить модератору
 Re: Секционирование в MS SQL Server  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31371
IDVT
uaggster
Речь о switch partition.
спасибо за ответ, насколько я понимаю это возможно только в одной файловой группе. Все верно?
Переключение - да, в одной.

А сами секции могут быть и в разных.
У нас вот каждая секция в своём файле, мы так решаем проблему больших бакапов (старые секции помечаем как рид-онли, и ежедневно бакапим только рид-райт секции).
25 апр 17, 12:59    [20432406]     Ответить | Цитировать Сообщить модератору
 Re: Секционирование в MS SQL Server  [new]
nvv
Member

Откуда:
Сообщений: 54
uaggster
не блокировать огромную таблицу на период формирования каких то локальных данных.

разве блокировка секционированной таблицы происходит не на уровне секций? (предполагаю что данные и индексы секционируются одинаково)
23 янв 18, 00:27    [21128604]     Ответить | Цитировать Сообщить модератору
 Re: Секционирование в MS SQL Server  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
nvv
uaggster
не блокировать огромную таблицу на период формирования каких то локальных данных.

разве блокировка секционированной таблицы происходит не на уровне секций? (предполагаю что данные и индексы секционируются одинаково)
Не по дефолту.
https://docs.microsoft.com/en-us/sql/t-sql/statements/alter-table-transact-sql
SET ( LOCK_ESCALATION = { AUTO | TABLE | DISABLE } )
Applies to: SQL Server 2008 through SQL Server 2017 and Azure SQL Database.

Specifies the allowed methods of lock escalation for a table.

AUTO
This option allows SQL Server Database Engine to select the lock escalation granularity that is appropriate for the table schema.

If the table is partitioned, lock escalation will be allowed to partition. After the lock is escalated to the partition level, the lock will not be escalated later to TABLE granularity.

If the table is not partitioned, the lock escalation will be done to the TABLE granularity.

TABLE
Lock escalation will be done at table-level granularity regardless whether the table is partitioned or not partitioned. TABLE is the default value.
23 янв 18, 02:51    [21128689]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить