Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
 Re: Что сделать, что бы избежать deadlock?  [new]
o-o
Guest
Дед-Папыхтет,
я типа ваш граф читаю, вот он в сжатом виде:
автор
process36ccc7c108 (victim, reader):
YOUDO\daemon
read uncommitted
select from AllTasks
waitresource=dbo.VerifiedUsersData (objid="2135125563")
has Sch-S on dbo.AllTasks
wants Sch-S on dbo.VerifiedUsersData


processd4a0009088
YOUDO\akordubaylo
read committed
DROP VIEW [dbo].[AllTasks]
waitresource=dbo.AllTasks (objid="1584171605")
has Sch-M on dbo.VerifiedUsersData
wants Sch-M on dbo.AllTasks

ткните мне, где не так
9 дек 16, 12:20    [19984149]     Ответить | Цитировать Сообщить модератору
 Re: Что сделать, что бы избежать deadlock?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
автор
или на снапшот уровень изоляции менять, что может полагаю добавить дидлоков.

снапшот прекрасен :)
9 дек 16, 12:21    [19984158]     Ответить | Цитировать Сообщить модератору
 Re: Что сделать, что бы избежать deadlock?  [new]
invm
Member

Откуда: Москва
Сообщений: 9406
Дед-Папыхтет
риданкомитед убирать не вариант... или на снапшот уровень изоляции менять, что может полагаю добавить дидлоков. Или тормоза при блокировках добавятся...
Вы бы почитали что ли что такое RCSI. А потом уже рассуждайте про дополнительные блокировки, дедлоки и т.п.

Впрочем, можете решить свою проблему отказавшись от "миграции" в единой транзакции. И начальство останется довольно, и вам ничего делать и изучать не придется.
9 дек 16, 12:25    [19984176]     Ответить | Цитировать Сообщить модератору
 Re: Что сделать, что бы избежать deadlock?  [new]
o-o
Guest
Дед-Папыхтет
риданкомитед убирать не вариант... или на снапшот уровень изоляции менять

вам никто и не предлагает менять уровень изоляции.
RCSI <> Snapshot
RCSI = это опция базы, будет все тот же read committed (RC = Read Committed), только реализованный оптимистически(row versions)
9 дек 16, 12:37    [19984245]     Ответить | Цитировать Сообщить модератору
 Re: Что сделать, что бы избежать deadlock?  [new]
Дед-Папыхтет
Member [заблокирован]

Откуда:
Сообщений: 2808
invm
Дед-Папыхтет
риданкомитед убирать не вариант... или на снапшот уровень изоляции менять, что может полагаю добавить дидлоков. Или тормоза при блокировках добавятся...
Вы бы почитали что ли что такое RCSI. А потом уже рассуждайте про дополнительные блокировки, дедлоки и т.п.

Впрочем, можете решить свою проблему отказавшись от "миграции" в единой транзакции. И начальство останется довольно, и вам ничего делать и изучать не придется.

Да я понимаю что это read committed snapshot isolation
просто перейти на него тоже эпопея с ревью кода будет 2 апдейта не ждут а один выполняется, другие с ошибкой вываливаются.... какие то обработки ставить дополнительные в куче кода придется вставлять... С селектами понятно зашибись все будет
9 дек 16, 12:37    [19984248]     Ответить | Цитировать Сообщить модератору
 Re: Что сделать, что бы избежать deadlock?  [new]
o-o
Guest
Дед-Папыхтет
invm
пропущено...
Вы бы почитали что ли что такое RCSI. А потом уже рассуждайте про дополнительные блокировки, дедлоки и т.п.

Впрочем, можете решить свою проблему отказавшись от "миграции" в единой транзакции. И начальство останется довольно, и вам ничего делать и изучать не придется.

Да я понимаю что это read committed snapshot isolation
просто перейти на него тоже эпопея с ревью кода будет 2 апдейта не ждут а один выполняется, другие с ошибкой вываливаются....
какие то обработки ставить дополнительные в куче кода придется вставлять... С селектами понятно зашибись все будет

нет, вы упорно продолжаете долбить SNAPSHOT,
а вам говорят RCSI <> SNAPSHOT,
BOL
Snapshot isolation is vulnerable to update conflicts that are not applicable to read committed isolation using row versioning.
When a transaction running under snapshot isolation reads data that is then modified by another transaction,
an update by the snapshot transaction to the same data causes an update conflict and the transaction terminates and rolls back.
This is not an issue with read committed isolation using row versioning.

Choosing Row Versioning-based Isolation Levels
9 дек 16, 12:47    [19984311]     Ответить | Цитировать Сообщить модератору
 Re: Что сделать, что бы избежать deadlock?  [new]
o-o
Guest


К сообщению приложен файл. Размер - 63Kb
9 дек 16, 12:54    [19984368]     Ответить | Цитировать Сообщить модератору
 Re: Что сделать, что бы избежать deadlock?  [new]
Дед-Папыхтет
Member [заблокирован]

Откуда:
Сообщений: 2808
Всем большое спасибо!
Спасло то, что убрал schemabinding. Миграция в итоге пролетела без взаимоблокировок.
9 дек 16, 14:11    [19984870]     Ответить | Цитировать Сообщить модератору
 Re: Что сделать, что бы избежать deadlock?  [new]
invm
Member

Откуда: Москва
Сообщений: 9406
Дед-Папыхтет
Спасло то, что убрал schemabinding.
Вот так и рождаются мифы...
9 дек 16, 14:17    [19984911]     Ответить | Цитировать Сообщить модератору
 Re: Что сделать, что бы избежать deadlock?  [new]
o-o
Guest
Дед-Папыхтет
Всем большое спасибо!
Спасло то, что убрал schemabinding. Миграция в итоге пролетела без взаимоблокировок.

товарищ, а вы шторы на окне часом не поменяли?
оно тоже ведь на дедлоки влият
---
ждем вас обратно в тему
9 дек 16, 14:20    [19984924]     Ответить | Цитировать Сообщить модератору
 Re: Что сделать, что бы избежать deadlock?  [new]
Дед-Папыхтет
Member [заблокирован]

Откуда:
Сообщений: 2808
o-o
Дед-Папыхтет
Всем большое спасибо!
Спасло то, что убрал schemabinding. Миграция в итоге пролетела без взаимоблокировок.

товарищ, а вы шторы на окне часом не поменяли?
оно тоже ведь на дедлоки влият
---
ждем вас обратно в тему

Причем тут шторы? дроп вью накладывает блокировки на таблицы которые во вьюхе - Sch-M, в случае если вьюха со schemabinding, без привязки к схеме не накладывает.
9 дек 16, 14:21    [19984927]     Ответить | Цитировать Сообщить модератору
 Re: Что сделать, что бы избежать deadlock?  [new]
Дед-Папыхтет
Member [заблокирован]

Откуда:
Сообщений: 2808
invm
Дед-Папыхтет
Спасло то, что убрал schemabinding.
Вот так и рождаются мифы...

На тему мифов... задачи 2 изначально стояло:
1. от руководства - устранить дидлоки, и дать возможность миграции онлайн проходить.
2. разобраться с причиной и механикой этих дидлоков.

1й пункт реализован.
2й не до конца - дальше буду копать.


3 - внезапно если решили включить RCSI на бою что бы проверить? меня просто не поймут. Если даже и прийдем к этому, то будет не быстрое тестирование функционала. После уже "с опаской" делать эти изменения, и возможностью откатиться быстро, в случае проблем. Это блин, не в запросе хинт воткнуть - влияние окажет на всю систему в целом. Подобный шаг, на мой взгляд - тоже самое что фундамент в доме поменять, а если не понравится обратно. Т.е. ну это возможно, но нужно быть уверенным, что вся система не ляжет или ее значительная часть.
9 дек 16, 14:25    [19984941]     Ответить | Цитировать Сообщить модератору
 Re: Что сделать, что бы избежать deadlock?  [new]
invm
Member

Откуда: Москва
Сообщений: 9406
Дед-Папыхтет
дроп вью накладывает блокировки на таблицы которые во вьюхе - Sch-M
Не накладывает. Накладывает Sch-S, причем не зависимо от наличия schemabinding.
Дед-Папыхтет
устранить дидлоки, и дать возможность миграции онлайн проходить.
Устранили? Уверены?
Вас не смущает, что в дедлоке задействована таблица, которая вообще к представлению не относится?
9 дек 16, 14:43    [19985033]     Ответить | Цитировать Сообщить модератору
 Re: Что сделать, что бы избежать deadlock?  [new]
o-o
Guest
Дед-Папыхтет
дроп вью накладывает блокировки на таблицы которые во вьюхе - Sch-M, в случае если вьюха со schemabinding, без привязки к схеме не накладывает.

безосновательная лабудища.

вот код создания двух вьюх:
со schemabinding и без schemabinding,
+ код вьюхи для просмотра блокировок
+ дроп обеих вьюх
найдите отличия
+ код
CREATE VIEW DBlocks AS 
SELECT  request_session_id AS spid , 
        DB_NAME(resource_database_id) AS dbname,
        resource_associated_entity_id, 
        CASE WHEN resource_type = 'OBJECT' 
             THEN OBJECT_NAME(resource_associated_entity_id) 
             WHEN resource_associated_entity_id = 0 THEN 'n/a' 
             ELSE OBJECT_NAME(p.object_id) 
        END AS entity_name , 
        index_id , 
        resource_type AS resource , 
        resource_description AS description , 
        request_mode AS mode , 
        request_status AS status 
FROM    sys.dm_tran_locks t 
        LEFT JOIN sys.partitions p 
                   ON p.partition_id = t.resource_associated_entity_id 
WHERE   resource_database_id = DB_ID() 
        AND resource_type <> 'DATABASE' ;

go
CREATE VIEW [HumanResources].[vEmployee] 
AS 
SELECT 
e.[EmployeeID]
,c.[Title]
,c.[FirstName]
,c.[MiddleName]
,c.[LastName]
,c.[Suffix]
,e.[Title] AS [JobTitle] 
,c.[Phone]
,c.[EmailAddress]
,c.[EmailPromotion]
,a.[AddressLine1]
,a.[AddressLine2]
,a.[City]
,sp.[Name] AS [StateProvinceName] 
,a.[PostalCode]
,cr.[Name] AS [CountryRegionName] 
,c.[AdditionalContactInfo]
FROM [HumanResources].[Employee] e
INNER JOIN [Person].[Contact] c 
ON c.[ContactID] = e.[ContactID]
INNER JOIN [HumanResources].[EmployeeAddress] ea 
ON e.[EmployeeID] = ea.[EmployeeID] 
INNER JOIN [Person].[Address] a 
ON ea.[AddressID] = a.[AddressID]
INNER JOIN [Person].[StateProvince] sp 
ON sp.[StateProvinceID] = a.[StateProvinceID]
INNER JOIN [Person].[CountryRegion] cr 
ON cr.[CountryRegionCode] = sp.[CountryRegionCode];

go
CREATE VIEW [HumanResources].[vEmployee_scmb]
with schemabinding 
AS 
SELECT 
e.[EmployeeID]
,c.[Title]
,c.[FirstName]
,c.[MiddleName]
,c.[LastName]
,c.[Suffix]
,e.[Title] AS [JobTitle] 
,c.[Phone]
,c.[EmailAddress]
,c.[EmailPromotion]
,a.[AddressLine1]
,a.[AddressLine2]
,a.[City]
,sp.[Name] AS [StateProvinceName] 
,a.[PostalCode]
,cr.[Name] AS [CountryRegionName] 
,c.[AdditionalContactInfo]
FROM [HumanResources].[Employee] e
INNER JOIN [Person].[Contact] c 
ON c.[ContactID] = e.[ContactID]
INNER JOIN [HumanResources].[EmployeeAddress] ea 
ON e.[EmployeeID] = ea.[EmployeeID] 
INNER JOIN [Person].[Address] a 
ON ea.[AddressID] = a.[AddressID]
INNER JOIN [Person].[StateProvince] sp 
ON sp.[StateProvinceID] = a.[StateProvinceID]
INNER JOIN [Person].[CountryRegion] cr 
ON cr.[CountryRegionCode] = sp.[CountryRegionCode];

go

begin tran
	select object_id('[HumanResources].[vEmployee]');
	
	drop view [HumanResources].[vEmployee];
	 
	select *
	from dbo.DBlocks
	where mode like 'Sch%'
	order by mode, entity_name;
rollback


begin tran
	select object_id('[HumanResources].[vEmployee_scmb]');

	drop view [HumanResources].[vEmployee_scmb];
	 
	select *
	from dbo.DBlocks
	where mode like 'Sch%'
	order by mode, entity_name;
rollback


К сообщению приложен файл. Размер - 80Kb
9 дек 16, 14:59    [19985136]     Ответить | Цитировать Сообщить модератору
 Re: Что сделать, что бы избежать deadlock?  [new]
Дед-Папыхтет
Member [заблокирован]

Откуда:
Сообщений: 2808
invm
Дед-Папыхтет
дроп вью накладывает блокировки на таблицы которые во вьюхе - Sch-M
Не накладывает. Накладывает Sch-S, причем не зависимо от наличия schemabinding.


ОК как тогда в приведенном графе понять?
Картинка с другого сайта.
9 дек 16, 16:04    [19985477]     Ответить | Цитировать Сообщить модератору
 Re: Что сделать, что бы избежать deadlock?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Дед-Папыхтет,

а как вы вообще связали указанную таблицу со вью со схемабиндингом????
9 дек 16, 16:10    [19985518]     Ответить | Цитировать Сообщить модератору
 Re: Что сделать, что бы избежать deadlock?  [new]
Дед-Папыхтет
Member [заблокирован]

Откуда:
Сообщений: 2808
TaPaK
Дед-Папыхтет,

а как вы вообще связали указанную таблицу со вью со схемабиндингом????

Только графом дидлока в одном процессе... Реально таблица во вьюхе не присутствует...
9 дек 16, 16:20    [19985570]     Ответить | Цитировать Сообщить модератору
 Re: Что сделать, что бы избежать deadlock?  [new]
o-o
Guest
Дед-Папыхтет,
вы совсем не читаете ответы?
уже же написано
o-o
Дед-Папыхтет,
я типа ваш граф читаю, вот он в сжатом виде:
автор
process36ccc7c108 (victim, reader):
YOUDO\daemon
read uncommitted
select from AllTasks
waitresource=dbo.VerifiedUsersData (objid="2135125563")
has Sch-S on dbo.AllTasks
wants Sch-S on dbo.VerifiedUsersData


processd4a0009088
YOUDO\akordubaylo
read committed
DROP VIEW [dbo].[AllTasks]
waitresource=dbo.AllTasks (objid="1584171605")
has Sch-M on dbo.VerifiedUsersData
wants Sch-M on dbo.AllTasks

ткните мне, где не так

processd4a0009088 меняет данные.
в транзакции.
где-то ранее по коду(еще до дропа вьюхи)
он получил Sch-M on dbo.VerifiedUsersData.

что неясного в графе?
перечислены ресурсы и овнеры полученных на них блокировок.
ваш YOUDO\akordubaylo получил Sch-M on dbo.VerifiedUsersData
и хочет Sch-M on dbo.AllTasks.
ранее полученный Sch-M on dbo.VerifiedUsersData не отпускает,
потому что ВСЕ ИЗМЕНЕНИЯ ДЕЛАЕТ В ТРАНЗАКЦИИ
закончил он не знаю какие действия с dbo.VerifiedUsersData,
но не отпускает.
9 дек 16, 16:20    [19985575]     Ответить | Цитировать Сообщить модератору
 Re: Что сделать, что бы избежать deadlock?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Дед-Папыхтет
TaPaK
Дед-Папыхтет,

а как вы вообще связали указанную таблицу со вью со схемабиндингом????

Только графом дидлока в одном процессе... Реально таблица во вьюхе не присутствует...

зато у вас вывод огонь
автор
Спасло то, что убрал schemabinding. Миграция в итоге пролетела без взаимоблокировок.
9 дек 16, 16:22    [19985589]     Ответить | Цитировать Сообщить модератору
 Re: Что сделать, что бы избежать deadlock?  [new]
o-o
Guest
TaPaK
Дед-Папыхтет,
а как вы вообще связали указанную таблицу со вью со схемабиндингом????

никак он не связал.
тычет пальцем в небо.
ему говорят, это schemabinding имеет то же отношение к дедлоку, что и шторы.
но на шторы он катит, на schemabinding нет
9 дек 16, 16:23    [19985595]     Ответить | Цитировать Сообщить модератору
 Re: Что сделать, что бы избежать deadlock?  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
Но почему не отпускает Sch-M после изменений? Из-за уровня изоляции?
9 дек 16, 16:38    [19985661]     Ответить | Цитировать Сообщить модератору
 Re: Что сделать, что бы избежать deadlock?  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
Там ReadUncommited.
9 дек 16, 16:39    [19985673]     Ответить | Цитировать Сообщить модератору
 Re: Что сделать, что бы избежать deadlock?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Владислав Колосов,

всё в одной транзакции?
9 дек 16, 16:43    [19985691]     Ответить | Цитировать Сообщить модератору
 Re: Что сделать, что бы избежать deadlock?  [new]
o-o
Guest
Владислав Колосов
Но почему не отпускает Sch-M после изменений? Из-за уровня изоляции?

блин, ПОТОМУ ЧТО В ТРАНЗАКЦИИ.
все изменения в одной транзакции.
9 дек 16, 16:45    [19985699]     Ответить | Цитировать Сообщить модератору
 Re: Что сделать, что бы избежать deadlock?  [new]
o-o
Guest
Владислав Колосов
Там ReadUncommited.

там ГДЕ?
где ReadUncommited, там чтение, там же Sch-S.
где Sch-M, там изменения, там Read Committed.
вам тоже надо снова граф прочесть
и отстать уже от ридера, не у него Sch-M, а у изменяющей транзакции
9 дек 16, 16:48    [19985718]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить