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

Откуда:
Сообщений: 5
Всем привет!
Есть очень непонятная для меня проблема с обновление данных в таблице. Буду рад совету =)

Что бы было проще понять, я в примерах напишу не мои оригинальные названия таблиц и тригеров, а придуманные.

Есть запрос
update table1 SEt column1='111111' where column_ID=8490


в таблице "table1" есть 3 тригера:

trigger1 - выполняется мгновенно
trigger2 - если "column5" не обновлялась, то Return.
trigger3 - если "column5" не обновлялась, то Return

Суть в том, что между тригерами trigger2 и trigger3 время от времени может происходить задержка в несколько секунд.
То есть, trigger1 закончил выполнение, trigger2 закончил выполнение, а trigger3 начал своё выполнение через 1-9 секунд после окончания выполнения trigger2.
Что может заставить тригер trigger3 ждать своё выполнение?

Код trigger2
if NOT UPDATE(column5) and NOT UPDATE(column6) return
print 'ON_trigger2' + convert(varchar(10),getdate(),108

....
...
...[/quote]

Код trigger3
if not UPDATE(column5)    OR (select count(*) from inserted) = 0   return
print 'ON_trigger3 ' + convert(varchar(10),getdate(),108)

...
...
...
...
17 янв 19, 14:20    [21787891]     Ответить | Цитировать Сообщить модератору
 Re: Мистическая задержка  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7780
Прогер - странник,

Откройте Profiler и смотрите, что происходит.
17 янв 19, 14:38    [21787914]     Ответить | Цитировать Сообщить модератору
 Re: Мистическая задержка  [new]
Прогер - странник
Member

Откуда:
Сообщений: 5
Владислав Колосов, Спасибо, глянул.



В общем он не показывает что делает. Вроде как что-то сканирует, но вот что? object_id у данных строчек пустой.
Самое странное - выше блокировка таблицы, которая 100% не используется.
В тригерах поставил везде Return (то есть тригеры вообще не должны что-то делать), тем не менее он что-то сканирует после обновления

К сообщению приложен файл. Размер - 65Kb
17 янв 19, 15:40    [21788030]     Ответить | Цитировать Сообщить модератору
 Re: Мистическая задержка  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Прогер - странник,

а Event вам ни о чём не говорит?
17 янв 19, 15:43    [21788033]     Ответить | Цитировать Сообщить модератору
 Re: Мистическая задержка  [new]
Прогер - странник
Member

Откуда:
Сообщений: 5
TaPaK, по столбцу EventClass я вижу, что он что-то сканирует. Но что? он ни где не пишет
17 янв 19, 15:45    [21788039]     Ответить | Цитировать Сообщить модератору
 Re: Мистическая задержка  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Прогер - странник
TaPaK, по столбцу EventClass я вижу, что он что-то сканирует. Но что? он ни где не пишет

угу, что-то сканирует, а потом как Lock:Acquired :)
Ну и почему сканирует, это вы в свои индексы смотрите
17 янв 19, 15:50    [21788051]     Ответить | Цитировать Сообщить модератору
 Re: Мистическая задержка  [new]
Прогер - странник
Member

Откуда:
Сообщений: 5
TaPaK
угу, что-то сканирует, а потом как Lock:Acquired :)

В описании Lock:Acquired есть object_id, который соответствует левой таблице (не той, которую обновляю). получается, она блочит ту, которую обновляю?

автор
Ну и почему сканирует, это вы в свои индексы смотрите

то есть, эти пустые строчки - это сканирование индекса в таблице, которую я в настоящий момент обновляю?
17 янв 19, 16:01    [21788074]     Ответить | Цитировать Сообщить модератору
 Re: Мистическая задержка  [new]
uaggster
Member

Откуда:
Сообщений: 827
Прогер - странник
TaPaK
угу, что-то сканирует, а потом как Lock:Acquired :)

В описании Lock:Acquired есть object_id, который соответствует левой таблице (не той, которую обновляю). получается, она блочит ту, которую обновляю?

автор
Ну и почему сканирует, это вы в свои индексы смотрите

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

А декларативная ссылочная целостность у вас не задействована?
Да и вообще, FK на эту, блокируемую левую таблицу?

Кстати, если это так, постройте индекс по FK в дочерней таблице. Да и в родительской по ключу связи, если ключ в родительской таблице не это не primary key.
Потому как MSSQL считает, что ключи и связи - они, конечно, ключами и связями, а индексами нужно управлять отдельно.
И никаких индексов под FC самостоятельно не строит.
18 янв 19, 09:26    [21788457]     Ответить | Цитировать Сообщить модератору
 Re: Мистическая задержка  [new]
Yasha123
Member

Откуда:
Сообщений: 1833
uaggster
постройте индекс по FK в дочерней таблице. Да и в родительской по ключу связи, если ключ в родительской таблице не это не primary key.

a вы пробовали создать FK, ссылаясь на родителя,
где на ключе нет уникального индекса?
18 янв 19, 10:00    [21788481]     Ответить | Цитировать Сообщить модератору
 Re: Мистическая задержка  [new]
uaggster
Member

Откуда:
Сообщений: 827
Yasha123
uaggster
постройте индекс по FK в дочерней таблице. Да и в родительской по ключу связи, если ключ в родительской таблице не это не primary key.

a вы пробовали создать FK, ссылаясь на родителя,
где на ключе нет уникального индекса?

Констрейнт же должен быть уникальный, а не индекс, вроде? :-)
18 янв 19, 17:10    [21788949]     Ответить | Цитировать Сообщить модератору
 Re: Мистическая задержка  [new]
Yasha123
Member

Откуда:
Сообщений: 1833
uaggster
Констрейнт же должен быть уникальный, а не индекс, вроде? :-)

я фигею, дорогая редакция.
вы где-то видели констрэйнт уникальности
без уникального индекса, к-ый бы эту уникальность организовывал?
силой мысли что ли уникальность обеспечивается?
18 янв 19, 17:15    [21788953]     Ответить | Цитировать Сообщить модератору
 Re: Мистическая задержка  [new]
256k
Member

Откуда: с.Торчилово, Псковская обл.
Сообщений: 437
Yasha123
uaggster
Констрейнт же должен быть уникальный, а не индекс, вроде? :-)

я фигею, дорогая редакция.
вы где-то видели констрэйнт уникальности
без уникального индекса, к-ый бы эту уникальность организовывал?
силой мысли что ли уникальность обеспечивается?


ээххх, ну, вот, зачем сразу так....
18 янв 19, 17:51    [21788986]     Ответить | Цитировать Сообщить модератору
 Re: Мистическая задержка  [new]
uaggster
Member

Откуда:
Сообщений: 827
Yasha123
uaggster
Констрейнт же должен быть уникальный, а не индекс, вроде? :-)

я фигею, дорогая редакция.
вы где-то видели констрэйнт уникальности
без уникального индекса, к-ый бы эту уникальность организовывал?
силой мысли что ли уникальность обеспечивается?

Неа. Не силой мысли. А директивой ADD CONSTRAINT :-)
21 янв 19, 09:09    [21789975]     Ответить | Цитировать Сообщить модератору
 Re: Мистическая задержка  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
uaggster
Yasha123
пропущено...

я фигею, дорогая редакция.
вы где-то видели констрэйнт уникальности
без уникального индекса, к-ый бы эту уникальность организовывал?
силой мысли что ли уникальность обеспечивается?

Неа. Не силой мысли. А директивой ADD CONSTRAINT :-)

которая индекс создаёт?
21 янв 19, 09:46    [21789995]     Ответить | Цитировать Сообщить модератору
 Re: Мистическая задержка  [new]
Yasha123
Member

Откуда:
Сообщений: 1833
uaggster
Yasha123
пропущено...

я фигею, дорогая редакция.
вы где-то видели констрэйнт уникальности
без уникального индекса, к-ый бы эту уникальность организовывал?
силой мысли что ли уникальность обеспечивается?

Неа. Не силой мысли. А директивой ADD CONSTRAINT :-)

откроем за ленивых собратьев хэлп по ALTER TABLE..ADD CONSTRAINT

К сообщению приложен файл. Размер - 52Kb
21 янв 19, 10:14    [21790008]     Ответить | Цитировать Сообщить модератору
 Re: Мистическая задержка  [new]
flexgen
Member

Откуда: Город на песке
Сообщений: 773
uaggster
пропущено...

Неа. Не силой мысли. А директивой ADD CONSTRAINT :-)


При создании UNIQUE CONSTRAINT создается UNIQUE INDEX - Create unique constraint

автор
You can create a unique constraint in SQL Server 2017 by using SQL Server Management Studio or Transact-SQL to ensure no duplicate values are entered in specific columns that do not participate in a primary key. Creating a unique constraint automatically creates a corresponding unique index.
23 янв 19, 23:42    [21792724]     Ответить | Цитировать Сообщить модератору
 Re: Мистическая задержка  [new]
Прогер - странник
Member

Откуда:
Сообщений: 5
Всем больше спасибо за ответы. Они мне очень помогли =)

Причина тормозов была для меня слишком не очевидна.

В общем, в тригере "trigger3" было тяжёлое представление. Как только его оттуда убрал, так тормоза прекратились.
Не очевидно это было потому, что "trigger3" в 90% заканчивался первой строчкой "Return" и представление выполнялось очень редко, однако перед выполнением "trigger3" он ждал освобождение ресурсов представления и не обращал внимание, что это представление всё равно не выполняется.

то есть,мой запрос обновлял таблицу, выполнялся "trigger1", потом "trigger2" и ожидание освобождение ресурсов для "trigger3", даже несмотря на то, что он выполнит Return.

Не знаю, понятно ли объяснил))))

Тему можно закрывать
25 янв 19, 11:18    [21794056]     Ответить | Цитировать Сообщить модератору
 Re: Мистическая задержка  [new]
Yasha123
Member

Откуда:
Сообщений: 1833
Прогер - странник
перед выполнением "trigger3" он ждал освобождение ресурсов представления и не обращал внимание, что это представление всё равно не выполняется.

позвольте все же поинтересоваться,
как можно "выполнять" представление (наверное, командой EXECUTE?)
и какие же это "ресурсы представления" надо освобождать,
да еще и при том, что "представление всё равно не выполняется"?
25 янв 19, 11:59    [21794108]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить