Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Вставка строк, clustered index  [new]
=Сергей=
Member

Откуда:
Сообщений: 329
Есть БОЛЬШАЯ таблица:
create table [BigTable]
(
    [id] bigint identity(1,1)
   ,[SourceID] int not null
   ,[Field1] varchar(10) not null
   ,[Field2] varchar(10) not null
   ,[Field3] varchar(10) not null
   ,[BegTime] datetime not null
   ,[EndTime] datetime not null
   ,[Count] int not null
   ,constraint [PK_BigTable] primary key clustered ([SourceID],[Field1],[Field2],[Field3])
)

В поле [SourceID] были значения от 1 до 300, за исключением 50-55.
До недавнего времени, update/insert в указанную таблицу проходил достаточно быстро. Затем стали доступными источники данных 50-55 и тут понеслось: вставка сотни тысяч строк длится НЕПРИЕМЛЕМО долго.
Если я правильно понимаю, причина в отсутствии незанятого места в кластерном индексе и для вставки SQL-серверу нужно каким-то образом его получить. Fill factor по-умолчанию - 0. Подскажите, как решить проблему?
26 дек 16, 19:13    [20050287]     Ответить | Цитировать Сообщить модератору
 Re: Вставка строк, clustered index  [new]
=Сергей=
Member

Откуда:
Сообщений: 329
чуть поправлю:
EXEC sp_configure 'fill factor'

возвращает
Name             minimum maximum config_value run_value   
------------------------------------------------------- 
fill factor (%)  0       100     0            0


а на самом деле, наверное, 100%
26 дек 16, 20:02    [20050380]     Ответить | Цитировать Сообщить модератору
 Re: Вставка строк, clustered index  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31442
=Сергей=
В поле [SourceID] были значения от 1 до 300, за исключением 50-55.
До недавнего времени, update/insert в указанную таблицу проходил достаточно быстро. Затем стали доступными источники данных 50-55 и тут понеслось: вставка сотни тысяч строк длится НЕПРИЕМЛЕМО долго.
Если я правильно понимаю, причина в отсутствии незанятого места в кластерном индексе и для вставки SQL-серверу нужно каким-то образом его получить. Fill factor по-умолчанию - 0. Подскажите, как решить проблему?
У вас все вставки (не только для 50-55) будут происходить с получением места для вставки в середине уже заполненных страниц, то есть будет делаться расщепление страниц.

Возможно, раньше вставка делалась сериями по одному SourceID, а теперь (или только для 50-55) - с чередованием?

Можно попробовать сделать филл-фактор поменьше.
Для этого перестройте кластерный индекс (ПК) с соотв филл-фактором
26 дек 16, 22:09    [20050700]     Ответить | Цитировать Сообщить модератору
 Re: Вставка строк, clustered index  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37069
Убедиться, что есть расщепления, можно через sys.dm_db_index_operational_stats.leaf_allocation_count (+ tree_allocation_count)

Бороться или регулярными ребилдами для поддержания FF, или железками, которые это "долго" преврятят в почти незаметно, или изменением схемы.
26 дек 16, 23:21    [20050877]     Ответить | Цитировать Сообщить модератору
 Re: Вставка строк, clustered index  [new]
aleks2
Guest
Гавриленко Сергей Алексеевич
Убедиться, что есть расщепления, можно через sys.dm_db_index_operational_stats.leaf_allocation_count (+ tree_allocation_count)

Бороться или регулярными ребилдами для поддержания FF, или железками, которые это "долго" преврятят в почти незаметно, или изменением схемы.


Я поражен, в тот момент, когда вспомнить всуе о партиционировании вполне уместно - фсе несут какую-то пургу.

ЗЫ. Ну, тредстартеру еще можно поразмыслить на тему изменения кластерного индекса. Фсяко, то что у него нарисовано "кластерным" - фуфло по-определению. Т.е. хуже не будет
27 дек 16, 07:37    [20051197]     Ответить | Цитировать Сообщить модератору
 Re: Вставка строк, clustered index  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31442
aleks2
Я поражен, в тот момент, когда вспомнить всуе о партиционировании вполне уместно - фсе несут какую-то пургу.
У него есть какой то identity id, непонятного назначения. Он всё портит :-(

aleks2
Фсяко, то что у него нарисовано "кластерным" - фуфло по-определению. Т.е. хуже не будет
Это не 100%. Мы же не знаем подробностей, может, там миллиарды чтений по [SourceID],[Field1],...
27 дек 16, 09:40    [20051439]     Ответить | Цитировать Сообщить модератору
 Re: Вставка строк, clustered index  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
alexeyvg,

автор
Это не 100%. Мы же не знаем подробностей, может, там миллиарды чтений по [SourceID],[Field1],...

так самый правильный вопрос и есть зачем ему такой индекс, пусть ответит :) а FF это очень странная припарка, раз вставляет много, то и перестраивает постоянно
27 дек 16, 10:12    [20051546]     Ответить | Цитировать Сообщить модератору
 Re: Вставка строк, clustered index  [new]
invm
Member

Откуда: Москва
Сообщений: 9406
=Сергей=
До недавнего времени, update/insert в указанную таблицу проходил достаточно быстро.
Т.е. сотни тысяч строк всегда добавлялись с возрастающим SourceID?
27 дек 16, 10:24    [20051606]     Ответить | Цитировать Сообщить модератору
 Re: Вставка строк, clustered index  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
=Сергей=,

Вам бы понимания, что такое кластеризованный индекс и как его готовить. Глядишь - и пошло бы дело.
27 дек 16, 12:40    [20052344]     Ответить | Цитировать Сообщить модератору
 Re: Вставка строк, clustered index  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
=Сергей=
Подскажите, как решить проблему?
БОЛЬШАЯ таблица и НЕПРИЕМЛЕМО долго конечно очень точное определение для описания ситуации. Еще можно вот так написать - БОЛЬШАЯ и НЕПРИЕМЛЕМО. И нам сразу станет намного понятнее в чем у вас проблема.
А вообще, можно было бы подробнее описать как именно идет вставка этой сотни тысяч строк, ну и хотя бы посмотреть чего именно ждет сервер во время вставки, а не строить какие то догадки по поводу свободного места в кластерном индексе.
28 дек 16, 21:02    [20058159]     Ответить | Цитировать Сообщить модератору
 Re: Вставка строк, clustered index  [new]
o-o
Guest
invm
=Сергей=
До недавнего времени, update/insert в указанную таблицу проходил достаточно быстро.
Т.е. сотни тысяч строк всегда добавлялись с возрастающим SourceID?

автор
В поле [SourceID] были значения от 1 до 300, за исключением 50-55

как вариант, до этого сорсы были локальными,
а 50-55 это линкованные.
а кластерный это то, что первое бросилось в глаза.
вернее, второе.
первое, это магические числа 50-55
28 дек 16, 21:21    [20058195]     Ответить | Цитировать Сообщить модератору
 Re: Вставка строк, clustered index  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37069
aleks2
Я поражен, в тот момент, когда вспомнить всуе о партиционировании вполне уместно - фсе несут какую-то пургу.
Ага, очевидно же, что приведенный ключ не может иметь более 15к вариантов, ну или вставка в рамках SourceId всегда монотонно возрастающая.
28 дек 16, 22:32    [20058359]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить