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

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

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

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

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

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


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

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

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

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


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


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

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

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


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

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

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

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


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


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

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

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

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

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


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

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

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

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

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

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

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

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

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

Вот и сделали бы kill, и всё бы получилось.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Принудительное отключение триггера / 25 сообщений из 46, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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