powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Секционирование в MS SQL Server
20 сообщений из 20, страница 1 из 1
Секционирование в MS SQL Server
    #39441949
kossql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем доброго времени суток.

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

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

Я немного тестировал с выводом плана выполнения запроса секционированную таблицу и не секционированную. Тестировал на таблице с 10 миллионами записей. Update, Select. По времени выполнения что Update что Select отрабатывает одинаково. При выборке разницу можно увидеть только в плане выполнения запроса. см. ниже.
...
Рейтинг: 0 / 0
Секционирование в MS SQL Server
    #39441950
kossql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
Секционирование в MS SQL Server
    #39441951
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kossqlВсем доброго времени суток.

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

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

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

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

Так же можно очень сильно ускорить загрузку данных при определённых условиях.
...
Рейтинг: 0 / 0
Секционирование в MS SQL Server
    #39441952
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kossqlХотелось бы поговорить и послушать о секционировании таблиц для улучшения быстродействия Секционирование улучшает быстродействие примерно так же, как оператор delete.
kossqlкто что может посоветоватьЯ могу посоветовать проблему озвучить, которую вы пытаетесь решать.
kossqlТестировал на таблице с 10 миллионами записей. Update, Select.По времени выполнения что Update что Select отрабатывает одинаково. Я тут потестировал. Запрос "select 1" по скорости уделывает все остальные запросы, и даже с секционированием заморачиваться не надо.
...
Рейтинг: 0 / 0
Секционирование в MS SQL Server
    #39441953
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kossqlПри выборке разницу можно увидеть только в плане выполнения запроса. см. ниже.Тест ничего не показывающий.
Если у вас FinishDate является условием для любых запросов, то нужно его включать в индексы, или, скорее всего, включить в кластерный индекс.
А если не является, то и секционирование не будет использовано.
...
Рейтинг: 0 / 0
Секционирование в MS SQL Server
    #39442000
Фотография Критик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вполне себе улучшает быстродействие при попадании в нужную секцию
...
Рейтинг: 0 / 0
Секционирование в MS SQL Server
    #39442567
Фотография Mind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Критиквполне себе улучшает быстродействие при попадании в нужную секциюЭто если всю секцию просканировать надо?
...
Рейтинг: 0 / 0
Секционирование в MS SQL Server
    #39442584
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Критиквполне себе улучшает быстродействие при попадании в нужную секциюПопадание в нужную секцию эквивалентно сканированию диапазону ключа кластерного индекса.
Естественно, если данные позволяют сделать секционирование, то логично кластерный индекс сделать по тому полю, по которому будет разделение на секции, и которое будет во всех запросах.
Раз уж такой случай, что нужно сканировать секции. Хотя это само по себе очень странно.

Или вы не про сканирование секции?
...
Рейтинг: 0 / 0
Секционирование в MS SQL Server
    #39442617
Фотография Критик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg,

с кластерным индексом конечно так, но иногда его нельзя/не так просто создать из-за ПО, которое работает с базой
...
Рейтинг: 0 / 0
Секционирование в MS SQL Server
    #39442737
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Критикalexeyvg,

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

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

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

Вот у нас очень квалифицированные ребята, но по WEBу, воткнули несколько лет назад секционирование в базу, и система остановилась, на несколько недель, потому что база большая, и откатить назад было нереально.
Вот как раз тогда меня и взяли на эту работу :-)
...
Рейтинг: 0 / 0
Секционирование в MS SQL Server
    #39443703
Фотография Mind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Критикalexeyvg,

с кластерным индексом конечно так, но иногда его нельзя/не так просто создать из-за ПО, которое работает с базойВидать очень капризное ПО. Кластерный создать нельзя, а секционирование можно.
...
Рейтинг: 0 / 0
Секционирование в MS SQL Server
    #39443708
o-o
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
o-o
Гость
MindКритикalexeyvg,

с кластерным индексом конечно так, но иногда его нельзя/не так просто создать из-за ПО, которое работает с базойВидать очень капризное ПО. Кластерный создать нельзя, а секционирование можно.
ооо, на ловца и зверь бежит.
у нас тут сегодня симпозиум какой-то по секционированию.
на все вкусы.
приглашаю 2 соседние темы почитать для расширения кругозора
...
Рейтинг: 0 / 0
Секционирование в MS SQL Server
    #39443732
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MindКритикalexeyvg,

с кластерным индексом конечно так, но иногда его нельзя/не так просто создать из-за ПО, которое работает с базойВидать очень капризное ПО. Кластерный создать нельзя, а секционирование можно.Такое реально есть.
Секционирование более прозрачно для приложений.
Может, оно слишком сложно для этих "программистов"?. Вот получить список индексов и констрейнов на таблице они могут, и проверяют, что бы никто не испортил их гениальное творение инедксами и прочим.
...
Рейтинг: 0 / 0
Секционирование в MS SQL Server
    #39443891
IDVT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg....Так же можно очень сильно ускорить загрузку данных при определённых условиях. можно немного подробнее, про ускорение загрузки? или речь идет о bulk insert?
...
Рейтинг: 0 / 0
Секционирование в MS SQL Server
    #39443992
uaggster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
IDVTalexeyvg....Так же можно очень сильно ускорить загрузку данных при определённых условиях. можно немного подробнее, про ускорение загрузки? или речь идет о bulk insert?
Нет.
Речь о switch partition.
Создаешь рядом с основной секционированной таблицей загрузочную таблицу, целиком повторяющую по структуре (индексам, ограничениям и т.д.), вмещающую в точности сведения одной секции, и выполняешь switch partition.
И данные из загрузочной таблицы моментально оказываются в рабочей таблице.

Достоинства: Рабочая таблица не блокируется во время формирования данных в партиции и обновление рабочей таблицы происходит мгновенно и одномоментно для всей секции.
Очень удобно, если стоит задача не блокировать огромную таблицу на период формирования каких то локальных данных.
...
Рейтинг: 0 / 0
Секционирование в MS SQL Server
    #39444010
IDVT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
uaggsterРечь о switch partition.
спасибо за ответ, насколько я понимаю это возможно только в одной файловой группе. Все верно?
...
Рейтинг: 0 / 0
Секционирование в MS SQL Server
    #39444013
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IDVTможно немного подробнее, про ускорение загрузки? или речь идет о bulk insert?Нет, в том ответе ведь шла речь о секционировании.
Вот uaggster уже написал.
Добавлю, что так же быстро можно делать удаление.

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

Про bulk insert - это отдельная тема.
Можно превратить операцию insert ... select в операцию с минимальным логированием, да, как bulk insert.
Вот, почитайте, там вначале статьи про это говорится: https://msdn.microsoft.com/en-us/library/dd425070(v=sql.100).aspx
...
Рейтинг: 0 / 0
Секционирование в MS SQL Server
    #39444016
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IDVTuaggsterРечь о switch partition.
спасибо за ответ, насколько я понимаю это возможно только в одной файловой группе. Все верно?Переключение - да, в одной.

А сами секции могут быть и в разных.
У нас вот каждая секция в своём файле, мы так решаем проблему больших бакапов (старые секции помечаем как рид-онли, и ежедневно бакапим только рид-райт секции).
...
Рейтинг: 0 / 0
Секционирование в MS SQL Server
    #39588765
nvv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
nvv
Гость
uaggster не блокировать огромную таблицу на период формирования каких то локальных данных.
разве блокировка секционированной таблицы происходит не на уровне секций? (предполагаю что данные и индексы секционируются одинаково)
...
Рейтинг: 0 / 0
Секционирование в MS SQL Server
    #39588794
Фотография Mind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nvvuaggster не блокировать огромную таблицу на период формирования каких то локальных данных.
разве блокировка секционированной таблицы происходит не на уровне секций? (предполагаю что данные и индексы секционируются одинаково)Не по дефолту.
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.
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Секционирование в MS SQL Server
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]