powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / партиционирование большой таблицы
24 сообщений из 24, страница 1 из 1
партиционирование большой таблицы
    #39622264
Alexander Us
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL 2008 x64 Enterprise, SP4;

Есть нагруженная таблица ~1,5 ТБ, ~0,5 мил. строк, с блоб полями.

В неё идут в основном вставки (insert и bulkinset), круглосуточно ~10 - 100 строк в секунду от множества клиентов.
Обдумываю её партиционововать, в связи с чем вопросы:

Требуют ли операции партиционирования рассоединения клиентских приложений или всё можно делать online?
Под "всё" понимается реализацмя скоьзящего окна - изменение функции, подключение новых и отключение старых секций.

Заранее спасибо отозвавшимся.
...
Рейтинг: 0 / 0
партиционирование большой таблицы
    #39622286
WarAnt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexander Us,

всё онлайн.
но это не значит что всё онлайн автоматом само будет работать, придется код переписывать иначе от секционирования толку не будет ваще.
...
Рейтинг: 0 / 0
партиционирование большой таблицы
    #39622287
WarAnt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexander Us,

и да забыл спросить, вам для каких целей секционирование понадоилось, при вставках оно как бы не очень помогает.
...
Рейтинг: 0 / 0
партиционирование большой таблицы
    #39622306
Andy_OLAP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexander UsSQL 2008 x64 Enterprise, SP4;

Есть нагруженная таблица ~1,5 ТБ, ~0,5 мил. строк, с блоб полями.

В неё идут в основном вставки (insert и bulkinset), круглосуточно ~10 - 100 строк в секунду от множества клиентов.
Обдумываю её партиционововать, в связи с чем вопросы:

Требуют ли операции партиционирования рассоединения клиентских приложений или всё можно делать online?
Под "всё" понимается реализацмя скоьзящего окна - изменение функции, подключение новых и отключение старых секций.

Заранее спасибо отозвавшимся.
Партиционирование не для этого.
Оно для того, чтобы легко сложить архивные данные на HDD, а горячие на SSD. Партиционирование таблицы с кластерным ключом по дате и схеме по дате.

И для того, чтобы переключать секцию из staging таблицы.
Типа - есть таблица table_history, нарезанная на месяцы. Нужно удалить все строки с 3 февраля и загрузить из источника.
Делаете пустую table_staging, нарезанную так же. Очищаете truncate. Меняете секции swith только для февраля и марта 2018 со staging. В staging удаляете неспешно все для марта и большую часть февраля - при этом чтение с большой таблицы не блокируется. Далее из источника загружаете с 3 февраля новые строки в table_staging. А затем переключаете обратно секции февраля и марта - пустые возвращаются в table_staging, а заполненные попадают в table_history.

Плюс к этому можно распараллелить - в SSIS пакете в несколько потоков заливаете отдельно table_staging_1 для февраля, отдельно независимо table_staging_2 для марта (а схемы партиционирования все одинаковые), потом в момент готовности - февраль уже залился, март тупит - быстро переключаете нужную секцию в боевую большую table_history.

За рецептами идти в ветку OLAP и DWH, спрашивать Александра Южакова, он спец по таким загрузкам :)
...
Рейтинг: 0 / 0
партиционирование большой таблицы
    #39622447
Фотография Yasha123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andy_OLAPAlexander UsПод "всё" понимается реализацмя скоьзящего окна - изменение функции, подключение новых и отключение старых секций.

Партиционирование не для этого.

да надо же.
человеку надо реализовать скользящее окно,
т.е. как раз безболезненно отцеплять старые данные,
и оказывается, секционирование не для этого.
т.е. наш дорогой эксперт рекомендует удалять вместо того, чтобы секции переключать?
...
Рейтинг: 0 / 0
партиционирование большой таблицы
    #39622451
Alexander Us
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
@WarAnt,

есть следующие проблемы, которые хотелось бы решить:

иногда вставки "зависают" на ~0,5 - 5 секунд, блокировки при этом не наблюдаются, время обновления статистик тоже не совпадает.
В общем причину я не нашёл, но на таблице меньшего размера проблема не наблюдалась.


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

@Andy_OLAP,

нет это не DWH, а обычная "боевая" база.
...
Рейтинг: 0 / 0
партиционирование большой таблицы
    #39622454
Фотография Yasha123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexander Us---интересно было попробовать бы выгружать старые секции в отдельную файловую группу и бэкапить её отдельно - с целью уменьшить размер еженедельного бэкапа

вот как раз это не будет "мгновенно".
переключить на получится,
вы будете физически переливать данные из одного файла в другой,
это уже не metadate only operation
BOLSource and target tables must share the same filegroup.
The source and the target table of the ALTER TABLE...SWITCH statement must reside in the same filegroup,
and their large-value columns must be stored in the same filegroup.
Any corresponding indexes, index partitions, or indexed view partitions must also reside in the same filegroup.
However, the filegroup can be different from that of the corresponding tables or other corresponding indexes.
---
ну и к вопросу об "онлайновости".
ALTER TABLE..SWITCH накладывает SCH-M на источник и на приемник.
т.е. таки в этот момент они оба недоступны.
другое дело, что длится сие удовольствие очень незначительное время
...
Рейтинг: 0 / 0
партиционирование большой таблицы
    #39622457
Фотография Yasha123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну и само секционирование большой таблицы это большой хороший оффлайн.
можно извратиться и делать онлайн, надеясь при этом, что за неделю секционируется,
но лучше выделить окно и сделать оффлайново.
...
Рейтинг: 0 / 0
партиционирование большой таблицы
    #39622460
Alexander Us
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yasha123ну и само секционирование большой таблицы это большой хороший оффлайн...
Тут можно подготовить вторую, партиционированну, таблицу с данными только последнего периода (на обе полные мож. не хватить диска, а временная недоступность старых данных терпима) и переключить их, затем потихоньку добавлять секции снизу и переливать данные, удаляя их их старой таблицы.
...
Рейтинг: 0 / 0
партиционирование большой таблицы
    #39622470
Фотография Yasha123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexander UsТут можно подготовить вторую, партиционированну, таблицу с данными только последнего периода (на обе полные мож. не хватить диска, а временная недоступность старых данных терпима) и переключить их
не очень понятно, что вы собрались переключать.
можно перелить данные (их часть) в новую секционированную таблицу, это да.
а "переключить" старую или даже часть ее вы ну никак не переключите
...
Рейтинг: 0 / 0
партиционирование большой таблицы
    #39622493
Minamoto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexander Us, сейчас в процессе добавления таймштампов в очень большие таблицы. Это не про секционирование, но суть примерно такая же - онлайновое изменение больших таблиц.

Пользуемся похожим на этот методом:

http://michaeljswart.com/2012/04/modifying-tables-online-part-1-migration-strategy/

Только вместо триггеров используем CDC, но я, если бы с нуля делал, предпочел бы триггеры.
...
Рейтинг: 0 / 0
партиционирование большой таблицы
    #39622529
Alexander Us
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yasha123не очень понятно, что вы собрались переключать.
Ваше определение "перелить" конечно правильно.

Я же думал переливать старые данные не сразу в партиционированную таблицу, которая будет уже в продуктивном использовании,
а блоками, в staging таблицу, когда она заполнится - подключать её в партиционированную таблицу "снизу", затем создавать новую staging таблицу, заполнять, подкючать и т.д.
...
Рейтинг: 0 / 0
партиционирование большой таблицы
    #39622535
Alexander Us
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Minamoto,

спасибо, буду читать.

Но скажу сразу, что на данном приложении избегают триггеров.
Причина - всё должно быть как можно проще, дешевле в обслуживании.
Обслуживание, поиск ошибок - должны быть доступны для любого, кто имеет соотв. права а не только "избранных" специалистов.
...
Рейтинг: 0 / 0
партиционирование большой таблицы
    #39622574
WarAnt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexander Us @WarAnt,

есть следующие проблемы, которые хотелось бы решить:

иногда вставки "зависают" на ~0,5 - 5 секунд, блокировки при этом не наблюдаются, время обновления статистик тоже не совпадает.
В общем причину я не нашёл, но на таблице меньшего размера проблема не наблюдалась.



поищите сначала тут
...
Рейтинг: 0 / 0
партиционирование большой таблицы
    #39622683
Minamoto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexander UsMinamoto,

спасибо, буду читать.

Но скажу сразу, что на данном приложении избегают триггеров.
Причина - всё должно быть как можно проще, дешевле в обслуживании.
Обслуживание, поиск ошибок - должны быть доступны для любого, кто имеет соотв. права а не только "избранных" специалистов.
Это же временно - только на время перелива. Объявляете "техническое обслуживание", настраиваете перелив, после переезда все убираете.
Альтернатива - как я уже написал, CDC, или использование вьюх, объединяющих обе таблицы, но там тоже нужны будут триггера, на INSTEAD OF.
...
Рейтинг: 0 / 0
партиционирование большой таблицы
    #39622690
Alexander Us
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MinamotoОбъявляете "техническое обслуживание"
Тут так не работает :)

Если есть возможность обойтись без "Объявляете техническое обслуживание", то в этом и состоит моя работа.
...
Рейтинг: 0 / 0
партиционирование большой таблицы
    #39622721
Фотография Критик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexander Us иногда вставки "зависают" на ~0,5 - 5 секунд, блокировки при этом не наблюдаются, время обновления статистик тоже не совпадает


если сделаете секционирование, у вас будет как минимум пересортировка данных в tempdb, поэтому время зависания увеличится
...
Рейтинг: 0 / 0
партиционирование большой таблицы
    #39622744
Ferdipux
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alexander UsYasha123ну и само секционирование большой таблицы это большой хороший оффлайн...
Тут можно подготовить вторую, партиционированну, таблицу с данными только последнего периода (на обе полные мож. не хватить диска, а временная недоступность старых данных терпима) и переключить их, затем потихоньку добавлять секции снизу и переливать данные, удаляя их их старой таблицы.
Если у вас именно такой сценарий - нужно переехать в партицированную таблицу и мало место для обоих таблиц, то можно обойтись маленьким оффлайном.
Создаал таблицу table_partitioned с теми же полями и партицированную, начинал оффлайн. Переливал в нее актуальную партицию, далее таблицы переименовывал. Конец оффлайна. Далее - переливаем секцию за секцией из старой таблицы в новую с переключением и заливкой через staging таблицу, чтобы в этот момент не блокировать работу с активной партицией.
Вариант с триггерами из приведенной выше ссылки - не реализовывал, так как маленький оффлайн можно было получить.
...
Рейтинг: 0 / 0
партиционирование большой таблицы
    #39622749
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yasha123Alexander UsТут можно подготовить вторую, партиционированну, таблицу с данными только последнего периода (на обе полные мож. не хватить диска, а временная недоступность старых данных терпима) и переключить их
не очень понятно, что вы собрались переключать.
можно перелить данные (их часть) в новую секционированную таблицу, это да.
а "переключить" старую или даже часть ее вы ну никак не переключитеЭэээ, а почему нельзя?
Навешиваете на старую таблицу правильный констрейн, как должно быть для функции секционирования, и потом подключаете её к секционированной таблице как большую-большую секцию.
В процессе работы подключаете новые секции, нормального размера.
И далее 2 варианта - если места нет, то в той большой секции ежедневно удаляете обычным DELETE, и шринкаете файл. А если место есть, то просто ждёте, когда данные станут старыми и ненужными, и сразу удаляете всю эту секцию.
Сам так делал, вполне нормальный способ для секционирования больших таблиц, но, правда, требует выполнения некоторых условий - что бы старый кластерный индекс совпадал с новым, иначе смысл теряется.
...
Рейтинг: 0 / 0
партиционирование большой таблицы
    #39622815
Фотография Yasha123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgYasha123пропущено...

не очень понятно, что вы собрались переключать.
можно перелить данные (их часть) в новую секционированную таблицу, это да.
а "переключить" старую или даже часть ее вы ну никак не переключитеЭэээ, а почему нельзя?
Навешиваете на старую таблицу правильный констрейн,
и какой же констрэйнт ему навесить на всю его огромную таблицу,
в которой данные с 2000-ого года?
что там дата >= '2000101' и < '20180401'?
и это все переключится в секционированную по годам, а того хуже, по yyyymm таблицу?

вот бы так все и "секционировали" силой своей мечты
...
Рейтинг: 0 / 0
партиционирование большой таблицы
    #39622821
Фотография Yasha123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
он хочет скользящее окно, если вы не прочли первый пост.
волочить за собой ВСЕ данные ему не надо.
ему надо часть данных переключить, а переключить не выйдет.
именно что отливать кусочек в staging table, на нее уже констрэйнт, ее переключать
...
Рейтинг: 0 / 0
партиционирование большой таблицы
    #39622961
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yasha123alexeyvgпропущено...
Ээээ, а почему нельзя?
Навешиваете на старую таблицу правильный констрейн,
и какой же констрэйнт ему навесить на всю его огромную таблицу,
в которой данные с 2000-ого года?
что там дата >= '2000101' и < '20180401'?
и это все переключится в секционированную по годам, а того хуже, по yyyymm таблицу?

вот бы так все и "секционировали" силой своей мечтыДа, я именно так и делал
Таблицы 5 Тб, диск тоже, места нет, останавливать нельзя.
Сделал констрейн дата >= '2000101' и < '20180401' (ну, цифры точные не буду приводить, не помню)
Он, конечно, долго делался, там же нужно с проверкой данных.
Потом сделал новую таблицу, у которой первая секция такая же, как этот констрейн, а остальные по суткам
Потом сделал свитч партишен.
Получилась таблица, с маленькими партициями по суткам по 150 гигов, и первой большой, на 5 тб
И удаление суточных секций сделал, но оно, понятно, первые несколько месяцев не работало.
Yasha123он хочет скользящее окно, если вы не прочли первый пост.
волочить за собой ВСЕ данные ему не надо.
ему надо часть данных переключить, а переключить не выйдет.
именно что отливать кусочек в staging table, на нее уже констрэйнт, ее переключатьА, если данные не все нужны, то понятно, не подходит, невнимательно прочитал.
...
Рейтинг: 0 / 0
партиционирование большой таблицы
    #39623014
Фотография Yasha123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну так у вас окна-то и не было.
а ему нужны 12 месяцев -- 12 секций (например. он не сказал, чему равна секция)
а вашим способом "работа на будущее" -- через 12 месяцев окно появится.
с тем же успехом можно просто с 0 таблицу сделать сразу секционированной
и 12 месяцев ждать ее заполнение
...
Рейтинг: 0 / 0
партиционирование большой таблицы
    #39624488
Alexander Us
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yasha123а ему нужны 12 месяцев -- 12 секций
Дорогие Yasha123, alexeyvg, вы оба правы.
Я хоть и определил желаемое как скользящее окно, на самом деле мне хоть тушкой хоть чучелом - надо просто решить проблему.
...
Рейтинг: 0 / 0
24 сообщений из 24, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / партиционирование большой таблицы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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