Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Пустые секции  [new]
Алекс1990
Guest
Есть 25 таблиц, в которых данные разделены по блокам и идентифицируются суррогатами. При этом данные суррогаты уникальны для блоков всех 25 таблиц(сквозная нумерация). Необходимо секционировать все таблицы по значению этих суррогатов. Есть два варианта:

1) создать одну функцию партиционирования на всю базу и привязать к ней все 25 таблиц.
В таком случае в каждой таблице будет по 25 пустых секций между заполненными. Не понятно чем это чревато с точки зрения производительности и управляемости. Подводные камни ?

2) создать свою функцию секционирования для каждой таблицы. Тогда пустых секций в таблицах не будет вообще.

Посоветуете ?)
20 фев 14, 19:53    [15601123]     Ответить | Цитировать Сообщить модератору
 Re: Пустые секции  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
Мифологизм на ровном месте.
Если вам что-то не понятно не надо фантазировать.
Нормальные люди вычисляют логически надеясь на отсутствие идиотизма, при этом или понимают суть до конца или интересуются.

А главное, ни зачем это надо, ни из-за чего вопрос поднялся.
Пока читал всё ждал предложения, "хочу объединить эти 25 таблиц в одну". Перечитывал, думал пропустил.

Пустых секций в таблице не бывает. Пусть хоть "нарезали" 100500 диапазонов.
Гусары молчать!

Топег пока не обладает смыслом.
20 фев 14, 21:37    [15601584]     Ответить | Цитировать Сообщить модератору
 Re: Пустые секции  [new]
Алекс1990
Guest
Mnior
"хочу объединить эти 25 таблиц в одну"

поправка. Все 25 таблиц имеют различную архитектуру. Но все имею поле PartitionID.
Для таблицы 1, PartitionID принимает значения:
1, 25, 50, 75, 100...
Для таблицы 2, PartitionID принимает значения:
2, 26, 51, 76, 101
Для таблицы 3, PartitionID принимает значения:
3, 27, 52, 77, 102
...
...
...
Для этих PartitionID сохраняем некоторую метаинформацию о секции.

Вопрос в том, какие отрицательные последствия можно получить если все диапазоны задавать одной функцией секционирования ? Напр. при удалении секции.
20 фев 14, 22:24    [15601829]     Ответить | Цитировать Сообщить модератору
 Re: Пустые секции  [new]
SERG1257
Member

Откуда:
Сообщений: 2873
Исключительно из любопытства, а зачем идти по первому варианту. Какие вы видите выгоды?
Как вы вообще используете секционирование?
20 фев 14, 22:43    [15601940]     Ответить | Цитировать Сообщить модератору
 Re: Пустые секции  [new]
SERG1257
Member

Откуда:
Сообщений: 2873
Кстати
Алекс1990
При этом данные суррогаты уникальны для блоков всех 25 таблиц(сквозная нумерация)
Это только вы знаете, а сервер в этом не уверен.
20 фев 14, 22:45    [15601952]     Ответить | Цитировать Сообщить модератору
 Re: Пустые секции  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
Алекс1990
Для этих PartitionID сохраняем некоторую метаинформацию о секции.
Вы так и не ответили причём тут секционирование вааще?
Что вы этим хотите решить?

Алекс1990
Вопрос в том, какие отрицательные последствия можно получить если все диапазоны задавать одной функцией секционирования ? Напр. при удалении секции.
Удаление секции?
Нет такого, есть склеивание и расклеивание диапазонов.
При этом ничего не удаляется.

Я не уверен во многом, юзал мало и по делу, и кое-что узнаю со сторорны. Но есть тут один спец, можете его дождаться думаю он среагирует на название темы, если не занят. Он скажет более точно. Иначе как и все нормальные люди просто проведите тесты.

Если вы данные секций будете склеивать, и кажись даже если вы все данные секции "назначения" удалите, то страница (даже если дождаться процесса очистки удалённых строк) останется и секция будет виртуально наличествовать, и тогда начнётся пресловутое тупое переливание данных из одной секции в другую.
Хотя я даже не уверен не делается ли переливка если секция назначения отсутствует у таблицы и они обе в одной ФГ.
Но это всё чушь, т.к. вы наверно складываете всё в отдельную архивную ФГ.
Я даже в оно время думал что "выровненные" по колонке секционирования индексы рубятся/склеиваются пополам, но нет - тупое копирование с пересортировкой.

Зачем вам такая ипатня с секциями - непонятно, совершенно. Словно хотите планету погреть, загружая тупыми задачами процы, питающиеся электро-нефтью.

Разница что будет одна общая функция или нет - будет в одной транзакции делаться или по отдельности, вся это ипатория.
Если процесс правильно налажен (данные перемещаются из малой секции в большую), то скорее фиолетово 1 табла или 25ть.
Если неправильно - то страдать будете и на одной табле.

Тем более что скорее вы будете это делать уже в архивочных 25ти таблицах, а не в активных, и в технологическом окне.
Неужели там у вас такие объёмы что надо лог на симпл мод переводить и "драться" за уменьшить дельты данных?

SERG1257
Это только вы знаете, а сервер в этом не уверен.
Если навешаны констраинты "секционирования" то он уверен.
Только я тоже уверен что их у ТС нет.
21 фев 14, 03:24    [15602790]     Ответить | Цитировать Сообщить модератору
 Re: Пустые секции  [new]
NickAlex66
Member

Откуда:
Сообщений: 319
Mnior,

"...начнётся пресловутое тупое переливание данных из одной секции в другую..." - физическое копирование данных пользователя из секции донора в секцию акцептор будет только если секции находятся на разных дисках. В противном случае правятся только метаданные - занимает секунду (ждем, наложения блокировки на схему табл) для серьезно нагруженной таблицы.
21 фев 14, 07:51    [15602968]     Ответить | Цитировать Сообщить модератору
 Re: Пустые секции  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
NickAlex66
физическое копирование данных пользователя из секции донора в секцию акцептор будет только если секции находятся на разных дисках.
Вы не поняли, мы говорим про операции SPLIT / MERGE
1. Не дисках - а разных файловых групп, пофег на одном диске или на разных.
2. В случае наличия не выровненных индексов (кластерных/не кластерных - неважно) будет обычная вставка ибо данные не идут подряд секция1 + секция2 - они "смешиваются/выковыриваются", согласно индексу.
3. Даже в случае выровненных индексов всё равно будет перемещение данных. Только SWITCH происходит быстро, и только ради этого всё городилось (но про него речь не идёт).

Секционирование и влияние RANGE RIGHT/LEFT на разбиение и слияние

На высоко нагруженной системе можете и не дождаться освобождения ресурсов которые хавают перекрываясь одновременно постоянный поток запросов. Зависит от многих факторов.

А вообще вот темка Уникальность столбца при секционировании.
И далее можно искать похожее от mike909.
22 фев 14, 05:21    [15609848]     Ответить | Цитировать Сообщить модератору
 Re: Пустые секции  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
NickAlex66
физическое копирование данных пользователя из секции донора в секцию акцептор будет только если секции находятся на разных дисках
Да вы и не могли говорить про SWITH.
Ибо там нет ни акцептора ни донора, данные не меняют секции, и перемещение между разными ФГ невозможен. Данные вообще не могут при этой операции перемещаться.
22 фев 14, 05:25    [15609851]     Ответить | Цитировать Сообщить модератору
 Re: Пустые секции  [new]
NickAlex66
Member

Откуда:
Сообщений: 319
Mnior
NickAlex66
физическое копирование данных пользователя из секции донора в секцию акцептор будет только если секции находятся на разных дисках
Да вы и не могли говорить про SWITH.
Ибо там нет ни акцептора ни донора, данные не меняют секции, и перемещение между разными ФГ невозможен. Данные вообще не могут при этой операции перемещаться.


Полагаю надо внести уточнения, тем более, что предыдущий мой пост несколько узко отражал суть вопроса.
- Данные МОГУТ (ключевое слово) физически перемещаться при использовании операций с партициями будь то SWITH, MERGE or SPLIT. Главное опять же в деталях.
Например SWITH:
Есть таблица_1 порезанная на секции, в которой ВСЕ СЕКЦИИ располагаются на одной ФГ_1, которая содержит один файл и эта таблица содержит данные. Положим по 10 млн строк на секцию.
Есть таблица_2 идентичная таблице_1 за одним исключением - она НЕ порезана на секции (опускаем тот факт, что любая не порезанная таблица уже имеет одну секцию >SQL2000) и располагается на той же ФГ_1, что и таблица_1. И да, Таблица_2 ПУСТА.
Операция ALTER TABLE таблица_1 SWITCH PARTITION 1 TO таблица_2 /* переключаем партицию с №1 */, дождавшись когда ей дадут возможность наложить блокировку уровня схемы на обе таблицы, практически мгновенно (не успеете щелкнуть пальцами :)) отбирает данные (10 млн строк !!!) из партиции №1 в таблице_1 и "переносит" их в таблицу_2.
Теперь детали: - партиция №1 из таблицы_1 НЕ куда не делась - так и осталась на своем месте. Вот только данных в ней уже нет (к вопросу про "пустых секций в таблице не бывает"), они все, с точностью до сантима, лежат в таблице_2; - теперь про "переносит": действия SWITCH можно разложить на две фазы №1 - изменения в метаданных, а именно - таблица_1 больше не владеет переключаемой партицией и делегирует это право таблице_2 (тут сильно упрощаю) и фаза №2 - физическое перемещение данных из секции №1 таблицы_1 в таблицу_2. Так вот, в данном случае, фаза №2 пропускается по причине того, что алгоритм, реализующий SWITH, прекрасно понимает, что перемещать данные в пределах одного файла данных нет необходимости.
А что до секции №1 из таблицы_1, то ее судьба, как правило, незавидна - сгинуть в виртуальной тьме веков :) -
ALTER PARTITION FUNCTION pf_PartitionFunction () MERGE RANGE (Boundary) - тут Boundary - граница с партицией №2
Немного изменим условия: Таблица_2 располагается на ФГ_2 тоже имеющей один файл данных (и тут не важно на одном физическом диске располагаются файлы данных из ФГ_1 и ФГ_2 или на разных).
Операция ALTER TABLE таблица_1 SWITCH PARTITION 1 TO таблица_2 /* переключаем партицию с №1 */, дождавшись когда ей дадут возможность наложить блокировку уровня схемы на обе таблицы, заставляет нас (и все остальные транзакции тоже :() довольно долго ждать пока она отбирает данные (10 млн строк !!!) из партиции №1 в таблице_1 и "переносит" их в таблицу_2.
Теперь детали: Аналогичны предыдущему случаю, за одним исключением фаза №2 все-таки случается - ПЛОХАЯ практика для продакшн систем.
По поводу MERGE and SPLIT можно тоже расписать, но чего-то и так длинно получилось.

По поводу ТС мне не понятно, что заставляет его прибегать к секционированию. Практическая необходимость или теоретическая любознательность?
Но, исходя из того, что есть, 2 вариант представляется наилучшим с точки зрения управляемости.
ЗЫ: все сказанное относится к редакциям Enterprise and Developer.
ЗЫЗЫ: коллега Mnior за что вы так не любите партиции? может просто вы их не умеете готовить? :)
ЗЫЗЫЗЫ: без обид, технология архи полезная.
ЗЫЗЫЗЫЗЫ: всех защитников с праздником!
23 фев 14, 16:48    [15615005]     Ответить | Цитировать Сообщить модератору
 Re: Пустые секции  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
NickAlex66
Полагаю надо внести уточнения, тем более, что предыдущий мой пост несколько узко отражал суть вопроса.
Полагаю что вы не внесли а только запутали.
NickAlex66
Данные МОГУТ (ключевое слово) физически перемещаться при использовании операций с партициями будь то SWITH, MERGE or SPLIT.
Это предложение самое запутывающее и поэтому я назову его полностью неверным и неправильно составленным.
"Могут" означает, что одна и та же операция может выполнятся по разному в зависимости от условий. В рамках текущего контекста - одна и та же операция может вызывать физическое перемещение или нет. Это не так.

Операции MERGE/SPLIT всегда вызывают физическое перемещение. Страницы данных перезаполняются независимо в разных ФГ они находятся или нет, пусть даже будут затрагиваться теже страницы данных (освобождённые ранее).

Операции SPLIT никогда не вызывает физическое перемещение данных. Таблицы или секции должны находится в одной файловой группе.
См. Общие требования при переключении секций
NickAlex66
Теперь детали: - партиция №1 из таблицы_1 НЕ куда не делась - так и осталась на своем месте.
Неверно. Партиции как раз "переместилась". Ибо что делает SWITCH - это изменяет принадлежность партиций к таблице.
Что можно наблюдать через sys.partitions, до и после SWITCH.
Данные принадлежащие партиции физически никуда не перемещаются и не трогаются.
NickAlex66
теперь про "переносит": действия SWITCH можно разложить на две фазы №1 - изменения в метаданных, а именно - таблица_1 больше не владеет переключаемой партицией и делегирует это право таблице_2 (тут сильно упрощаю) и фаза №2 - физическое перемещение данных из секции №1 таблицы_1 в таблицу_2. Так вот, в данном случае, фаза №2 пропускается по причине того, что алгоритм, реализующий SWITH, прекрасно понимает, что перемещать данные в пределах одного файла данных нет необходимости.

Операция ALTER TABLE таблица_1 SWITCH PARTITION 1 TO таблица_2 /* переключаем партицию с №1 */, дождавшись когда ей дадут возможность наложить блокировку уровня схемы на обе таблицы, заставляет нас (и все остальные транзакции тоже :() довольно долго ждать пока она отбирает данные (10 млн строк !!!) из партиции №1 в таблице_1 и "переносит" их в таблицу_2.
Бред сивой кобылы.

Советую вам, NickAlex66, ваши гуманитарные фантазии приструнить хотя бы на время и почитать хотя бы документацию, коль вы не можете самостоятельно понять как всё фунчиклирует. (Поменьше очеловечивайте предметы окружения, не добавляйте им сознательности)
NickAlex66
По поводу MERGE and SPLIT можно тоже расписать
Распишите! Давайте давайте. Ой чувствую взаимоисключающие параграфы.
NickAlex66
Вот только данных в ней уже нет (к вопросу про "пустых секций в таблице не бывает")
Ну, я предположил что секции якобы могут не существовать если в них нет данных - для возможного уменьшения телодвижений. Я провёл пару тестов - да секции создаются всегда, вровень схеме, но ни одна страница данных не неё не ссылается.
Но опять таки, все страницы данных не меняют принадлежность к секции (при SWITCH).
NickAlex66
А что до секции №1 из таблицы_1, то ее судьба, как правило, незавидна - сгинуть в виртуальной тьме веков
При SWITCH всегда затрагиваются две секции, в обоих меняются местами идентификаторы таблиц (и номера секции).
При этом понимаешь что требование, чтобы во второй табле секция была пустая - это чисто логическое ограничение - чтобы не путаться.
NickAlex66
По поводу ТС мне не понятно, что заставляет его прибегать к секционированию. Практическая необходимость или теоретическая любознательность?
Любознательность не может быть ответом к оправданию бизнес действий, а только к вопросам, ну или безобидным экспериментам.
NickAlex66
ЗЫЗЫ: коллега Mnior за что вы так не любите партиции? может просто вы их не умеете готовить? :)
Не знаю зачем вы пытаетесь меня дёргать. Но главное на основании чего вы решили что я их "не люблю"?
1. Я так как и вы просто "не понимаю причём в проблематике ТС секционирование вообще"
2. "не люблю" - это гуманитарный оксюморон. Есть осмысленность, применимость, а эмоции это дело гуманитариев. Это они их постоянно видят на ровном месте.

NickAlex66
не успеете щелкнуть пальцами
отбирает данные (10 млн строк !!!
с точностью до сантима
сгинуть в виртуальной тьме веков
ЗЫЗЫЗЫ: без обид, технология архи полезная.
ЗЫЗЫЗЫЗЫ: всех защитников с праздником!
23 фев 14, 21:24    [15615864]     Ответить | Цитировать Сообщить модератору
 Re: Пустые секции  [new]
NickAlex66
Member

Откуда:
Сообщений: 319
Mnior,

У меня не было и в мыслях вас дергать. Но если таковое все таки случилось, то прошу прощения.
И да, пример с двумя ФГ явно ошибочен - промашка вышла :)
А в остальном все верно, ибо работает.
24 фев 14, 18:21    [15621600]     Ответить | Цитировать Сообщить модератору
 Re: Пустые секции  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
NickAlex66
И да, пример с двумя ФГ явно ошибочен - промашка вышла :)
Это ерунда, но вот вам можно позавидовать - вы хоть что-то новое узнали/уточнили. Хотя, я тоже закрепил материал.
24 фев 14, 22:49    [15622930]     Ответить | Цитировать Сообщить модератору
 Re: Пустые секции  [new]
NickAlex66
Member

Откуда:
Сообщений: 319
Mnior,

"...Операции MERGE/SPLIT всегда вызывают физическое перемещение. Страницы данных перезаполняются независимо в разных ФГ они находятся или нет, пусть даже будут затрагиваться теже страницы данных (освобождённые ранее).

Операции SPLIT никогда не вызывает физическое перемещение данных. Таблицы или секции должны находится в одной файловой группе..." - в последнем предложении очепятка.
25 фев 14, 17:51    [15627954]     Ответить | Цитировать Сообщить модератору
 Re: Пустые секции  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
NickAlex66, глазастый.

Надо мне поправить:
Mnior
Операции MERGE/SPLIT всегда вызывают физическое перемещение. Страницы данных перезаполняются независимо в разных ФГ они находятся или нет, пусть даже будут затрагиваться теже страницы данных (освобождённые ранее).

Операции SWITCH никогда не вызывает физическое перемещение данных. Таблицы или секции должны находится в одной файловой группе.
См. Общие требования при переключении секций
26 фев 14, 00:55    [15629814]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить