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

Откуда: Сидней
Сообщений: 1176
Добрый день!

Есть таблица в Data warehouse, которая создается с нуля и загружается данными каждую ночь. Размер данных примерно 200ГБ.

После этого на таблице создается кластерный индекс, что обычно занимает около 20 минут. Иногда (примерно раз в две недели) процесс замирает. Обращения к диску и использование процессора почти на нуле, блокировок нет. Наблюдаю большое количество Latches. Я получаю оповещение о том, что создание индекса не закончилось за час, останавливаю джобу и вручную создаю индекс, что заканчивается за обычные 20 минут (на сервере SSD). При этом обращения к диску и использование процессора тут же возрастают.

Эта система была создана не мной и у меня очень ограниченные возможности ее изменения. Хотелось бы найти причину по которой создание кластерного индекса иногда "застревает" и обойтись как можно более косметическими изменениями.

Спасибо.
10 апр 17, 07:53    [20383520]     Ответить | Цитировать Сообщить модератору
 Re: Создание кластерного индекса на большой таблице иногда "застревает"  [new]
a.tarannikova
Member

Откуда:
Сообщений: 153
может быть кто-то убивает сессию и идет откат?
10 апр 17, 10:02    [20383804]     Ответить | Цитировать Сообщить модератору
 Re: Создание кластерного индекса на большой таблице иногда "застревает"  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
a.tarannikova
может быть кто-то убивает сессию и идет откат?

я аж кофе поперхнулся.

посмотрите ожидание
10 апр 17, 10:06    [20383818]     Ответить | Цитировать Сообщить модератору
 Re: Создание кластерного индекса на большой таблице иногда "застревает"  [new]
o-o
Guest
может быть сконфигурирован Resource governor?
и он ограничивает по ресурсам именно джоб?
----
sql_user2 в своем духе: вместо того, чтобы взять профайлер и смотреть, что там их кривое приложение шлет,
он продолжает нести фантастику в массы
10 апр 17, 10:12    [20383848]     Ответить | Цитировать Сообщить модератору
 Re: Создание кластерного индекса на большой таблице иногда "застревает"  [new]
aleks2
Guest
Roust_m
Добрый день!

Есть таблица в Data warehouse, которая создается с нуля и загружается данными каждую ночь. Размер данных примерно 200ГБ.

После этого на таблице создается кластерный индекс, что обычно занимает около 20 минут. Иногда (примерно раз в две недели) процесс замирает. Обращения к диску и использование процессора почти на нуле, блокировок нет. Наблюдаю большое количество Latches. Я получаю оповещение о том, что создание индекса не закончилось за час, останавливаю джобу и вручную создаю индекс, что заканчивается за обычные 20 минут (на сервере SSD). При этом обращения к диску и использование процессора тут же возрастают.

Эта система была создана не мной и у меня очень ограниченные возможности ее изменения. Хотелось бы найти причину по которой создание кластерного индекса иногда "застревает" и обойтись как можно более косметическими изменениями.

Спасибо.


Создание кластерного индекса из кучи - минимально логгируемая операция.
!Если наложена исключительная блокировка на таблицу.

alter table ... with(tablockx)
10 апр 17, 13:52    [20384915]     Ответить | Цитировать Сообщить модератору
 Re: Создание кластерного индекса на большой таблице иногда "застревает"  [new]
invm
Member

Откуда: Москва
Сообщений: 9723
aleks2
Если наложена исключительная блокировка на таблицу.

alter table ... with(tablockx)
Чушь не жалко :)

ЗЫ: Тебе неоднократно советовали - учи матчасть...
10 апр 17, 14:02    [20384986]     Ответить | Цитировать Сообщить модератору
 Re: Создание кластерного индекса на большой таблице иногда "застревает"  [new]
o-o
Guest
aleks2
Создание кластерного индекса из кучи - минимально логгируемая операция.
!Если наложена исключительная блокировка на таблицу.
alter table ... with(tablockx)

да надо же.
а у нас любой *неонлайновый* create/rebuild index всю таблицу лочит намертво без ценных указаний алекса.
и минимально логируется в simple и bulk logged опять же без малейшего алексово вмешательства
10 апр 17, 14:10    [20385039]     Ответить | Цитировать Сообщить модератору
 Re: Создание кластерного индекса на большой таблице иногда "застревает"  [new]
aleks2
Guest
О! Знатоки подтянулись?!

Советуйте, не буду мешать...
10 апр 17, 14:16    [20385090]     Ответить | Цитировать Сообщить модератору
 Re: Создание кластерного индекса на большой таблице иногда "застревает"  [new]
o-o
Guest
не, дарагуля, просто так ты не свалишь.
покажи-ка нам синтаксис создания индекса (create index) с tablock,
а то мы что-то не знаем, куда его(tablock) там вписать, чтоб ошибку парсера не огрести
10 апр 17, 14:20    [20385115]     Ответить | Цитировать Сообщить модератору
 Re: Создание кластерного индекса на большой таблице иногда "застревает"  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
весело :)

конкретно какой Latch. Индекс ONLINE = ON? вы хоть точно после выгрузки запускаете? или в 3-00 строить индекс :)
10 апр 17, 14:40    [20385219]     Ответить | Цитировать Сообщить модератору
 Re: Создание кластерного индекса на большой таблице иногда "застревает"  [new]
Roust_m
Member

Откуда: Сидней
Сообщений: 1176
a.tarannikova
может быть кто-то убивает сессию и идет откат?


Никто ее не убивает, она висит бесконечно. Обращений к диску и процессору почти нет. Если бы был откат, то были бы обращения.
Когда джобу останавливаешь руками и заново запускаешь создание индекса, то все проходит за положенные 20 минут. Диск и процессор при этом начинают интенсивно использоваться.
11 апр 17, 02:23    [20387376]     Ответить | Цитировать Сообщить модератору
 Re: Создание кластерного индекса на большой таблице иногда "застревает"  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37228
Roust_m
a.tarannikova
может быть кто-то убивает сессию и идет откат?


Никто ее не убивает, она висит бесконечно. Обращений к диску и процессору почти нет. Если бы был откат, то были бы обращения.
Когда джобу останавливаешь руками и заново запускаешь создание индекса, то все проходит за положенные 20 минут. Диск и процессор при этом начинают интенсивно использоваться.
И статус создающего индекс коннекта прям так и звучит -- "застрял"?
11 апр 17, 03:29    [20387385]     Ответить | Цитировать Сообщить модератору
 Re: Создание кластерного индекса на большой таблице иногда "застревает"  [new]
Roust_m
Member

Откуда: Сидней
Сообщений: 1176
TaPaK
весело :)

конкретно какой Latch. Индекс ONLINE = ON? вы хоть точно после выгрузки запускаете? или в 3-00 строить индекс :)


Latch уточню, ONLINE = OFF. После выгрузки точно, ибо это отдельный шаг в джобе. Он не может начаться пока шаг выгрузки не закончится.
11 апр 17, 08:48    [20387586]     Ответить | Цитировать Сообщить модератору
 Re: Создание кластерного индекса на большой таблице иногда "застревает"  [new]
Roust_m
Member

Откуда: Сидней
Сообщений: 1176
Гавриленко Сергей Алексеевич
Roust_m
пропущено...


Никто ее не убивает, она висит бесконечно. Обращений к диску и процессору почти нет. Если бы был откат, то были бы обращения.
Когда джобу останавливаешь руками и заново запускаешь создание индекса, то все проходит за положенные 20 минут. Диск и процессор при этом начинают интенсивно использоваться.
И статус создающего индекс коннекта прям так и звучит -- "застрял"?


Скорее всего sleeping. Постараюсь проверить в ближайшее время.
11 апр 17, 08:58    [20387621]     Ответить | Цитировать Сообщить модератору
 Re: Создание кластерного индекса на большой таблице иногда "застревает"  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 35080
Блог
Возможно, примерно в это время чем-то загружено СХД
11 апр 17, 09:01    [20387629]     Ответить | Цитировать Сообщить модератору
 Re: Создание кластерного индекса на большой таблице иногда "застревает"  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
Критик
Возможно, примерно в это время чем-то загружено СХД

ну как станет какой конкретно латч, так и понятнее будет
11 апр 17, 09:03    [20387633]     Ответить | Цитировать Сообщить модератору
 Re: Создание кластерного индекса на большой таблице иногда "застревает"  [new]
Roust_m
Member

Откуда: Сидней
Сообщений: 1176
TaPaK
Критик
Возможно, примерно в это время чем-то загружено СХД

ну как станет какой конкретно латч, так и понятнее будет


LATCH_EX
11 апр 17, 15:30    [20389895]     Ответить | Цитировать Сообщить модератору
 Re: Создание кластерного индекса на большой таблице иногда "застревает"  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
Roust_m
TaPaK
пропущено...

ну как станет какой конкретно латч, так и понятнее будет


LATCH_EX

а что вы вкладываете во фразу
автор
блокировок нет
11 апр 17, 15:33    [20389922]     Ответить | Цитировать Сообщить модератору
 Re: Создание кластерного индекса на большой таблице иногда "застревает"  [new]
Roust_m
Member

Откуда: Сидней
Сообщений: 1176
TaPaK
Roust_m
пропущено...


LATCH_EX

а что вы вкладываете во фразу
автор
блокировок нет


select * from master..sysprocesses where blocked = 1
12 апр 17, 07:14    [20392252]     Ответить | Цитировать Сообщить модератору
 Re: Создание кластерного индекса на большой таблице иногда "застревает"  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
Roust_m
TaPaK
пропущено...

а что вы вкладываете во фразу
пропущено...


select * from master..sysprocesses where blocked = 1

а 1 это что из
автор
blocked smallint Идентификатор сеанса, блокирующего данный запрос. Если этот столбец содержит значение NULL, то запрос не блокирован или сведения о сеансе блокировки недоступны (или не могут быть идентифицированы).

-2 = Блокирующий ресурс принадлежит потерянной распределенной транзакции.

-3 = Блокирующий ресурс принадлежит отложенной транзакции восстановления.

-4 = Идентификатор сеанса владельца кратковременной блокировки не может быть определен из-за внутренних переходов состояния кратковременной блокировки.
12 апр 17, 07:29    [20392258]     Ответить | Цитировать Сообщить модератору
 Re: Создание кластерного индекса на большой таблице иногда "застревает"  [new]
Roust_m
Member

Откуда: Сидней
Сообщений: 1176
TaPaK
Roust_m
пропущено...


select * from master..sysprocesses where blocked = 1

а 1 это что из
автор
blocked smallint Идентификатор сеанса, блокирующего данный запрос. Если этот столбец содержит значение NULL, то запрос не блокирован или сведения о сеансе блокировки недоступны (или не могут быть идентифицированы).

-2 = Блокирующий ресурс принадлежит потерянной распределенной транзакции.

-3 = Блокирующий ресурс принадлежит отложенной транзакции восстановления.

-4 = Идентификатор сеанса владельца кратковременной блокировки не может быть определен из-за внутренних переходов состояния кратковременной блокировки.


Пардон, я немного симпровизировал. Обычно я использую такой запрос:

select spid, blocked from master..sysprocesses (nolock)
where blocked = 0 and
spid in (select blocked from master..sysprocesses (nolock) where blocked <>0)
union
select spid, blocked from master..sysprocesses (nolock)
where blocked <> 0
order by 2, 1
12 апр 17, 08:00    [20392287]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить