powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Принудительное отключение триггера
46 сообщений из 46, показаны все 2 страниц
Принудительное отключение триггера
    #39964907
Hells87
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть база с таблицей, в которой примерно 30млн строк. База весит примерно 20 Гб.
Создал триггер на обработку позиций и указал операцию в триггере "INSERT, UPDATE". триггер в определенном столбце выставляет значение NULL. теперь этот триггер я не могу остановить.
Т.е. триггер начинает обрабатывать дынные, долго долго думая, пытаюсь через sql запрос (DROP TRIGGER или DISABLE TRIGGER) его остановить и сервак пишет что ожидает выполнение запроса и висит. При этом начинает рости tempdb, пока не закончится место на жестком диске (свободно 400 Гб). Через контекстное меню тоже не отключается триггер, система говорит "превышение тайм-аута блокировки". Предполагаю что из-за операции UPDATE, триггер начинает по кругу отрабатывать, а за счет большой базы грузится система и не проходят команды на остановку триггера. Подскажите другой способ вырубить (удалить) триггер?
...
Рейтинг: 0 / 0
Принудительное отключение триггера
    #39964935
Фотография court
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hells87,

kill
в смысле, ты убей процесс который его использует, а потом делай с триггером что хочешь
...
Рейтинг: 0 / 0
Принудительное отключение триггера
    #39964938
Hells87
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
court,
я и по kill сразу понял)) спасибо, попробую
...
Рейтинг: 0 / 0
Принудительное отключение триггера
    #39964943
L_argo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Триггеры - зло. Их сложно изменить на лету, т.к. большая вероятность дедлока.
...
Рейтинг: 0 / 0
Принудительное отключение триггера
    #39964959
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
L_argo
риггеры - зло. Их сложно изменить на лету, т.к. большая вероятность дедлока.
А вероятность дедлока при изменении "на лету" процедур или функций гораздо ниже?
...
Рейтинг: 0 / 0
Принудительное отключение триггера
    #39964960
L_argo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invm
L_argo
риггеры - зло. Их сложно изменить на лету, т.к. большая вероятность дедлока.
А вероятность дедлока при изменении "на лету" процедур или функций гораздо ниже?
Раз в 50-100, ИМХО.
...
Рейтинг: 0 / 0
Принудительное отключение триггера
    #39964962
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
L_argo
Раз в 50-100, ИМХО.

И чем вызвана эта разница?
...
Рейтинг: 0 / 0
Принудительное отключение триггера
    #39964966
Гулин Федор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hells87,
Триггеры мощное средство но безусловно требуют квалификации
и иногда трудно отлаживаются - траблшутятся

@invm мне подсказывал способ как можно отключить триггер в конкетной сессиии

с помощью трюка в начале триггера
if exitsts ( #Tmp_triggers_disable) return

и создания такой временной таблицы #Tmp_triggers_disable
в начале сессии где надо отключить его


ps для отлакди в тригере можно юзать те же Select
pps вообщем подумать надо - если выбор за тобой - то возможно пока и отказаться от них
...
Рейтинг: 0 / 0
Принудительное отключение триггера
    #39964979
Фотография SIMPLicity_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гулин Федор
Hells87,
Триггеры мощное средство но безусловно требуют квалификации
и иногда трудно отлаживаются - траблшутятся

@invm мне подсказывал способ как можно отключить триггер в конкетной сессиии

с помощью трюка в начале триггера
if exitsts ( #Tmp_triggers_disable) return

и создания такой временной таблицы #Tmp_triggers_disable
в начале сессии где надо отключить его


ps для отлакди в тригере можно юзать те же Select
pps вообщем подумать надо - если выбор за тобой - то возможно пока и отказаться от них


На мой взгляд, триггер НЕ стоит вешать туда, где его предполагается включать/выключать. Сколько "стоит" стоит такая проверка (проверка наличия сторонней таблицы) в плане производительности?

По теме: вероятно неправильно спроектирован триггер - так как заср@ть 400ГБ триггером, который в определенном столбце выставляет значение NULL по базе в 20 гиг, - это очень круто ! Хорошо, если на забитом диске sp_who2 работает и kill выполняется...
...
Рейтинг: 0 / 0
Принудительное отключение триггера
    #39964990
Hells87
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
court
Hells87,

kill
в смысле, ты убей процесс который его использует, а потом делай с триггером что хочешь


Попробовал, в списке сессий висит "среда MS SQL Server Management Studio". отдельной задачи по триггеру нет. так что нечего тут убивать
...
Рейтинг: 0 / 0
Принудительное отключение триггера
    #39964992
Hells87
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гулин Федор
Hells87,
Триггеры мощное средство но безусловно требуют квалификации
и иногда трудно отлаживаются - траблшутятся

@invm мне подсказывал способ как можно отключить триггер в конкетной сессиии

с помощью трюка в начале триггера
if exitsts ( #Tmp_triggers_disable) return

и создания такой временной таблицы #Tmp_triggers_disable
в начале сессии где надо отключить его


ps для отлакди в тригере можно юзать те же Select
pps вообщем подумать надо - если выбор за тобой - то возможно пока и отказаться от них


Так я этот триггер не могу поменять, потому что висит запрос.
Выбор за мной, но сейчас задача долбануть этот триггер.
...
Рейтинг: 0 / 0
Принудительное отключение триггера
    #39964999
Нестандартное мышление
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hells87,

А DISABLE TRIGGER не пробовали?
На крайняк DROP TRIGGER

авторТриггеры - зло! Согласен. Лучше JOB использовать и по отсечкам времени отрабатывать.
...
Рейтинг: 0 / 0
Принудительное отключение триггера
    #39965003
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нестандартное мышление,

триггер нельзя отключить, пока он выполняется хотя бы в одном сеансе.
...
Рейтинг: 0 / 0
Принудительное отключение триггера
    #39965007
Нестандартное мышление
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав Колосов
Нестандартное мышление,

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


Можно остановить агента и в server_triggers поставить 1 в is_disabled.
...
Рейтинг: 0 / 0
Принудительное отключение триггера
    #39965008
Нестандартное мышление
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вообще. Надо такую структуру менять. Либо мощности как у гугла уже закупать. )))
...
Рейтинг: 0 / 0
Принудительное отключение триггера
    #39965016
Hells87
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нестандартное мышление
Hells87,

А DISABLE TRIGGER не пробовали?
На крайняк DROP TRIGGER

авторТриггеры - зло! Согласен. Лучше JOB использовать и по отсечкам времени отрабатывать.

Пробовал. висит запрос и всё. Триггер видимо все ресурсы на себя забирает
...
Рейтинг: 0 / 0
Принудительное отключение триггера
    #39965024
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SIMPLicity_
Гулин Федор
Hells87,
Триггеры мощное средство но безусловно требуют квалификации
и иногда трудно отлаживаются - траблшутятся

@invm мне подсказывал способ как можно отключить триггер в конкетной сессиии

с помощью трюка в начале триггера
if exitsts ( #Tmp_triggers_disable) return

и создания такой временной таблицы #Tmp_triggers_disable
в начале сессии где надо отключить его


ps для отлакди в тригере можно юзать те же Select
pps вообщем подумать надо - если выбор за тобой - то возможно пока и отказаться от них


На мой взгляд, триггер НЕ стоит вешать туда, где его предполагается включать/выключать. Сколько "стоит" стоит такая проверка (проверка наличия сторонней таблицы) в плане производительности?

По теме: вероятно неправильно спроектирован триггер - так как заср@ть 400ГБ триггером, который в определенном столбце выставляет значение NULL по базе в 20 гиг, - это очень круто ! Хорошо, если на забитом диске sp_who2 работает и kill выполняется...


В MSSQL есть смысл перед обновлением поля проверять, а не имеет ли это поле уже такое же значение.
...
Рейтинг: 0 / 0
Принудительное отключение триггера
    #39965026
Hells87
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hells87,
Сейчас пробуем базу перенести с резервной базы (там нет этого триггера).
Тогда еще вопрос: как тогда реализовать на базе MS SQL такую задачу? Внешняя прога складывает в таблицу значения, но необходимо, чтобы значения в определенном столбце удалялись. Либо надо триггер отладить, чтобы он работал только для новых записей, чтобы сервак не ложить.
...
Рейтинг: 0 / 0
Принудительное отключение триггера
    #39965031
Hells87
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a_voronin,
Согласен. Мало опыта работы с MSSQL. думал, ну не пойдет, отключу. А теперь отключить не получается. На маленькой базе всё работает нормально.
...
Рейтинг: 0 / 0
Принудительное отключение триггера
    #39965037
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hells87
court
Hells87,

kill
в смысле, ты убей процесс который его использует, а потом делай с триггером что хочешь
Попробовал, в списке сессий висит "среда MS SQL Server Management Studio". отдельной задачи по триггеру нет. так что нечего тут убивать
И о чём это говорит?

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

Поэтому триггер и заблокирован.

Посмотрите, кто это такой. Спросите у него, долго ли он будет держать открытой транзакцию.
Заставьте закрыть окно, а если он скажет "а чо я ничо не делал", то сделайте kill этой сессии, она ему не нужна.
...
Рейтинг: 0 / 0
Принудительное отключение триггера
    #39965044
Hells87
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg,
Ну я предположил, что эта студия бала в которой я и сидел. Так как на серваке были еще запущены БД, я их в службах стопнул и в списке сессий осталась одна эта запись (было 3)
...
Рейтинг: 0 / 0
Принудительное отключение триггера
    #39965046
Hells87
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hells87,
Всем спасибо. Пока искали решение, коллега перекинул базу с резервного сервака (на котором нет этого триггера). Триггер так и не получилось стопнуть.
...
Рейтинг: 0 / 0
Принудительное отключение триггера
    #39965048
Hells87
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hells87
Hells87,
Тогда еще вопрос: как тогда реализовать на базе MS SQL такую задачу? Внешняя прога складывает в таблицу значения, но необходимо, чтобы значения в определенном столбце удалялись. Либо надо триггер отладить, чтобы он работал только для новых записей, чтобы сервак не ложить.

Сейчас будем работать над этим вопросом
...
Рейтинг: 0 / 0
Принудительное отключение триггера
    #39965050
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hells87
Hells87,
Всем спасибо. Пока искали решение, коллега перекинул базу с резервного сервака (на котором нет этого триггера). Триггер так и не получилось стопнуть.
Жесть какая. Для отключения пользователей достаточно было сделать alter database ... set restricted_user with rollback immediate. Если же у вас бардак и пользователи являются админами, то тогда через single_user.
...
Рейтинг: 0 / 0
Принудительное отключение триггера
    #39965056
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hells87
alexeyvg,
Ну я предположил, что эта студия бала в которой я и сидел. Так как на серваке были еще запущены БД, я их в службах стопнул и в списке сессий осталась одна эта запись (было 3)
Возможно и так. Это легко было посмотреть в списке коннектов, есть ли там открытая транзакция. Возможно, это было открытое окно какого то дизайнера, например.

Вот и сделали бы kill, и всё бы получилось.
...
Рейтинг: 0 / 0
Принудительное отключение триггера
    #39965059
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
L_argo
invm
пропущено...
А вероятность дедлока при изменении "на лету" процедур или функций гораздо ниже?
Раз в 50-100, ИМХО.



Чем измеряли?
...
Рейтинг: 0 / 0
Принудительное отключение триггера
    #39965060
Нестандартное мышление
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг Хупин,

Циркулем))
...
Рейтинг: 0 / 0
Принудительное отключение триггера
    #39965089
L_argo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг Хупин
L_argo
пропущено...
Раз в 50-100, ИМХО.


Чем измеряли?
Многолетним опытом. Была у меня БД с неск.тыс.ХП. За много лет были единичные случаи, когда ХП не накатывалась из-за блокировки. А накатывали ежедневно сотнями ХП.
В то время в другом проекте была БД с триггерами. Накат триггера на работающий прод приводил к дедлоку не менее, чем в половине случаев.
...
Рейтинг: 0 / 0
Принудительное отключение триггера
    #39965097
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbcc opentran

и убивайте сеанс.
...
Рейтинг: 0 / 0
Принудительное отключение триггера
    #39965110
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
L_argo,

Вы путаете дедлок и блокировку.
...
Рейтинг: 0 / 0
Принудительное отключение триггера
    #39965116
L_argo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invm
L_argo,
Вы путаете дедлок и блокировку.
Не путаю. Случайно написал так. Везде дедлоки.
...
Рейтинг: 0 / 0
Принудительное отключение триггера
    #39965118
Гулин Федор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
L_argo
invm
L_argo,
Вы путаете дедлок и блокировку.
Не путаю. Случайно написал так. Везде дедлоки.


странно - вариант блокировки мне тоже понятен
идет апдейт на таблице - триггер занят - ждем пока освободится
а дедлок тут причем ?
...
Рейтинг: 0 / 0
Принудительное отключение триггера
    #39965121
L_argo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а дедлок тут причем ?Дедлок, в отличие от простой блокировки сам не отпустит.
Хотя у скуля есть механизм, который дропает одно из дедлочных соединений, но это происходит не всегда.
Мы тут обсуждаем блокировки, которые сами не проходят.
...
Рейтинг: 0 / 0
Принудительное отключение триггера
    #39965126
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
L_argo
а дедлок тут причем ?
Дедлок, в отличие от простой блокировки сам не отпустит.
Хотя у скуля есть механизм, который дропает одно из дедлочных соединений, но это происходит не всегда.
Мы тут обсуждаем блокировки, которые сами не проходят.Не надо фантазировать. Дедлок -- это такая взаимоблокировка, которая приводит к дропу одного из запросов с соответствующим текстом ошибок. И с настройками сессии, которые позволяют выбирать, кого дропать.

Бесконечная блокировка -- это не делок, это бесконечная блокировка.
...
Рейтинг: 0 / 0
Принудительное отключение триггера
    #39965128
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гавриленко Сергей Алексеевич
Бесконечная блокировка -- это не делок, это бесконечная блокировка.
Бесконечная блокировка -- это дедлок, не определяемый сервером как дедлок. Наверное так?
Иначе что это за бесконечная блокировка такая?
L_argo про них и пишет.

Обычная блокировка не является проблемой для заливки процедур/триггеров, рано или поздно она кончится. Дедлок (официальные) тоже.
А вот дедлок, который сервером не опознан, очевидно, проблема.
...
Рейтинг: 0 / 0
Принудительное отключение триггера
    #39965133
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg
Иначе что это за бесконечная блокировка такая?
Открыл транзакцию, заблокировал ресурс и уехал в отпуск на пол года - вот такая вот, например. Тоже долго сама не пройдет.

Дедлок -- это именно цилклическая (и, вследствие, не разрешимая без внешнего вмешательства блокировка). И именно цикличность определяет дедлок, а не продолжительность. Мне вот не очевидно из сообщения, что L_argo их не путает.
...
Рейтинг: 0 / 0
Принудительное отключение триггера
    #39965137
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
L_argo
а дедлок тут причем ?
Дедлок, в отличие от простой блокировки сам не отпустит.
Хотя у скуля есть механизм, который дропает одно из дедлочных соединений, но это происходит не всегда.
Мы тут обсуждаем блокировки, которые сами не проходят.

Не пора ли уже

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
USE master;
GO
ALTER DATABASE AdventureWorks2012
SET SINGLE_USER
WITH ROLLBACK IMMEDIATE;
GO
DISABLE TRIGGER ....; 
GO
ALTER DATABASE AdventureWorks2012
SET MULTI_USER;
GO
...
Рейтинг: 0 / 0
Принудительное отключение триггера
    #39965138
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
L_argo
Не путаю. Случайно написал так. Везде дедлоки.
Чтобы при накате триггеров получить дедлок на DDL, нужно в транзакции выполнить не менее 2-х разных create/alter trigger.
У вас именно так делалось?
...
Рейтинг: 0 / 0
Принудительное отключение триггера
    #39965141
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invm
L_argo
Не путаю. Случайно написал так. Везде дедлоки.
Чтобы при накате триггеров получить дедлок на DDL, нужно в транзакции выполнить не менее 2-х разных create/alter trigger.
У вас именно так делалось?
В целом, при наличии "правильного" ddl-триггера можно и с одним alter устроить.
...
Рейтинг: 0 / 0
Принудительное отключение триггера
    #39965186
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a_voronin
Не пора ли уже
ТС надёжнее поступил, снёс базу :-)
...
Рейтинг: 0 / 0
Принудительное отключение триггера
    #39965281
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гавриленко Сергей Алексеевич
В целом, при наличии "правильного" ddl-триггера можно и с одним alter устроить.
Безусловно.
Но этот вариант не рассматриваю, ибо в этом случае в сообщении об ошибке будет фигурировать имя этого триггера.
И после этого утверждать о накате триггеров как источнике дедлоков - было бы совсем глупо.
...
Рейтинг: 0 / 0
Принудительное отключение триггера
    #39965359
L_argo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А какая разница, дедлок или бесконечная блокировка ?
Результат в данном случае одинаков: надо грохать один из процессов.
Поэтому следует по возможности избегать триггеров.

Кстати похожую проблему наблюдал с Truncate table. Проще и надежнее делать delete, если строк не много.
...
Рейтинг: 0 / 0
Принудительное отключение триггера
    #39965367
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
L_argo
А какая разница, дедлок или бесконечная блокировка ?
Результат в данном случае одинаков: надо грохать один из процессов.
Поэтому следует по возможности избегать триггеров.
Такого аргумента от триггерофобов я еще не слышал. Заношу в свой список :)

Создание/изменение триггера или выполнения truncate требует Sch-M на таблицу, т.к. это DDL. И именно на этом ожидании виснет. И это не дедлок.
Согласно вашей теории любые модификации схемы таблиц, создание индексов, констрейнтов и т.д. также должны быть объявлены злом и запрещены к использованию, ибо также требуют Sch-M.
...
Рейтинг: 0 / 0
Принудительное отключение триггера
    #39965374
L_argo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторСогласно вашей теории любые модификации схемы таблиц, создание индексов, констрейнтов и т.д. также должны быть объявлены злом и запрещены к использованию, ибо также требуют Sch-M. Как-то не сталкивался с блокировками во время создания индексов. Но думаю, что бывают.

Констрейнты тоже зло. :)
Все что блокирует схему - в какой-то степени зло.
...
Рейтинг: 0 / 0
Принудительное отключение триггера
    #39965385
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
L_argo,

какой же цели, по Вашему мнению, служат блокировки и для чего их ввели в систему?
...
Рейтинг: 0 / 0
Принудительное отключение триггера
    #39965431
Фотография SIMPLicity_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав Колосов
L_argo,

какой же цели, по Вашему мнению, служат блокировки и для чего их ввели в систему?


Что бы жизнь сахаром не казалась

PS Обсуждение давно ушло в сторону от темы. Пора закруглять...
PPS Триггеры - ништяк! Но бывает и ж0п@
...
Рейтинг: 0 / 0
46 сообщений из 46, показаны все 2 страниц
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Принудительное отключение триггера
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]