SQL Server 2005: почему удаление из временной таблицы зависает навсегда? - PullRequest
2 голосов
/ 12 марта 2010
DELETE FROM #tItem_ID
WHERE #tItem_ID.Item_ID NOT IN (SELECT DISTINCT Item_ID
                                  FROM Item_Keyword 
                                  JOIN Keyword ON Item_Keyword.Keyword_ID = Keyword.Record_ID
                                 WHERE Keyword LIKE @tmpKW)

Ключевое слово% макароны%. Обе временные таблицы имеют длину 3300 единиц. Внутренний выбор выполняется менее чем за секунду. Все строки являются nvarchar (249). Все идентификаторы являются целыми.

Есть идеи? Я выполнил его (он находится в сохраненном процессе) более 12 минут без завершения.

Ответы [ 4 ]

4 голосов
/ 12 марта 2010

Все, что имеет блокировку таблицы, может помешать выполнению запроса. У вас есть какие-либо другие сеансы, открытые в SSMS, где вы что-то сделали с одной из таблиц?

Вы также можете использовать системный sproc sp_who2, чтобы проверить, открыты ли какие-либо блокировки. посмотрите в столбце BlkBy и посмотрите, не висит ли что-нибудь на блокировке, удерживаемой другим процессом.

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

Когда я сталкиваюсь с такими проблемами, я запускаю SQL Heartbeat , и он может показать мне, что вызывает конфликт. Это также показывает взаимоблокировки, связанные с транзакциями, которые не были закрыты правильно, как указано Марком выше.

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

Классический случай, когда SQL Server «зависает», это когда вы открываете транзакцию, но не фиксируете или не выполняете откат. Не зацикливайтесь на фактическом удалении (если вы не работаете с действительно огромным набором данных), что вы не учитываете эту возможность.

0 голосов
/ 12 марта 2010

Звучит так, будто вы хотите прочитать о взаимоблокировке ...

** Не обращайте внимания на мой ответ - я оставляю его так, чтобы комментарий доктора Зима сохранился, но он был неверным **

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...