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

Откуда:
Сообщений: 121
Microsoft SQL Server 2008 R2 (SP1) - 10.50.2550.0 (X64) Jun 11 2012 16:41:53 Copyright (c) Microsoft Corporation Enterprise Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)

имею таблицу с 32 млн записей
в которой есть PRIMARY KEY CLUSTERED

создавался такой командой
ALTER TABLE [dbo].[Messages] ADD  CONSTRAINT [PK_Messages] PRIMARY KEY CLUSTERED ([ID] ASC) WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON, FILLFACTOR = 90) ON [PRIMARY]


почему команда по его удалению
ALTER TABLE [dbo].[Messages] DROP CONSTRAINT [PK_Messages]


выполняется достаточно длительное время? (в моем эксперименте ~500 cек, но цифра понятное дело, зависит от конкретных условий)
5 дек 13, 19:06    [15248847]     Ответить | Цитировать Сообщить модератору
 Re: Почему удаление кластерного PrimaryKey выполняется не мгновенно?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Потому что CLUSTERED.
5 дек 13, 19:11    [15248863]     Ответить | Цитировать Сообщить модератору
 Re: Почему удаление кластерного PrimaryKey выполняется не мгновенно?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31965
tyratam
почему команда по его удалению выполняется достаточно длительное время? (в моем эксперименте ~500 cек, но цифра понятное дело, зависит от конкретных условий)
А индексов других нет?
5 дек 13, 19:43    [15248987]     Ответить | Цитировать Сообщить модератору
 Re: Почему удаление кластерного PrimaryKey выполняется не мгновенно?  [new]
tyratam
Member

Откуда:
Сообщений: 121
alexeyvg
А индексов других нет?

нет
5 дек 13, 20:29    [15249176]     Ответить | Цитировать Сообщить модератору
 Re: Почему удаление кластерного PrimaryKey выполняется не мгновенно?  [new]
tyratam
Member

Откуда:
Сообщений: 121
Гавриленко Сергей Алексеевич
Потому что CLUSTERED.

Буду признателен за более подробное объяснение или ссылки на них.
5 дек 13, 20:31    [15249184]     Ответить | Цитировать Сообщить модератору
 Re: Почему удаление кластерного PrimaryKey выполняется не мгновенно?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
tyratam
Гавриленко Сергей Алексеевич
Потому что CLUSTERED.

Буду признателен за более подробное объяснение или ссылки на них.
При удалении кластерного индекса, через которых физически обеспечивается clustered primary key, из кластерного индекса надо сделать кучу, т.е. перелить все ваши 32 млн. записей из одной структуры в другую.
5 дек 13, 20:41    [15249227]     Ответить | Цитировать Сообщить модератору
 Re: Почему удаление кластерного PrimaryKey выполняется не мгновенно?  [new]
tyratam
Member

Откуда:
Сообщений: 121
Засада ;-(

а мне еще и заменить INT на BIGINT надо и, потом, создать тот же индекс...
т.е. еще два раза перезаливать сервер будет?

Блин, ну почему bigint'а не было в 1999 году?!
5 дек 13, 20:56    [15249271]     Ответить | Цитировать Сообщить модератору
 Re: Почему удаление кластерного PrimaryKey выполняется не мгновенно?  [new]
SERG1257
Member

Откуда:
Сообщений: 2877
select into
А потом переименовать.
5 дек 13, 21:01    [15249280]     Ответить | Цитировать Сообщить модератору
 Re: Почему удаление кластерного PrimaryKey выполняется не мгновенно?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31965
Гавриленко Сергей Алексеевич
При удалении кластерного индекса, через которых физически обеспечивается clustered primary key, из кластерного индекса надо сделать кучу, т.е. перелить все ваши 32 млн. записей из одной структуры в другую.
По моему, данные не переливаются (в отличие от создания кластерного индекса). ИМХО удаляются верхние элементы дерева, и всё (если конечно нет других инедксов).
5 дек 13, 21:33    [15249377]     Ответить | Цитировать Сообщить модератору
 Re: Почему удаление кластерного PrimaryKey выполняется не мгновенно?  [new]
invm
Member

Откуда: Москва
Сообщений: 9836
tyratam
Буду признателен за более подробное объяснение или ссылки на них.
При удалении кластерного индекса, фактически будут перестроены все некластерные. Скорее всего, это и происходит в вашем случае.
5 дек 13, 21:39    [15249384]     Ответить | Цитировать Сообщить модератору
 Re: Почему удаление кластерного PrimaryKey выполняется не мгновенно?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31965
invm
tyratam
Буду признателен за более подробное объяснение или ссылки на них.
При удалении кластерного индекса, фактически будут перестроены все некластерные. Скорее всего, это и происходит в вашем случае.
Ну да, наиболее вероятно.
Или как вариант была блокировка схемы.
5 дек 13, 21:43    [15249389]     Ответить | Цитировать Сообщить модератору
 Re: Почему удаление кластерного PrimaryKey выполняется не мгновенно?  [new]
tyratam
Member

Откуда:
Сообщений: 121
проверю на таблице без индексов
6 дек 13, 09:29    [15250702]     Ответить | Цитировать Сообщить модератору
 Re: Почему удаление кластерного PrimaryKey выполняется не мгновенно?  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 35390
Блог
invm
tyratam
Буду признателен за более подробное объяснение или ссылки на них.
При удалении кластерного индекса, фактически будут перестроены все некластерные. Скорее всего, это и происходит в вашем случае.


выше ТС написал, что других индексов нет
6 дек 13, 14:57    [15253480]     Ответить | Цитировать Сообщить модератору
 Re: Почему удаление кластерного PrimaryKey выполняется не мгновенно?  [new]
o-o
Guest
Критик,

ну что вы как в первый раз
то было вчера,
а сегодня он передумал и "проверит на таблице без индексов"
так что все там есть
6 дек 13, 15:13    [15253659]     Ответить | Цитировать Сообщить модератору
 Re: Почему удаление кластерного PrimaryKey выполняется не мгновенно?  [new]
Ivan Durak
Member

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

Буду признателен за более подробное объяснение или ссылки на них.
При удалении кластерного индекса, через которых физически обеспечивается clustered primary key, из кластерного индекса надо сделать кучу, т.е. перелить все ваши 32 млн. записей из одной структуры в другую.

А зачем удалять кластерный индекс при удалении PK? Это же разные вещи, и их надо бы иметь возможность независимо удалять!
6 дек 13, 15:26    [15253806]     Ответить | Цитировать Сообщить модератору
 Re: Почему удаление кластерного PrimaryKey выполняется не мгновенно?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Ivan Durak
Гавриленко Сергей Алексеевич
пропущено...
При удалении кластерного индекса, через которых физически обеспечивается clustered primary key, из кластерного индекса надо сделать кучу, т.е. перелить все ваши 32 млн. записей из одной структуры в другую.

А зачем удалять кластерный индекс при удалении PK? Это же разные вещи, и их надо бы иметь возможность независимо удалять!
Уникальные констрейнты физически обеспечиваются индексами. В любом случае, для изменения типа поля придется удалить все, что связано с полем - констрейнт то, или индекс.
6 дек 13, 16:59    [15254691]     Ответить | Цитировать Сообщить модератору
 Re: Почему удаление кластерного PrimaryKey выполняется не мгновенно?  [new]
Ivan Durak
Member

Откуда: Minsk!!!
Сообщений: 3754
Гавриленко Сергей Алексеевич
Ivan Durak
пропущено...

А зачем удалять кластерный индекс при удалении PK? Это же разные вещи, и их надо бы иметь возможность независимо удалять!
Уникальные констрейнты физически обеспечиваются индексами. В любом случае, для изменения типа поля придется удалить все, что связано с полем - констрейнт то, или индекс.

вы на какой-то другой вопрос отвечали, не на мой
6 дек 13, 17:51    [15255073]     Ответить | Цитировать Сообщить модератору
 Re: Почему удаление кластерного PrimaryKey выполняется не мгновенно?  [new]
Glory
Member

Откуда:
Сообщений: 104751
Ivan Durak
вы на какой-то другой вопрос отвечали, не на мой

На ваш.
PK constarint создает индекс автоматически. И удаляет тоже автоматически.
И даже если вы создадите индекс без констрейта, то для изменения типа/размера поля индекс этот придется удалить.
6 дек 13, 17:54    [15255089]     Ответить | Цитировать Сообщить модератору
 Re: Почему удаление кластерного PrimaryKey выполняется не мгновенно?  [new]
GordonF
Member

Откуда:
Сообщений: 39
Гавриленко Сергей Алексеевич,

Не пугайте. Недавно отправлял на тот свет кластер в табличке- без доп индексов, пол секунды, если никто не юзает. Табличка- 16 000 000 записей, и 100 полей :)
Построить кластерный в онлайне можно, а вот удалить, если на табличке десятка 3-4 некластерных-составных, на рабочей системе проблематично ;)
7 дек 13, 22:00    [15258942]     Ответить | Цитировать Сообщить модератору
 Re: Почему удаление кластерного PrimaryKey выполняется не мгновенно?  [new]
tyratam
Member

Откуда:
Сообщений: 121
Критик, Писал. Ошибся.
Действительно, елси нет других индексов - удаление идет быстро.
9 дек 13, 14:03    [15264589]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить