тупик, когда журнал транзакций SQL Server постоянно увеличивается?

Я использую SQL Server 2008 Enterprise. Я пробовал, чтобы если я установил, что журнал транзакций SQL Server когда-либо увеличивался для связанной базы данных (без параметров резервного копирования), тогда один оператор удаления этой хранимой процедуры вызовет тупик, если выполняется несколькими потоками одновременно? Есть идеи, почему?

Для оператора удаления Param1 - это столбец таблицы FooTable, Param1 - это внешний ключ другой таблицы (относится к другому столбцу кластеризованного индекса первичного ключа другой таблицы). Для самой таблицы FooTable нет индекса Param1. В FooTable есть еще один столбец, который используется в качестве кластеризованного первичного ключа, но не столбец Param1.

create PROCEDURE [dbo].[FooProc]    
(  
 @Param1 int 
 ,@Param2 int  
 ,@Param3 int  
)    
AS    

DELETE FooTable WHERE  Param1 = @Param1     

INSERT INTO FooTable    
 (  
 Param1  
 ,Param2  
 ,Param3  
  )    
 VALUES    
 (  
 @Param1  
 ,@Param2  
 ,@Param3  
  )    

DECLARE @ID bigint    
 SET @ID = ISNULL(@@Identity,-1)    
 IF @ID > 0    
 BEGIN    
      SELECT IdentityStr FROM FooTable WHERE ID = @ID 
 END 

person George2    schedule 08.06.2010    source источник
comment
Это действительно тупик (когда один поток прерывается как жертва тупика), или это просто задержка до завершения первого потока ??   -  person marc_s    schedule 08.06.2010
comment
Джордж, это уже третий раз, когда вы спрашиваете о том же тупике, но не предоставили информацию о тупике. Без информации о тупике вы зря теряете время. Прикрепите Profiler, следите за классом событий Deadlock Graph only, дождитесь возникновения взаимоблокировки, прикрепите сохраненный .xdl к своему сообщению.   -  person Remus Rusanu    schedule 08.06.2010
comment
@Marc, это тупик. Я ловлю это в журнале. Есть ли связь между постоянным увеличением журнала транзакций и тупиком?   -  person George2    schedule 09.06.2010
comment
Я не знаю, что именно вы имеете в виду под постоянно увеличивающимся журналом - журнал транзакций по своей природе постоянно увеличивается, правда ... - поэтому я не знаю, повлияет ли это на взаимоблокировки - но я бы догадываюсь: нет, это не влияет.   -  person marc_s    schedule 09.06.2010


Ответы (1)


Как правило, вы всегда должны создавать индекс для столбца с ограничением FOREIGN KEY. В противном случае очень вероятно возникновение взаимоблокировки (потому что сервер должен заблокировать всю зависимую таблицу, чтобы гарантировать это ограничение)

person a1ex07    schedule 08.06.2010
comment
Есть идеи, почему возникает тупик, если журнал транзакций постоянно увеличивается? - person George2; 09.06.2010
comment
Нет ... Журнал транзакций завершается после того, как SQL-сервер обнаруживает открытую транзакцию. - person a1ex07; 09.06.2010