При создании кластерный индекс в таблице в SQL SERVER 2008 (LIVE DB) появилась ошибка выше. Всего записей в таблице 1046789.
Я создал тот же индекс на тестовой базе данных с таким же количеством записей, и он успешно создан.
Спасибо.
Я думаю, ваш вопрос: "Что я могу сделать, чтобы это исправить?"
Делая это предположение:
Для устранения проблемы выполните следующие действия:
Если возможно, найдите транзакцию, которая удерживает блокировку требуемого ресурса. Используйте динамические административные представления sys.dm_os_waiting_tasks и sys.dm_tran_locks.
Если транзакция все еще удерживает блокировку, при необходимости прекратите эту транзакцию.
Выполните запрос еще раз.
Если эта ошибка возникает часто, измените период ожидания блокировки или измените транзакции, вызывающие нарушение, так, чтобы они удерживали блокировку меньше времени.
И если это не сработает:
В этом сценарии необходимо внести следующие изменения в транзакцию-нарушение: 1) Измените транзакцию, используйте подсказки запроса (используйте RECOMPILE, MAXDOPhints) 2) Выполните большую транзакцию в меньших транзакциях. 3) Обновите оборудование, если возможно.
Используйте следующие команды, чтобы точно узнать, какие процессы удерживают эксклюзивные блокировки на вашей таблице. FYI, создание индекса любого типа должно накладывать исключительные блокировки на таблицу из-за сложности задачи. В кластерных индексах данные физически переупорядочиваются на диске. Доступ к таблице будет невозможен, если вы не укажете опцию ONLINE = OFF при создании индекса.
Перед запуском ЗАМЕНИТЕ DATABASE_NAME, DB_ID, OBJ_ID и SPID действительными целыми значениями.
СОЗДАТЬ ТАБЛИЦУ tempdb .. # temp_lock
(spid int, dbid int, ObjId int, IndId int, тип nvarchar (30), ресурс nvarchar (100), режим nvarchar (10), статус nvarchar (30))Использовать DATABASE_NAME
ИДТИ
вставить в tempdb .. # temp_lock exec master..sp_lock
выберите spid, ObjId, режим, имя из tempdb .. # temp_lock как внутреннее соединение [test2] .. sysobjects как b на a.ObjId = b.id, где a.dbid = DB_ID
Определите Spid, который удерживает замки режима "X" на вашем столе. Записывать ObjId и SPID значения из предыдущего запроса.
Узнайте, что выполняет блокирующий Spid.
dbcc inputbuffer (SPID)
или более подробно:
ОБЪЯВИТЬ @Handle binary (252)
ВЫБЕРИТЕ @Handle = sql_handle FROM master..sysprocesses WHERE spid = SPID
ВЫБРАТЬ * ИЗ :: fn_get_sql (@Handle) Перейти
Решите, прекратить ли процесс или зафиксировать транзакцию, если вы знаете, кто (пользователь) выполняет.
УБИЙСТВО SPID
Создайте индекс снова.