Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Топик располагается на нескольких страницах: [1] 2 3 вперед Ctrl→ все |
Дед-Папыхтет Member [заблокирован] Откуда: Сообщений: 2808 |
Суть вкрадце: 1. Есть вьюха из нее регулярно все читают при read_uncommitted - по сути инфа клиенты на карте... пох - грязное чтение норм в этом случае. Сайтом пользуется много народу - чтения идут постоянно и интенсивно. 2. Накатываем 1-2 раза в неделю миграцию. В этой миграции апдейт этой вьюхи. Написано правда через делит креат, не через апдейт, но пох пока так. Граф дидлока на картинке и во вложении ниже. Как блеять избежать этого дидлока? Понятно что остановка сервисов и накатывание обновлений спасет отца русской демократии, но руковдство это не хочет - нужно решение что бы обновлять миграции без останова сервиса.
К сообщению приложен файл. Размер - 70Kb |
|
9 дек 16, 10:10 [19983368] Ответить | Цитировать Сообщить модератору |
Дед-Папыхтет Member [заблокирован] Откуда: Сообщений: 2808 |
print @@versionMicrosoft SQL Server 2014 - 12.0.4100.1 (X64) |
9 дек 16, 10:12 [19983383] Ответить | Цитировать Сообщить модератору |
aleks2
Guest |
Отца русской дерьмократии ничего не спасет. Но можно попробовать sp_Rename View to oldView create View drop oldView Хотя - очень маловероятно. У мя подозрение, что переименование - тоже катастрофа. |
9 дек 16, 10:23 [19983434] Ответить | Цитировать Сообщить модератору |
Гавриленко Сергей Алексеевич Member Откуда: Moscow Сообщений: 37202 |
Как минимум, нужно попробовать через alter или rename. Если там все равно Sch-S -> Sch-M, то тогда понижаете deadlock_priority для скрипта пересоздания вьюхи и делаете реран в случае дедлока пока не проскочит. |
9 дек 16, 10:54 [19983589] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8494 |
Дед-Папыхтет, вы пытаетесь вытащить нижнюю тарелку из стопки :) Останавливайте/блокируйте сервис (все-то не надо!), который юзает эту вьюху, обновляйте и стартуйте. Одна секунда ООС ничего не решит. Никто даже не поймет, что случалось. Ставьте обновление отдельной задачей. |
9 дек 16, 11:00 [19983627] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8494 |
Зачем вы её вообще обновляете? |
9 дек 16, 11:02 [19983636] Ответить | Цитировать Сообщить модератору |
Гавриленко Сергей Алексеевич Member Откуда: Moscow Сообщений: 37202 |
А, да, вы явно что-то не договариваете, потому что у вас в якобы только читающая с nolock транзация хочет блокировку objectname="YouDo.dbo.VerifiedUsersData" mode="Sch-M"
Сообщение было отредактировано: 9 дек 16, 11:03 |
9 дек 16, 11:02 [19983639] Ответить | Цитировать Сообщить модератору |
invm Member Откуда: Москва Сообщений: 9688 |
Дед-Папыхтет, 1. Ваша "миграция" делается в транзакции. 2. При read uncommitted на объекты накладывается Sch-S Порядок наложения Sch-M на объекты в "миграции" не совпадает с порядком наложения Sch-S на объекты в запросе. Отсюда и дедлок. Способ лечения - отказаться от read uncommitted и включить RCSI. |
9 дек 16, 11:05 [19983655] Ответить | Цитировать Сообщить модератору |
Дед-Папыхтет Member [заблокирован] Откуда: Сообщений: 2808 |
вижу что Sch-M... что эту блокировку генерирует я без понятия... И шарписты разработчики ничего сказать не могут... на тему заменить дроп-креат на альтер - ну да... первая мысль в этом и была... один фиг блокировка Sch-М будет... не понимаю поможет это в ситуации или нет. Единственно что можно "попробовать" вдруг прокатит |
||
9 дек 16, 11:07 [19983665] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8494 |
Может там схемабиндинг где-то. |
9 дек 16, 11:14 [19983706] Ответить | Цитировать Сообщить модератору |
Дед-Папыхтет Member [заблокирован] Откуда: Сообщений: 2808 |
И еще... в чем может быть невидимый подвох
вьюха со SCHEMABINDING - это старый рудимент, который можно смело выпилить. Возможно это дополнение накладывает блокировки для дидлока?... |
|||||
9 дек 16, 11:16 [19983713] Ответить | Цитировать Сообщить модератору |
TaPaK Member Откуда: Kiev Сообщений: 6802 |
Дед-Папыхтет, SCHEMABINDING не даст выдёргивать колонки из таблицы, вас же ничего не спасёт :) |
9 дек 16, 11:23 [19983756] Ответить | Цитировать Сообщить модератору |
Дед-Папыхтет Member [заблокирован] Откуда: Сообщений: 2808 |
Это понятно )))))). Никто колонки и не выдергивает |
||
9 дек 16, 11:28 [19983788] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8494 |
Дед-Папыхтет, дык. |
9 дек 16, 11:29 [19983797] Ответить | Цитировать Сообщить модератору |
Дед-Папыхтет Member [заблокирован] Откуда: Сообщений: 2808 |
Владислав Колосов, Ок.... попробую: 1. руками изменить вьюху на прод без привязки к сехеме. 2. накатить текущие миграции - да в этой миграции снова вьюха станет schemabinding. 3. снова удалить на прод schemabinding. 4. в новой миграции уже добавить эту вьюху без schemabinding.... полагаю если проблема именно в привязке к схеме - все должно пройти и без откатывания миграции текущей не прошедшей... |
9 дек 16, 11:36 [19983847] Ответить | Цитировать Сообщить модератору |
invm Member Откуда: Москва Сообщений: 9688 |
|
||
9 дек 16, 11:37 [19983853] Ответить | Цитировать Сообщить модератору |
Дед-Папыхтет Member [заблокирован] Откуда: Сообщений: 2808 |
ок - резюмируй что я не прочитал? |
||||
9 дек 16, 11:38 [19983858] Ответить | Цитировать Сообщить модератору |
invm Member Откуда: Москва Сообщений: 9688 |
|
||
9 дек 16, 11:46 [19983935] Ответить | Цитировать Сообщить модератору |
iljy Member Откуда: Сообщений: 8711 |
Дед-Папыхтет, 1. Выяснить, нахрена вообще менять вьюху 2. Вьюху менять через ALTER VIEW в отдельной транзакции. 3. После ALTER вызвать sp_refreshview 4. SCHEMABINDING не при чем, он запрещает некоторые изменения на базовых таблицах, но никак не препятствует менять саму вьюху |
9 дек 16, 11:49 [19983955] Ответить | Цитировать Сообщить модератору |
o-o
Guest |
то и не прочел, что разный порядок доступа к таблицам. читатель только читает, он не хочет никакое Sch-M ни на что. у него уже есть Sch-S on dbo.AllTasks, а хочет он Sch-S on dbo.VerifiedUsersData. изменятель же имеет Sch-M on dbo.VerifiedUsersData, хочет Sch-M on dbo.AllTasks. в одной транзакции модифицируете, так что YOUDO\akordubaylo не отпустит первое Sch-M on dbo.VerifiedUsersData, пока второе (Sch-M on dbo.AllTasks) не получит и транзакцию не завершит
а вы с Гавриленко считает, что это читатель хочет Sch-M, а читaтель просто накладывает Sch-S в обратном порядке, чем изменяющая транзакция, не надо гнать на шарпистов, которые типа Sch-M накладывают. все Sch-M -- ваши, owner, waiter = YOUDO\akordubaylo дубайло, как я понимаю, это вы (a YOUDO\daemon = reader) |
||||||
9 дек 16, 11:53 [19983978] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8494 |
Схемабиндинг может требоваться для индексирования. Надо всесторонне изучить. Либо это миссион критикал вьюха. |
9 дек 16, 12:04 [19984035] Ответить | Цитировать Сообщить модератору |
TaPaK Member Откуда: Kiev Сообщений: 6802 |
для индексированных это обязательно, "миссион критикал" которую они постоянно дропают :) и не накладывает ничего SCHEMABINDING |
||
9 дек 16, 12:08 [19984056] Ответить | Цитировать Сообщить модератору |
Дед-Папыхтет Member [заблокирован] Откуда: Сообщений: 2808 |
Изменятель полагаю не имеет Sch-M на dbo.VerifiedUsersData [qout например воспроизводим] CREATE TABLE dbo.T1(col1 int NOT NULL PRIMARY KEY) GO CREATE TABLE dbo.T2(col1 int NOT NULL PRIMARY KEY) GO CREATE VIEW dbo.V1 WITH SCHEMABINDING AS SELECT col1 FROM dbo.T1 GO CREATE VIEW dbo.V2 AS SELECT col1 FROM dbo.T2 GO BEGIN TRAN if object_id('dbo.V1') is not null DROP VIEW dbo.V1 go SELECT OBJECT_NAME(resource_associated_entity_id), request_mode FROM sys.dm_tran_locks l WHERE request_session_id = @@spid AND resource_type = 'OBJECT' AND resource_associated_entity_id in (OBJECT_ID('dbo.T1'),object_id('dbo.V1'),object_id('dbo.V2')) go if object_id('dbo.V2') is not null DROP VIEW dbo.V2 go SELECT OBJECT_NAME(resource_associated_entity_id), request_mode FROM sys.dm_tran_locks l WHERE request_session_id = @@spid AND resource_type = 'OBJECT' AND resource_associated_entity_id in (OBJECT_ID('dbo.T1'),object_id('dbo.V1'),object_id('dbo.V2')) go CREATE VIEW dbo.V1 WITH SCHEMABINDING AS SELECT col1 FROM dbo.T1 go SELECT OBJECT_NAME(resource_associated_entity_id), request_mode FROM sys.dm_tran_locks l WHERE request_session_id = @@spid AND resource_type = 'OBJECT' AND resource_associated_entity_id in (OBJECT_ID('dbo.T1'),object_id('dbo.V1'),object_id('dbo.V2')) go CREATE VIEW dbo.V2 AS SELECT col1 FROM dbo.T2 GO SELECT OBJECT_NAME(resource_associated_entity_id), request_mode FROM sys.dm_tran_locks l WHERE request_session_id = @@spid AND resource_type = 'OBJECT' AND resource_associated_entity_id in (OBJECT_ID('dbo.T1'),object_id('dbo.V1'),object_id('dbo.V2')) go COMMIT GO[/spoiler] Здесь не видно Sch-M на таблицы у изменятеля |
||||||
9 дек 16, 12:15 [19984119] Ответить | Цитировать Сообщить модератору |
Дед-Папыхтет Member [заблокирован] Откуда: Сообщений: 2808 |
была когда то эта вьюха индексирвоанная, гемора больше чем пользы в итоге отказались так же давно, предложение SCHEMABINDING не выпилили - рудимент |
||||
9 дек 16, 12:16 [19984128] Ответить | Цитировать Сообщить модератору |
Дед-Папыхтет Member [заблокирован] Откуда: Сообщений: 2808 |
Да в транзакции, причем видно в графе XML что там trancount=2. риданкомитед убирать не вариант... или на снапшот уровень изоляции менять, что может полагаю добавить дидлоков. Или тормоза при блокировках добавятся... |
||
9 дек 16, 12:18 [19984141] Ответить | Цитировать Сообщить модератору |
Топик располагается на нескольких страницах: [1] 2 3 вперед Ctrl→ все |
Все форумы / Microsoft SQL Server | ![]() |