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

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

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

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

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

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

и да забыл спросить, вам для каких целей секционирование понадоилось, при вставках оно как бы не очень помогает.
...
Рейтинг: 0 / 0
28.03.2018, 19:26
    #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
29.03.2018, 09:25
    #39622447
Yasha123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
партиционирование большой таблицы
Andy_OLAPAlexander UsПод "всё" понимается реализацмя скоьзящего окна - изменение функции, подключение новых и отключение старых секций.

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

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

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

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


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

@Andy_OLAP,

нет это не DWH, а обычная "боевая" база.
...
Рейтинг: 0 / 0
29.03.2018, 09:41
    #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
29.03.2018, 09:46
    #39622457
Yasha123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
партиционирование большой таблицы
ну и само секционирование большой таблицы это большой хороший оффлайн.
можно извратиться и делать онлайн, надеясь при этом, что за неделю секционируется,
но лучше выделить окно и сделать оффлайново.
...
Рейтинг: 0 / 0
29.03.2018, 09:57
    #39622460
Alexander Us
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
партиционирование большой таблицы
Yasha123ну и само секционирование большой таблицы это большой хороший оффлайн...
Тут можно подготовить вторую, партиционированну, таблицу с данными только последнего периода (на обе полные мож. не хватить диска, а временная недоступность старых данных терпима) и переключить их, затем потихоньку добавлять секции снизу и переливать данные, удаляя их их старой таблицы.
...
Рейтинг: 0 / 0
29.03.2018, 10:07
    #39622470
Yasha123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
партиционирование большой таблицы
Alexander UsТут можно подготовить вторую, партиционированну, таблицу с данными только последнего периода (на обе полные мож. не хватить диска, а временная недоступность старых данных терпима) и переключить их
не очень понятно, что вы собрались переключать.
можно перелить данные (их часть) в новую секционированную таблицу, это да.
а "переключить" старую или даже часть ее вы ну никак не переключите
...
Рейтинг: 0 / 0
29.03.2018, 10:41
    #39622493
Minamoto
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
партиционирование большой таблицы
Alexander Us, сейчас в процессе добавления таймштампов в очень большие таблицы. Это не про секционирование, но суть примерно такая же - онлайновое изменение больших таблиц.

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

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

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

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

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

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

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

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



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

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

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

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


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

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

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

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


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