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

Откуда: Москва
Сообщений: 12
Здравствуйте.

Мне нужно написать триггер, который мониторит таблицу и в случае если произведена вставка строки и запрос существует, то высылает сообщение на почту.

На тестовой таблице триггер срабатывает и высылает сообщение если запрос возвращает true. Но, когда триггер создаю на боевой таблице, то у меня перестают вставляться строки (некое приложение вставляет данные по несколько строк в секунду в боевую таблицу) в эту таблицу, как только триггер отключаю, то сразу в таблицу вставляются сразу несколько строк, как будто из-за триггера они встали в очередь и ждали когда триггер будет отключен.
В чём может быть проблема? На одной таблице триггер работает, а на другой практически тот же самый не работает.

ALTER TRIGGER dbo.test_message
ON dbo.new_test
AFTER INSERT
AS

IF EXISTS (некий запрос)

BEGIN
   EXEC msdb.dbo.sp_send_dbmail
        @profile_name = 'test_1',
        @recipients = 'pochta@mail.ru',
        @body = 'Тестовое сообщение',
        @subject = 'test_message';
END



Спасибо.
23 апр 13, 14:36    [14218775]     Ответить | Цитировать Сообщить модератору
 Re: trigger мешает делать insert  [new]
Glory
Member

Откуда:
Сообщений: 104751
matin_fedor
как будто из-за триггера они встали в очередь и ждали когда триггер будет отключен.

Это вы установили с помощью мониторинга ? Или просто фантазируете о причинах ?
Или может вы скрываете сообщение об ошибке при "у меня перестают вставляться строки " ?
23 апр 13, 14:41    [14218820]     Ответить | Цитировать Сообщить модератору
 Re: trigger мешает делать insert  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
"Перестают вставляться " - это такое сообщение об ошибке?
23 апр 13, 14:42    [14218826]     Ответить | Цитировать Сообщить модератору
 Re: trigger мешает делать insert  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 3058
возможно у Вас
EXISTS (некий запрос)
долго выполняется или блокирован
23 апр 13, 14:43    [14218832]     Ответить | Цитировать Сообщить модератору
 Re: trigger мешает делать insert  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 3058
и. второе, тригер выполняется с правами пользователя, его вызвавшего, а у этого пользователя может не быть прав выполнять sp_send_dbmail, в результате тригер отвалиться и записи вставлятся не будут
23 апр 13, 14:45    [14218845]     Ответить | Цитировать Сообщить модератору
 Re: trigger мешает делать insert  [new]
matin_fedor
Member

Откуда: Москва
Сообщений: 12
Гавриленко Сергей Алексеевич,
никаких ошибок не выдает
23 апр 13, 14:48    [14218861]     Ответить | Цитировать Сообщить модератору
 Re: trigger мешает делать insert  [new]
matin_fedor
Member

Откуда: Москва
Сообщений: 12
Glory
matin_fedor
как будто из-за триггера они встали в очередь и ждали когда триггер будет отключен.

Это вы установили с помощью мониторинга ? Или просто фантазируете о причинах ?
Или может вы скрываете сообщение об ошибке при "у меня перестают вставляться строки " ?


Да, я мониторил и выяснил, что строки не вставляются именно из-за включенного триггера на эту таблицу.
23 апр 13, 14:50    [14218874]     Ответить | Цитировать Сообщить модератору
 Re: trigger мешает делать insert  [new]
invm
Member

Откуда: Москва
Сообщений: 9825
При вызове sp_send_dbmail используется @query, обращающийся к этой же таблице?
23 апр 13, 14:50    [14218875]     Ответить | Цитировать Сообщить модератору
 Re: trigger мешает делать insert  [new]
Glory
Member

Откуда:
Сообщений: 104751
matin_fedor
Да, я мониторил и выяснил, что строки не вставляются именно из-за включенного триггера на эту таблицу.

И какая ошибка то возникает ?
Какая команда триггера ее генерирует ?
23 апр 13, 14:52    [14218897]     Ответить | Цитировать Сообщить модератору
 Re: trigger мешает делать insert  [new]
STsarionov
Member

Откуда:
Сообщений: 105
сделайте временную таблицу, в тригере вставляйте запись в эту таблицу, сделайте джоб на сервере, который бы проверял раз в 5 минут допустим, эту временную таблицу и высылал бы вам список того что вставилось. Это разгрузит тригер. Очень плохая практика писать такие тригеры где возможны варианты его зависания.
23 апр 13, 14:53    [14218901]     Ответить | Цитировать Сообщить модератору
 Re: trigger мешает делать insert  [new]
aleks2
Guest
matin_fedor
Здравствуйте.

Мне нужно написать триггер, который мониторит таблицу и в случае если произведена вставка строки и запрос существует, то высылает сообщение на почту.

На тестовой таблице триггер срабатывает и высылает сообщение если запрос возвращает true. Но, когда триггер создаю на боевой таблице, то у меня перестают вставляться строки (некое приложение вставляет данные по несколько строк в секунду в боевую таблицу) в эту таблицу, как только триггер отключаю, то сразу в таблицу вставляются сразу несколько строк, как будто из-за триггера они встали в очередь и ждали когда триггер будет отключен.
В чём может быть проблема? На одной таблице триггер работает, а на другой практически тот же самый не работает.

ALTER TRIGGER dbo.test_message
ON dbo.new_test
AFTER INSERT
AS

IF EXISTS (некий запрос)

BEGIN
   EXEC msdb.dbo.sp_send_dbmail
        @profile_name = 'test_1',
        @recipients = 'pochta@mail.ru',
        @body = 'Тестовое сообщение',
        @subject = 'test_message';
END



Спасибо.

За такое надо рассреливать.
23 апр 13, 15:06    [14219002]     Ответить | Цитировать Сообщить модератору
 Re: trigger мешает делать insert  [new]
matin_fedor
Member

Откуда: Москва
Сообщений: 12
invm
При вызове sp_send_dbmail используется @query, обращающийся к этой же таблице?

@query не используется
23 апр 13, 15:11    [14219038]     Ответить | Цитировать Сообщить модератору
 Re: trigger мешает делать insert  [new]
matin_fedor
Member

Откуда: Москва
Сообщений: 12
aleks2
matin_fedor
Здравствуйте.

Мне нужно написать триггер, который мониторит таблицу и в случае если произведена вставка строки и запрос существует, то высылает сообщение на почту.

На тестовой таблице триггер срабатывает и высылает сообщение если запрос возвращает true. Но, когда триггер создаю на боевой таблице, то у меня перестают вставляться строки (некое приложение вставляет данные по несколько строк в секунду в боевую таблицу) в эту таблицу, как только триггер отключаю, то сразу в таблицу вставляются сразу несколько строк, как будто из-за триггера они встали в очередь и ждали когда триггер будет отключен.
В чём может быть проблема? На одной таблице триггер работает, а на другой практически тот же самый не работает.

ALTER TRIGGER dbo.test_message
ON dbo.new_test
AFTER INSERT
AS

IF EXISTS (некий запрос)

BEGIN
   EXEC msdb.dbo.sp_send_dbmail
        @profile_name = 'test_1',
        @recipients = 'pochta@mail.ru',
        @body = 'Тестовое сообщение',
        @subject = 'test_message';
END



Спасибо.

За такое надо рассреливать.

Конкретно, за что?
23 апр 13, 15:13    [14219049]     Ответить | Цитировать Сообщить модератору
 Re: trigger мешает делать insert  [new]
matin_fedor
Member

Откуда: Москва
Сообщений: 12
STsarionov
сделайте временную таблицу, в тригере вставляйте запись в эту таблицу, сделайте джоб на сервере, который бы проверял раз в 5 минут допустим, эту временную таблицу и высылал бы вам список того что вставилось. Это разгрузит тригер. Очень плохая практика писать такие тригеры где возможны варианты его зависания.

Да, я уже думал над этим.
23 апр 13, 15:19    [14219094]     Ответить | Цитировать Сообщить модератору
 Re: trigger мешает делать insert  [new]
aleks2
Guest
matin_fedor
aleks2
пропущено...

За такое надо рассреливать.

Конкретно, за что?


За вызов в триггере заведомо "медленной" и "зависящей от внешнего мира" функции.

Хочешь письма писать - складывай текст писем в табличку.
И обрабатывай табличку асинхронно джобом.
23 апр 13, 15:22    [14219117]     Ответить | Цитировать Сообщить модератору
 Re: trigger мешает делать insert  [new]
matin_fedor
Member

Откуда: Москва
Сообщений: 12
aleks2
matin_fedor
пропущено...

Конкретно, за что?


За вызов в триггере заведомо "медленной" и "зависящей от внешнего мира" функции.

Хочешь письма писать - складывай текст писем в табличку.
И обрабатывай табличку асинхронно джобом.

Ну, я надеялся, что будет быстро работать, но интуиция подсказывала, что так как я делаю, делать не надо :)
23 апр 13, 15:38    [14219245]     Ответить | Цитировать Сообщить модератору
 Re: trigger мешает делать insert  [new]
Ivan Durak
Member

Откуда: Minsk!!!
Сообщений: 3752
aleks2
matin_fedor
пропущено...

Конкретно, за что?


За вызов в триггере заведомо "медленной" и "зависящей от внешнего мира" функции.

Хочешь письма писать - складывай текст писем в табличку.
И обрабатывай табличку асинхронно джобом.

Да и триггер не нужен.
Ахинхронный джоб судя по всему сам может добыть всю инфу для емэйла
23 апр 13, 16:07    [14219518]     Ответить | Цитировать Сообщить модератору
 Re: trigger мешает делать insert  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Ivan Durak
aleks2
пропущено...


За вызов в триггере заведомо "медленной" и "зависящей от внешнего мира" функции.

Хочешь письма писать - складывай текст писем в табличку.
И обрабатывай табличку асинхронно джобом.

Да и триггер не нужен.
Ахинхронный джоб судя по всему сам может добыть всю инфу для емэйла
Будет ли она в этот момент актуальна - вот в чём вопрос
23 апр 13, 16:16    [14219601]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить