Время выполнения ALTER COLUMN - PullRequest
3 голосов
/ 17 марта 2010

Наличие таблицы с 60 столбцами и 200 строками. Изменение столбца BIT с NULL на NOT NULL теперь имеет время выполнения более 3 часов. Почему это так долго?

Это запрос, который я выполняю:

ALTER TABLE tbl
ALTER COLUMN col BIT NOT NULL

Есть ли более быстрый способ сделать это, кроме создания нового столбца, обновления его значениями из старого столбца, затем удаления старого столбца и переименования нового?

Это на MS SQL Server 2005.

Ответы [ 2 ]

3 голосов
/ 17 марта 2010

Блокируется ли ALTER общими блокировками метаданных, удерживаемыми другими операторами? Любой ALTER требует монопольной блокировки метаданных и, как таковой, будет блокироваться любым другим оператором, использующим таблицу.

Проверьте Монитор активности или посмотрите на sys.dm_exec_requests и посмотрите, кто блокирует ваш ALTER INDEX.

2 голосов
/ 17 марта 2010

Он все еще работает через 3 часа (пока вы отправляете вопрос) или завершается через 3 часа?

Если он все еще выполняется, запустите DBCC OPENTRAN: вы, вероятно, где-то открыли транзакцию, которая оставила блокировку схемы на таблице

Или SELECT * FROM sys.sysprocesses WHERE blocked <> 0 дает вам то, что было заблокировано

...