powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Секционирование таблицы
19 сообщений из 19, страница 1 из 1
Секционирование таблицы
    #40007144
=Сергей=
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Друзья, помогите с секционированием (MSSQL 2017).
Есть таблица некой статистики (телеметрия):
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
create table [Test](
	 [id] int identity(1,1) not null
	,[A] int not null
	,[B] int not null
	,[C] tinyint not null
	,[BegTime] datetime not null --дата первого появления комбинации параметров A, B и C
	,[EndTime] datetime not null --дата последнего появления комбинации параметров A, B и C
	,[Count] int not null --сколько раз появлялась комбинация параметров A, B и C
	,constraint [PK_Test] primary key clustered ([id])
)
create unique index [idx_Main] on [Test] ([A],[B],[C])
create index [idx_B] on [Test] ([B])


При построении индексов используется FillFactor 50%, индексы регулярно перестраиваются.
Записей в таблице - несколько миллиардов. Индексы и данные лежат в разных файлах, на разных дисках.
Обеспечивается быстрый поиск по A+B+C, по A и по B.
Раз в сутки обеспечивается слияние с таблицей суточной статистики аналогичной структуры. Обновляется более 50% записей (обновляются только [EndTime] и [Count]), производительность апдейта устраивает (до 5 минут). Однако вставка нескольких тысяч новых строк занимает более часа.
Смотрю в сторону секционирования таблицы с функцией партицирования [pf_BegTime] по полю [BegTime], чтоб новые записи валились в новый файл (каждую неделю создавать). Начал было реализовывать, но столкнулся с проблемой уникального индекса [idx_Main], который должен быть уникальным не только в пределах секции, но и во всей таблице:
Код: sql
1.
create unique index [uix_Main] on [T_Stat]([A],[B]) on [ps_BegTime]([BegTime])


Попытка создания завершается ошибкой:
Column 'BegTime' is partitioning column of the index 'uix_Main'. Partition columns for a unique index must be a subset of the index key.
Помогите плиз.
...
Рейтинг: 0 / 0
Секционирование таблицы
    #40007152
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
=Сергей=
Помогите плиз.

Никак, секционированный уникальный индекс обязан содержать поле секционирования в ключе.
Я даже скажу больше, неуникальный так же будет содержать поле секционирования в ключе неявно.

Ограничение понятно, поддерживать уникальность в рамках нескольких секций достаточно проблематично.
...
Рейтинг: 0 / 0
Секционирование таблицы
    #40007169
=Сергей=
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А как ещё повысить производительность при вставке?
...
Рейтинг: 0 / 0
Секционирование таблицы
    #40007182
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
=Сергей=,

авторвставка нескольких тысяч новых строк занимает более часа

Что-то мешает вставке, такое незначительное количество не может вставляться столько времени. Например, висят долгие читающие запросы на таблице, или еще что-то.
...
Рейтинг: 0 / 0
Секционирование таблицы
    #40007198
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
offtopic
=Сергей= При построении индексов используется FillFactor 50%Задлянафига?
...
Рейтинг: 0 / 0
Секционирование таблицы
    #40007204
=Сергей=
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SERG1257
Задлянафига?

Как то исторически сложилось
...
Рейтинг: 0 / 0
Секционирование таблицы
    #40007206
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SERG1257
offtopic
=Сергей=При построении индексов используется FillFactor 50%
Задлянафига?
Обычно это делается для избежания page splits
...
Рейтинг: 0 / 0
Секционирование таблицы
    #40007266
=Сергей=
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Владислав Колосов
Что-то мешает вставке, такое незначительное количество не может вставляться столько времени. Например, висят долгие читающие запросы на таблице, или еще что-то.

Я гляну и отпишусь, спасибо
...
Рейтинг: 0 / 0
Секционирование таблицы
    #40007267
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
msLex Обычно это делается для избежания page splits Чтобы избежать вредной фрагментации. А что такое FillFactor 50% - та самая фрагментация и есть, причем во всей таблице/индексе, а не только в задетой странице
...
Рейтинг: 0 / 0
Секционирование таблицы
    #40007271
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SERG1257
msLexОбычно это делается для избежания page splits
Чтобы избежать вредной фрагментации. А что такое FillFactor 50% - та самая фрагментация и есть, причем во всей таблице/индексе, а не только в задетой странице
Нет, page splits неприятен не столько появлением физической (внутренней) фрагментации, сколько просадкой перфонанса в ходе самого расщепления страниц. Поэтому, коль уж фрагментации все равно не избежать, индексы, подверженные расщеплению, принудительно фрагментируют, ребилдя с FillFactor меньше 100.
...
Рейтинг: 0 / 0
Секционирование таблицы
    #40007301
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SERG1257,

проблема фрагментации минорная, появляются задержки вставки, которые вызываются расщеплением страниц, в том числе переносом данных. Если данные гарантированно добавляются "в конец" таблицы, то иметь fillfactor <> 100 (0) нет смысла.
Фактор заполнения выбирается таким образом, чтобы в периодах между регулярной переиндексацией количество расщеплений было бы минимальным.
...
Рейтинг: 0 / 0
Секционирование таблицы
    #40007303
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
msLex просадкой перфонанса в ходе самого расщепления страницЧто не проблема для кластерного индекса у TC и неизвестно является ли проблемой для некластерных индексов.
Зато вдвое медленнее будет бакап, checkdb, меньше данных в памяти и т.д. и т.п.

Так что =Сергей= на следующем перестоении индексов поставь 100% для кластерного и хотя бы 80% (а можешь начать с 100% и уменьшать потом) для некластерных.
Это не решит проблемы с медленным добавлением нескольких тысяч строк, но другим операциям станет легче дышать.
...
Рейтинг: 0 / 0
Секционирование таблицы
    #40007355
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
=Сергей=
Владислав Колосов
Что-то мешает вставке, такое незначительное количество не может вставляться столько времени. Например, висят долгие читающие запросы на таблице, или еще что-то.

Я гляну и отпишусь, спасибо
Ага, какой то нонсенс, не может так быть.
Может, записи с гигантскими блобами? Но скорее какой то дефект, экзотический, типа индекса на инсёрт, который стучится к связанному серверу или эксельному файлу.
...
Рейтинг: 0 / 0
Секционирование таблицы
    #40007397
Фотография komrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg
типа индекса на инсёрт, который стучится к связанному серверу или эксельному файлу.

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

триггера
Да, конечно, опечатка...
Посмотрим на результат исследований ТС, интересно, что там так мешает.
...
Рейтинг: 0 / 0
Секционирование таблицы
    #40010384
Кнюпель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А зачем собственно секционирование вообще может потребоваться, особенно в облаке? Ну вот есть предположим 100 мл таблица, ну разбили ее 10 партиций по 10 мл. Что конкретно от этого ускорилось - запросы? Так там индексы есть, искать по индексу что на 10мл, что 100мл разницы-то особой не будет. Или переключение партиций, оно конечно мгновенно подключится, но загрузка в source-то столько-же времени займет. Что-то от меня ускользает смысл их использования
...
Рейтинг: 0 / 0
Секционирование таблицы
    #40010385
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В телеметрии 100млн может быть за неделю . . .
...
Рейтинг: 0 / 0
Секционирование таблицы
    #40010924
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторЧто конкретно от этого ускорилось - запросы
очистка старых данных ускорилась. дроп партиции и всё. по идее ускорились запросы хорошо попадающие в одну партицию целиком.
...
Рейтинг: 0 / 0
Секционирование таблицы
    #40011015
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ScareCrow
авторЧто конкретно от этого ускорилось - запросы

очистка старых данных ускорилась. дроп партиции и всё. по идее ускорились запросы хорошо попадающие в одну партицию целиком.Необязательно, даже "как правило" необязательно.
982183
В телеметрии 100млн может быть за неделю . . .
У меня было полтора миллиарда в день, когда с телеметрией работал.
И это немного, это была агрегированная телеметрия, наверное, кто то обрабатывает и "сырую"...
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Секционирование таблицы
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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