Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Помогите разобрать Deadlock (xdl файл прилагается)  [new]
Tainin
Guest
Добрый день

Возникли проблемы с дедлоками.

Есть таблица Message, в неё попадают события из файлов

На таблицу повешен триггер, который обновляет имя файла из полного пути при вставке
(sql именно из этого тригера и находится в логе)

Сам лог прилагаю

К сообщению приложен файл (locks.xdl - 12Kb) cкачать
8 апр 15, 16:49    [17489844]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобрать Deadlock (xdl файл прилагается)  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
Tainin,

так избавьтесь от триггера или перепишите его так, чтобы он не накладывал блокировки на изменяемые страницы..
8 апр 15, 16:55    [17489893]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобрать Deadlock (xdl файл прилагается)  [new]
Tainin
Guest
Владислав Колосов
Tainin,

так избавьтесь от триггера или перепишите его так, чтобы он не накладывал блокировки на изменяемые страницы..

Вы текст тригера видели? Чему там накладывать блокировки?

UPDATE [dbo].[Message] 
		SET [Message].[FileName] = 
			REVERSE(LEFT(REVERSE([Message].[RelativePath]),CHARINDEX('\', REVERSE([Message].[RelativePath]), 1) - 1))
		FROM inserted i 
		WHERE [Message].[Id] = i.[Id] AND [Message].[RelativePath] IS NOT NULL OR LTRIM([Message].[RelativePath])


Обычный update по inserted


Совет из разряда удалить тригер - это как удалить таблицу на которой локи возникают. Нет таблицы - нет проблем.
8 апр 15, 17:01    [17489941]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобрать Deadlock (xdl файл прилагается)  [new]
msLex
Member

Откуда:
Сообщений: 8151
1. Покажите скрипт создания таблицы [dbo].[Message] со всеми индексами
2. У вас дедлок на уровне страниц. Попробуйте хинтами запретить лок на уровне страницы


UPDATE [dbo].[Message] with(rowlock)
...
8 апр 15, 17:15    [17490025]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобрать Deadlock (xdl файл прилагается)  [new]
msLex
Member

Откуда:
Сообщений: 8151
У вас ошибка в триггере, видимо. Вы update-ите все подряд.

UPDATE [dbo].[Message] 
		SET [Message].[FileName] = 
			REVERSE(LEFT(REVERSE([Message].[RelativePath]),CHARINDEX('\', REVERSE([Message].[RelativePath]), 1) - 1))
		FROM inserted i 
		WHERE [Message].[Id] = i.[Id] AND ([Message].[RelativePath] IS NOT NULL OR LTRIM([Message].[RelativePath]) != 0)
8 апр 15, 17:19    [17490056]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобрать Deadlock (xdl файл прилагается)  [new]
Tainin
Guest
msLex
У вас ошибка в триггере, видимо. Вы update-ите все подряд.

UPDATE [dbo].[Message] 
		SET [Message].[FileName] = 
			REVERSE(LEFT(REVERSE([Message].[RelativePath]),CHARINDEX('\', REVERSE([Message].[RelativePath]), 1) - 1))
		FROM inserted i 
		WHERE [Message].[Id] = i.[Id] AND ([Message].[RelativePath] IS NOT NULL OR LTRIM([Message].[RelativePath]) != 0)


Нет, просто условие из обрезалось в логе.
Должно быть LTRIM([Message].[RelativePath]) <> ''
8 апр 15, 17:23    [17490089]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобрать Deadlock (xdl файл прилагается)  [new]
Tainin
Guest
msLex
1. Покажите скрипт создания таблицы [dbo].[Message] со всеми индексами
2. У вас дедлок на уровне страниц. Попробуйте хинтами запретить лок на уровне страницы


UPDATE [dbo].[Message] with(rowlock)
...


Вот таблица сама
SET QUOTED_IDENTIFIER ON
GO

SET ANSI_PADDING ON
GO

CREATE TABLE [dbo].[Message](
	[Id] [int] IDENTITY(1,1) NOT NULL,
	[DocumentId] [int] NOT NULL,
	[UserId] [int] NOT NULL,
	[DateCreated] [datetime] NOT NULL,
	[DocumentStatus] [int] NOT NULL,
	[Comment] [nvarchar](1000) NULL,
	[RelativePath] [nvarchar](500) NULL,
	[MessageChannelId] [int] NOT NULL,
	[PassportId] [uniqueidentifier] NOT NULL,
	[FileName] [nvarchar](250) NULL,
	[IsDumped] [bit] NOT NULL,
	[CertificateThumbprint] [varchar](500) NULL,
 CONSTRAINT [PK_Message] PRIMARY KEY CLUSTERED 
(
	[Id] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

SET ANSI_PADDING OFF
GO

ALTER TABLE [dbo].[Message]  WITH CHECK ADD  CONSTRAINT [FK_Message_Document] FOREIGN KEY([DocumentId])
REFERENCES [dbo].[Document] ([Id])
ON DELETE CASCADE
GO

ALTER TABLE [dbo].[Message] CHECK CONSTRAINT [FK_Message_Document]
GO

ALTER TABLE [dbo].[Message]  WITH CHECK ADD  CONSTRAINT [FK_Message_MessageChannel] FOREIGN KEY([MessageChannelId])
REFERENCES [dbo].[MessageChannel] ([Id])
GO

ALTER TABLE [dbo].[Message] CHECK CONSTRAINT [FK_Message_MessageChannel]
GO

ALTER TABLE [dbo].[Message]  WITH CHECK ADD  CONSTRAINT [FK_Message_User] FOREIGN KEY([UserId])
REFERENCES [dbo].[User] ([Id])
GO

ALTER TABLE [dbo].[Message] CHECK CONSTRAINT [FK_Message_User]
GO

ALTER TABLE [dbo].[Message] ADD  CONSTRAINT [msg_constr]  DEFAULT (newid()) FOR [PassportId]
GO

ALTER TABLE [dbo].[Message] ADD  DEFAULT ((0)) FOR [IsDumped]
GO
8 апр 15, 17:25    [17490102]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобрать Deadlock (xdl файл прилагается)  [new]
msLex
Member

Откуда:
Сообщений: 8151
Tainin
msLex
У вас ошибка в триггере, видимо. Вы update-ите все подряд.

UPDATE [dbo].[Message] 
		SET [Message].[FileName] = 
			REVERSE(LEFT(REVERSE([Message].[RelativePath]),CHARINDEX('\', REVERSE([Message].[RelativePath]), 1) - 1))
		FROM inserted i 
		WHERE [Message].[Id] = i.[Id] AND ([Message].[RelativePath] IS NOT NULL OR LTRIM([Message].[RelativePath]) != 0)



Нет, просто условие из обрезалось в логе.
Должно быть LTRIM([Message].[RelativePath]) <> ''

вы пропустили скобки
8 апр 15, 17:26    [17490110]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобрать Deadlock (xdl файл прилагается)  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
Tainin,
если Вы будете обновление выполнять отдельной транзакцией, то проблема, скорее всего исчезнет сама собой. Или сразу готовьте данные так, чтобы они не требовали обновления.
8 апр 15, 17:28    [17490121]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобрать Deadlock (xdl файл прилагается)  [new]
Tainin
Guest
hint попробую
8 апр 15, 17:29    [17490126]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобрать Deadlock (xdl файл прилагается)  [new]
Crimean
Member

Откуда:
Сообщений: 13148
msLex
вы пропустили скобки


+1
8 апр 15, 17:32    [17490144]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобрать Deadlock (xdl файл прилагается)  [new]
хмхмхм
Guest
Tainin,

А план запроса с update-ом из триггера можете привести?
9 апр 15, 09:46    [17492099]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить