У меня есть следующие отношения
Ключевое слово (1) <---> (n) K2I (n) <---> (1) Клип (n) <---> (1)Медиа
А именно, у нас есть набор ключевых слов и набор клипов.Любые ключевые слова могут быть связаны с любыми клипами.На одном носителе может быть определено несколько клипов.
Я неоднократно тупил со следующим графиком:
deadlock-list
deadlock victim=process8ba4d8
process-list
process id=process8ba4d8 taskpriority=0 logused=2120 waitresource=KEY: 6:72057600639696896 (37001eba95c6) waittime=7593 ownerId=2999710658 transactionname=user_transaction lasttranstarted=2012-03-23T10:13:29.140 XDES=0x2e2395e8 lockMode=U schedulerid=1 kpid=5268 status=suspended spid=295 sbid=0 ecid=0 priority=0 transcount=2 lastbatchstarted=2012-03-23T10:13:29.857 lastbatchcompleted=2012-03-23T10:13:29.857 hostpid=2648 loginname=EVS isolationlevel=read committed (2) xactid=2999710658 currentdb=6 lockTimeout=4294967295 clientoption1=671088672 clientoption2=128056
executionStack
frame procname=adhoc line=1 sqlhandle=0x0200000037de5708dce42f56ca1fb49fb2f34ac7f1b17d21
DELETE FROM [KeyWordsToItem]
WHERE IdItemType = 2 AND
IdItem IN (
SELECT Id FROM [Clip]
WHERE IdMedia = 8904 AND LSM_LouthID NOT IN ('#NCnuyFG') )
inputbuf
DELETE FROM [KeyWordsToItem]
WHERE IdItemType = 2 AND
IdItem IN (
SELECT Id FROM [Clip]
WHERE IdMedia = 8904 AND LSM_LouthID NOT IN ('#NCnuyFG') )
process id=processbf5018 taskpriority=0 logused=6884 waitresource=KEY: 6:72057600638255104 (810048eb4170) waittime=5000 ownerId=2999709276 transactionname=user_transaction lasttranstarted=2012-03-23T10:13:28.640 XDES=0x26f505e0 lockMode=S schedulerid=4 kpid=2488 status=suspended spid=293 sbid=0 ecid=0 priority=0 transcount=2 lastbatchstarted=2012-03-23T10:13:29.687 lastbatchcompleted=2012-03-23T10:13:29.687 hostpid=3516 loginname=EVS isolationlevel=read committed (2) xactid=2999709276 currentdb=6 lockTimeout=4294967295 clientoption1=671088672 clientoption2=128056
executionStack
frame procname=adhoc line=1 sqlhandle=0x020000004ccefe1488b29fbb71c97825ce7c74e9e683fd2c
DELETE FROM [KeyWordsToItem]
WHERE IdItemType = 2 AND
IdItem IN (
SELECT Id FROM [Clip]
WHERE IdMedia = 8905 AND LSM_LouthID NOT IN ('#NBIZhap') )
inputbuf
DELETE FROM [KeyWordsToItem]
WHERE IdItemType = 2 AND
IdItem IN (
SELECT Id FROM [Clip]
WHERE IdMedia = 8905 AND LSM_LouthID NOT IN ('#NBIZhap') )
resource-list
keylock hobtid=72057600639696896 dbid=6 objectname=CleanEditDB.dbo.KeyWordsToItem indexname=PK_KeyWordsToItem id=lock2d9e3680 mode=U associatedObjectId=72057600639696896
owner-list
owner id=processbf5018 mode=U
waiter-list
waiter id=process8ba4d8 mode=U requestType=wait
keylock hobtid=72057600638255104 dbid=6 objectname=CleanEditDB.dbo.Clip indexname=IX_Clip id=lock78200640 mode=X associatedObjectId=72057600638255104
owner-list
owner id=process8ba4d8 mode=X
waiter-list
waiter id=processbf5018 mode=S requestType=wait
Насколько я понимаю, эти 2 транзакции работают с двумя непересекающимися наборами данных.*
Так почему тупик?Это потому, что сервер берет блокировки страниц за сценой?
Как я могу предотвратить их появление?
Спасибо за вашу помощь!
Вот определение таблиц и индексов:
CREATE TABLE [dbo].[KeyWordsToItem](
[IdKeyWord] [dbo].[identifier] NOT NULL,
[IdItem] [dbo].[identifier] NOT NULL,
[IdItemType] [dbo].[identifier] NOT NULL,
[PosIndex] [tinyint] NOT NULL,
CONSTRAINT [PK_KeyWordsToItem] PRIMARY KEY CLUSTERED
(
[IdItemType] ASC,
[IdItem] ASC,
[IdKeyWord] ASC,
[PosIndex] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
CREATE NONCLUSTERED INDEX [IX_KeyWordsToItem_KeyWord] ON [dbo].[KeyWordsToItem]
(
[IdKeyWord] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
CREATE TABLE [dbo].[KeyWords](
[Id] [dbo].[identifier] IDENTITY(1,1) NOT NULL,
[Keyword] [nvarchar](64) NOT NULL,
CONSTRAINT [PK_KeyWords] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90) ON [PRIMARY]
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[Clip](
[Id] [dbo].[identifier] IDENTITY(1,1) NOT NULL,
[IdMedia] [dbo].[identifier] NOT NULL,
[TcInMedia] [dbo].[fields] NOT NULL,
[Label] [nvarchar](256) NOT NULL,
[Duration] [dbo].[fields] NOT NULL,
CONSTRAINT [PK_Clip] PRIMARY KEY NONCLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90) ON [PRIMARY]
) ON [PRIMARY]
CREATE NONCLUSTERED INDEX [IX_Clip_IdMedia] ON [dbo].[Clip]
(
[IdMedia] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90) ON [PRIMARY]
GO
CREATE TABLE [dbo].[Media](
[Id] [dbo].[identifier] IDENTITY(1,1) NOT NULL,
[IdMediaFileLow] [dbo].[identifier] NULL,
[IdMediaFileHigh] [dbo].[identifier] NULL,
[Label] [nvarchar](256) NOT NULL,
[LSM_LouthID] [nchar](8) NULL,
[Version] [timestamp] NOT NULL,
CONSTRAINT [PK_Media] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90) ON [PRIMARY]
) ON [PRIMARY]
GO
CREATE NONCLUSTERED INDEX [IX_Media_IdMediaFileHigh] ON [dbo].[Media]
(
[IdMediaFileHigh] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90) ON [PRIMARY]
GO
CREATE NONCLUSTERED INDEX [IX_Media_IdMediaFileLow] ON [dbo].[Media]
(
[IdMediaFileLow] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90) ON [PRIMARY]
GO