|
Принудительное отключение триггера
|
|||
---|---|---|---|
#18+
Есть база с таблицей, в которой примерно 30млн строк. База весит примерно 20 Гб. Создал триггер на обработку позиций и указал операцию в триггере "INSERT, UPDATE". триггер в определенном столбце выставляет значение NULL. теперь этот триггер я не могу остановить. Т.е. триггер начинает обрабатывать дынные, долго долго думая, пытаюсь через sql запрос (DROP TRIGGER или DISABLE TRIGGER) его остановить и сервак пишет что ожидает выполнение запроса и висит. При этом начинает рости tempdb, пока не закончится место на жестком диске (свободно 400 Гб). Через контекстное меню тоже не отключается триггер, система говорит "превышение тайм-аута блокировки". Предполагаю что из-за операции UPDATE, триггер начинает по кругу отрабатывать, а за счет большой базы грузится система и не проходят команды на остановку триггера. Подскажите другой способ вырубить (удалить) триггер? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2020, 09:40 |
|
Принудительное отключение триггера
|
|||
---|---|---|---|
#18+
Hells87, kill в смысле, ты убей процесс который его использует, а потом делай с триггером что хочешь ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2020, 10:50 |
|
Принудительное отключение триггера
|
|||
---|---|---|---|
#18+
court, я и по kill сразу понял)) спасибо, попробую ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2020, 11:02 |
|
Принудительное отключение триггера
|
|||
---|---|---|---|
#18+
Триггеры - зло. Их сложно изменить на лету, т.к. большая вероятность дедлока. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2020, 11:09 |
|
Принудительное отключение триггера
|
|||
---|---|---|---|
#18+
L_argo риггеры - зло. Их сложно изменить на лету, т.к. большая вероятность дедлока. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2020, 11:50 |
|
Принудительное отключение триггера
|
|||
---|---|---|---|
#18+
invm L_argo риггеры - зло. Их сложно изменить на лету, т.к. большая вероятность дедлока. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2020, 11:51 |
|
Принудительное отключение триггера
|
|||
---|---|---|---|
#18+
L_argo Раз в 50-100, ИМХО. И чем вызвана эта разница? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2020, 11:54 |
|
Принудительное отключение триггера
|
|||
---|---|---|---|
#18+
Hells87, Триггеры мощное средство но безусловно требуют квалификации и иногда трудно отлаживаются - траблшутятся @invm мне подсказывал способ как можно отключить триггер в конкетной сессиии с помощью трюка в начале триггера if exitsts ( #Tmp_triggers_disable) return и создания такой временной таблицы #Tmp_triggers_disable в начале сессии где надо отключить его ps для отлакди в тригере можно юзать те же Select pps вообщем подумать надо - если выбор за тобой - то возможно пока и отказаться от них ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2020, 12:07 |
|
Принудительное отключение триггера
|
|||
---|---|---|---|
#18+
Гулин Федор Hells87, Триггеры мощное средство но безусловно требуют квалификации и иногда трудно отлаживаются - траблшутятся @invm мне подсказывал способ как можно отключить триггер в конкетной сессиии с помощью трюка в начале триггера if exitsts ( #Tmp_triggers_disable) return и создания такой временной таблицы #Tmp_triggers_disable в начале сессии где надо отключить его ps для отлакди в тригере можно юзать те же Select pps вообщем подумать надо - если выбор за тобой - то возможно пока и отказаться от них На мой взгляд, триггер НЕ стоит вешать туда, где его предполагается включать/выключать. Сколько "стоит" стоит такая проверка (проверка наличия сторонней таблицы) в плане производительности? По теме: вероятно неправильно спроектирован триггер - так как заср@ть 400ГБ триггером, который в определенном столбце выставляет значение NULL по базе в 20 гиг, - это очень круто ! Хорошо, если на забитом диске sp_who2 работает и kill выполняется... ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2020, 12:38 |
|
Принудительное отключение триггера
|
|||
---|---|---|---|
#18+
court Hells87, kill в смысле, ты убей процесс который его использует, а потом делай с триггером что хочешь Попробовал, в списке сессий висит "среда MS SQL Server Management Studio". отдельной задачи по триггеру нет. так что нечего тут убивать ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2020, 13:25 |
|
Принудительное отключение триггера
|
|||
---|---|---|---|
#18+
Гулин Федор Hells87, Триггеры мощное средство но безусловно требуют квалификации и иногда трудно отлаживаются - траблшутятся @invm мне подсказывал способ как можно отключить триггер в конкетной сессиии с помощью трюка в начале триггера if exitsts ( #Tmp_triggers_disable) return и создания такой временной таблицы #Tmp_triggers_disable в начале сессии где надо отключить его ps для отлакди в тригере можно юзать те же Select pps вообщем подумать надо - если выбор за тобой - то возможно пока и отказаться от них Так я этот триггер не могу поменять, потому что висит запрос. Выбор за мной, но сейчас задача долбануть этот триггер. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2020, 13:27 |
|
Принудительное отключение триггера
|
|||
---|---|---|---|
#18+
Hells87, А DISABLE TRIGGER не пробовали? На крайняк DROP TRIGGER авторТриггеры - зло! Согласен. Лучше JOB использовать и по отсечкам времени отрабатывать. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2020, 13:45 |
|
Принудительное отключение триггера
|
|||
---|---|---|---|
#18+
Нестандартное мышление, триггер нельзя отключить, пока он выполняется хотя бы в одном сеансе. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2020, 13:48 |
|
Принудительное отключение триггера
|
|||
---|---|---|---|
#18+
Владислав Колосов Нестандартное мышление, триггер нельзя отключить, пока он выполняется хотя бы в одном сеансе. Можно остановить агента и в server_triggers поставить 1 в is_disabled. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2020, 13:55 |
|
Принудительное отключение триггера
|
|||
---|---|---|---|
#18+
А вообще. Надо такую структуру менять. Либо мощности как у гугла уже закупать. ))) ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2020, 13:58 |
|
Принудительное отключение триггера
|
|||
---|---|---|---|
#18+
Нестандартное мышление Hells87, А DISABLE TRIGGER не пробовали? На крайняк DROP TRIGGER авторТриггеры - зло! Согласен. Лучше JOB использовать и по отсечкам времени отрабатывать. Пробовал. висит запрос и всё. Триггер видимо все ресурсы на себя забирает ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2020, 14:18 |
|
Принудительное отключение триггера
|
|||
---|---|---|---|
#18+
SIMPLicity_ Гулин Федор Hells87, Триггеры мощное средство но безусловно требуют квалификации и иногда трудно отлаживаются - траблшутятся @invm мне подсказывал способ как можно отключить триггер в конкетной сессиии с помощью трюка в начале триггера if exitsts ( #Tmp_triggers_disable) return и создания такой временной таблицы #Tmp_triggers_disable в начале сессии где надо отключить его ps для отлакди в тригере можно юзать те же Select pps вообщем подумать надо - если выбор за тобой - то возможно пока и отказаться от них На мой взгляд, триггер НЕ стоит вешать туда, где его предполагается включать/выключать. Сколько "стоит" стоит такая проверка (проверка наличия сторонней таблицы) в плане производительности? По теме: вероятно неправильно спроектирован триггер - так как заср@ть 400ГБ триггером, который в определенном столбце выставляет значение NULL по базе в 20 гиг, - это очень круто ! Хорошо, если на забитом диске sp_who2 работает и kill выполняется... В MSSQL есть смысл перед обновлением поля проверять, а не имеет ли это поле уже такое же значение. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2020, 14:28 |
|
Принудительное отключение триггера
|
|||
---|---|---|---|
#18+
Hells87, Сейчас пробуем базу перенести с резервной базы (там нет этого триггера). Тогда еще вопрос: как тогда реализовать на базе MS SQL такую задачу? Внешняя прога складывает в таблицу значения, но необходимо, чтобы значения в определенном столбце удалялись. Либо надо триггер отладить, чтобы он работал только для новых записей, чтобы сервак не ложить. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2020, 14:29 |
|
Принудительное отключение триггера
|
|||
---|---|---|---|
#18+
a_voronin, Согласен. Мало опыта работы с MSSQL. думал, ну не пойдет, отключу. А теперь отключить не получается. На маленькой базе всё работает нормально. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2020, 14:32 |
|
Принудительное отключение триггера
|
|||
---|---|---|---|
#18+
Hells87 court Hells87, kill в смысле, ты убей процесс который его использует, а потом делай с триггером что хочешь О том, что в SSMS пользователь открыл транзакцию, сделал что то, на что срабатывает этот триггер, и задумался. Поэтому триггер и заблокирован. Посмотрите, кто это такой. Спросите у него, долго ли он будет держать открытой транзакцию. Заставьте закрыть окно, а если он скажет "а чо я ничо не делал", то сделайте kill этой сессии, она ему не нужна. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2020, 14:52 |
|
Принудительное отключение триггера
|
|||
---|---|---|---|
#18+
alexeyvg, Ну я предположил, что эта студия бала в которой я и сидел. Так как на серваке были еще запущены БД, я их в службах стопнул и в списке сессий осталась одна эта запись (было 3) ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2020, 15:02 |
|
Принудительное отключение триггера
|
|||
---|---|---|---|
#18+
Hells87, Всем спасибо. Пока искали решение, коллега перекинул базу с резервного сервака (на котором нет этого триггера). Триггер так и не получилось стопнуть. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2020, 15:04 |
|
Принудительное отключение триггера
|
|||
---|---|---|---|
#18+
Hells87 Hells87, Тогда еще вопрос: как тогда реализовать на базе MS SQL такую задачу? Внешняя прога складывает в таблицу значения, но необходимо, чтобы значения в определенном столбце удалялись. Либо надо триггер отладить, чтобы он работал только для новых записей, чтобы сервак не ложить. Сейчас будем работать над этим вопросом ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2020, 15:06 |
|
Принудительное отключение триггера
|
|||
---|---|---|---|
#18+
Hells87 Hells87, Всем спасибо. Пока искали решение, коллега перекинул базу с резервного сервака (на котором нет этого триггера). Триггер так и не получилось стопнуть. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2020, 15:08 |
|
Принудительное отключение триггера
|
|||
---|---|---|---|
#18+
Hells87 alexeyvg, Ну я предположил, что эта студия бала в которой я и сидел. Так как на серваке были еще запущены БД, я их в службах стопнул и в списке сессий осталась одна эта запись (было 3) Вот и сделали бы kill, и всё бы получилось. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2020, 15:16 |
|
Принудительное отключение триггера
|
|||
---|---|---|---|
#18+
L_argo invm пропущено... А вероятность дедлока при изменении "на лету" процедур или функций гораздо ниже? Чем измеряли? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2020, 15:25 |
|
Принудительное отключение триггера
|
|||
---|---|---|---|
#18+
Ролг Хупин, Циркулем)) ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2020, 15:30 |
|
Принудительное отключение триггера
|
|||
---|---|---|---|
#18+
Ролг Хупин L_argo пропущено... Раз в 50-100, ИМХО. Чем измеряли? В то время в другом проекте была БД с триггерами. Накат триггера на работающий прод приводил к дедлоку не менее, чем в половине случаев. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2020, 17:28 |
|
Принудительное отключение триггера
|
|||
---|---|---|---|
#18+
dbcc opentran и убивайте сеанс. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2020, 17:44 |
|
Принудительное отключение триггера
|
|||
---|---|---|---|
#18+
L_argo, Вы путаете дедлок и блокировку. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2020, 18:27 |
|
Принудительное отключение триггера
|
|||
---|---|---|---|
#18+
invm L_argo, Вы путаете дедлок и блокировку. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2020, 18:39 |
|
Принудительное отключение триггера
|
|||
---|---|---|---|
#18+
L_argo invm L_argo, Вы путаете дедлок и блокировку. странно - вариант блокировки мне тоже понятен идет апдейт на таблице - триггер занят - ждем пока освободится а дедлок тут причем ? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2020, 18:45 |
|
Принудительное отключение триггера
|
|||
---|---|---|---|
#18+
а дедлок тут причем ?Дедлок, в отличие от простой блокировки сам не отпустит. Хотя у скуля есть механизм, который дропает одно из дедлочных соединений, но это происходит не всегда. Мы тут обсуждаем блокировки, которые сами не проходят. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2020, 18:50 |
|
Принудительное отключение триггера
|
|||
---|---|---|---|
#18+
L_argo а дедлок тут причем ? Хотя у скуля есть механизм, который дропает одно из дедлочных соединений, но это происходит не всегда. Мы тут обсуждаем блокировки, которые сами не проходят.Не надо фантазировать. Дедлок -- это такая взаимоблокировка, которая приводит к дропу одного из запросов с соответствующим текстом ошибок. И с настройками сессии, которые позволяют выбирать, кого дропать. Бесконечная блокировка -- это не делок, это бесконечная блокировка. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2020, 19:13 |
|
Принудительное отключение триггера
|
|||
---|---|---|---|
#18+
Гавриленко Сергей Алексеевич Бесконечная блокировка -- это не делок, это бесконечная блокировка. Иначе что это за бесконечная блокировка такая? L_argo про них и пишет. Обычная блокировка не является проблемой для заливки процедур/триггеров, рано или поздно она кончится. Дедлок (официальные) тоже. А вот дедлок, который сервером не опознан, очевидно, проблема. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2020, 19:20 |
|
Принудительное отключение триггера
|
|||
---|---|---|---|
#18+
alexeyvg Иначе что это за бесконечная блокировка такая? Дедлок -- это именно цилклическая (и, вследствие, не разрешимая без внешнего вмешательства блокировка). И именно цикличность определяет дедлок, а не продолжительность. Мне вот не очевидно из сообщения, что L_argo их не путает. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2020, 19:31 |
|
Принудительное отключение триггера
|
|||
---|---|---|---|
#18+
L_argo а дедлок тут причем ? Хотя у скуля есть механизм, который дропает одно из дедлочных соединений, но это происходит не всегда. Мы тут обсуждаем блокировки, которые сами не проходят. Не пора ли уже Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2020, 19:35 |
|
Принудительное отключение триггера
|
|||
---|---|---|---|
#18+
L_argo Не путаю. Случайно написал так. Везде дедлоки. У вас именно так делалось? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2020, 19:49 |
|
Принудительное отключение триггера
|
|||
---|---|---|---|
#18+
invm L_argo Не путаю. Случайно написал так. Везде дедлоки. У вас именно так делалось? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2020, 19:56 |
|
Принудительное отключение триггера
|
|||
---|---|---|---|
#18+
a_voronin Не пора ли уже ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2020, 23:52 |
|
Принудительное отключение триггера
|
|||
---|---|---|---|
#18+
Гавриленко Сергей Алексеевич В целом, при наличии "правильного" ddl-триггера можно и с одним alter устроить. Но этот вариант не рассматриваю, ибо в этом случае в сообщении об ошибке будет фигурировать имя этого триггера. И после этого утверждать о накате триггеров как источнике дедлоков - было бы совсем глупо. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2020, 11:52 |
|
Принудительное отключение триггера
|
|||
---|---|---|---|
#18+
А какая разница, дедлок или бесконечная блокировка ? Результат в данном случае одинаков: надо грохать один из процессов. Поэтому следует по возможности избегать триггеров. Кстати похожую проблему наблюдал с Truncate table. Проще и надежнее делать delete, если строк не много. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2020, 14:59 |
|
Принудительное отключение триггера
|
|||
---|---|---|---|
#18+
L_argo А какая разница, дедлок или бесконечная блокировка ? Результат в данном случае одинаков: надо грохать один из процессов. Поэтому следует по возможности избегать триггеров. Создание/изменение триггера или выполнения truncate требует Sch-M на таблицу, т.к. это DDL. И именно на этом ожидании виснет. И это не дедлок. Согласно вашей теории любые модификации схемы таблиц, создание индексов, констрейнтов и т.д. также должны быть объявлены злом и запрещены к использованию, ибо также требуют Sch-M. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2020, 15:27 |
|
Принудительное отключение триггера
|
|||
---|---|---|---|
#18+
авторСогласно вашей теории любые модификации схемы таблиц, создание индексов, констрейнтов и т.д. также должны быть объявлены злом и запрещены к использованию, ибо также требуют Sch-M. Как-то не сталкивался с блокировками во время создания индексов. Но думаю, что бывают. Констрейнты тоже зло. :) Все что блокирует схему - в какой-то степени зло. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2020, 15:44 |
|
Принудительное отключение триггера
|
|||
---|---|---|---|
#18+
L_argo, какой же цели, по Вашему мнению, служат блокировки и для чего их ввели в систему? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2020, 16:28 |
|
Принудительное отключение триггера
|
|||
---|---|---|---|
#18+
Владислав Колосов L_argo, какой же цели, по Вашему мнению, служат блокировки и для чего их ввели в систему? Что бы жизнь сахаром не казалась PS Обсуждение давно ушло в сторону от темы. Пора закруглять... PPS Триггеры - ништяк! Но бывает и ж0п@ ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2020, 19:47 |
|
|
start [/forum/topic.php?all=1&fid=46&tid=1686042]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
47ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
71ms |
get tp. blocked users: |
1ms |
others: | 12ms |
total: | 167ms |
0 / 0 |