Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
 Логирование хранимых процедур  [new]
mezzanine
Member

Откуда:
Сообщений: 157
Добрый вечер.
Хотелось бы иметь возможность логирования процесса выполнения хранимых процедур. Например есть процедура "Proc1" которая внутри себя вызывает еще некоторое количество процедур. В них хочу писать что-то вроде "log.Info('....'); log.Error('...')". Потом по таким вещам легко находить проблемы в бизнес логике, конечно если она на T-SQL, а в моем случае это так.
В Оракле использовал фреймворк "Log 4 pl/sql" отличная поделка, допиливалась под нужды. Под MS SQL не смог найти :(
Отсутствие автономных транзакций вообще завело меня в тупик :(
Поделитесь опытом.
8 ноя 15, 22:21    [18386373]     Ответить | Цитировать Сообщить модератору
 Re: Логирование хранимых процедур  [new]
invm
Member

Откуда: Москва
Сообщений: 9400
17329722
8 ноя 15, 22:35    [18386439]     Ответить | Цитировать Сообщить модератору
 Re: Логирование хранимых процедур  [new]
mezzanine
Member

Откуда:
Сообщений: 157
invm,

Идея интересная. Но как-то чересчур использовать очереди для логирования.

Честно говоря удивлен скудностью функционала, это для версии 2014. В Оракле такие штуки уже не помню сколько лет существуют. Это я так, взгрустнул :)
9 ноя 15, 01:12    [18386916]     Ответить | Цитировать Сообщить модератору
 Re: Логирование хранимых процедур  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 33940
Блог
mezzanine,

просто включить аудит?
9 ноя 15, 07:45    [18387170]     Ответить | Цитировать Сообщить модератору
 Re: Логирование хранимых процедур  [new]
Jovanny
Member

Откуда:
Сообщений: 1195
RAISERROR ... WITH LOG
- как вариант.
9 ноя 15, 09:55    [18387483]     Ответить | Цитировать Сообщить модератору
 Re: Логирование хранимых процедур  [new]
o-o
Guest
Jovanny
RAISERROR ... WITH LOG
- как вариант.

Only a member of the sysadmin fixed server role or a user with ALTER TRACE permissions can specify WITH LOG.
9 ноя 15, 10:26    [18387601]     Ответить | Цитировать Сообщить модератору
 Re: Логирование хранимых процедур  [new]
человек_ниоткуда
Guest
mezzanine
invm,

Идея интересная. Но как-то чересчур использовать очереди для логирования.

Какие очереди? Там про sp_trace_generateevent, это собственно и есть генерация пользовательского лога.
9 ноя 15, 11:30    [18388004]     Ответить | Цитировать Сообщить модератору
 Re: Логирование хранимых процедур  [new]
mezzanine
Member

Откуда:
Сообщений: 157
человек_ниоткуда,

Такие очереди:
create queue dbo.qSimpleAudit
9 ноя 15, 11:33    [18388021]     Ответить | Цитировать Сообщить модератору
 Re: Логирование хранимых процедур  [new]
invm
Member

Откуда: Москва
Сообщений: 9400
mezzanine
Идея интересная. Но как-то чересчур использовать очереди для логирования.
Есть какие-то объективные критерии для такой оценки?
9 ноя 15, 11:37    [18388053]     Ответить | Цитировать Сообщить модератору
 Re: Логирование хранимых процедур  [new]
mezzanine
Member

Откуда:
Сообщений: 157
Как писал выше идея в том чтоб логировать бизнес процессы. Идея не новая и широко применяется. Запускается джобом процедура, допустим закрытие дня. Она вызывает много других процедур и естественным требованием должно быть ее полное выполнение (комит) или при ошибке полный откат. После вызова N процедур получить просто exception не выход. Логи в автономной транзакции дают возможность гарантировано получить так сказать мой стек вызова.

Аудит. С его помощью можно контролировать что в процедуре будет логироваться? Например добавление записи типом "Warning" и из 10 входящих параметров залогировать только 3 нужных ну и в таком духе.
9 ноя 15, 11:41    [18388079]     Ответить | Цитировать Сообщить модератору
 Re: Логирование хранимых процедур  [new]
mezzanine
Member

Откуда:
Сообщений: 157
invm,

Моих нет. Только читал статью как строили репликацию на очереди и были недовольны стабильностью и скоростью.
Как-то много лишних телодвижений, заворачиваем сообщение в XML, отправляется в очередь, процедура выгребает данные из очереди, разворачивает сообщение и наконец то вставляет в таблицу лога.
9 ноя 15, 11:46    [18388112]     Ответить | Цитировать Сообщить модератору
 Re: Логирование хранимых процедур  [new]
invm
Member

Откуда: Москва
Сообщений: 9400
mezzanine
Только читал статью как строили репликацию на очереди и были недовольны стабильностью и скоростью.
Не допускаете, что авторы просто что-то неправильно делают?
mezzanine
Как-то много лишних телодвижений, заворачиваем сообщение в XML, отправляется в очередь, процедура выгребает данные из очереди, разворачивает сообщение и наконец то вставляет в таблицу лога.
Вам предложен механизм асинхронного логирования, позволяющий легко включать/выключать и, при желании, пренаправлять логирование на другой сервер/БД, при этом ничего не меняя в коде.
9 ноя 15, 12:22    [18388436]     Ответить | Цитировать Сообщить модератору
 Re: Логирование хранимых процедур  [new]
_human
Member

Откуда:
Сообщений: 560
mezzanine,

Можно написать процедуру только для логирования и вызывать ее в каждой процедуре что бы используете.
Процедура будет писать в какую-то табличку начало и конец бизнес логики и т.п.
9 ноя 15, 12:49    [18388623]     Ответить | Цитировать Сообщить модератору
 Re: Логирование хранимых процедур  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
mezzanine
invm,

Идея интересная. Но как-то чересчур использовать очереди для логирования.

Честно говоря удивлен скудностью функционала, это для версии 2014. В Оракле такие штуки уже не помню сколько лет существуют. Это я так, взгрустнул :)


В каком смысле - чересчур? В статье описан штатный внетранзакционный механизм. Тот же "оракловский фреймворк", только вид сбоку.
9 ноя 15, 14:28    [18389489]     Ответить | Цитировать Сообщить модератору
 Re: Логирование хранимых процедур  [new]
mezzanine
Member

Откуда:
Сообщений: 157
_human,

Так и хочется сделать. Проблемы в транзакциях. При rollback-е процедуры бизнес логики все логи также исчезнут.
9 ноя 15, 15:15    [18389840]     Ответить | Цитировать Сообщить модератору
 Re: Логирование хранимых процедур  [new]
mezzanine
Member

Откуда:
Сообщений: 157
invm,

Вполне возможно. Спасибо за предложенный вариант. Буду прикручивать к базе, посмотрю как работает.
9 ноя 15, 15:18    [18389867]     Ответить | Цитировать Сообщить модератору
 Re: Логирование хранимых процедур  [new]
mezzanine
Member

Откуда:
Сообщений: 157
Возможно когда нибудь внедрят автономные транзакции, тикет с 2007 года активный Add support for autonomous transactions.
9 ноя 15, 15:23    [18389906]     Ответить | Цитировать Сообщить модератору
 Re: Логирование хранимых процедур  [new]
_human
Member

Откуда:
Сообщений: 560
mezzanine,

в CATCH можно все отловить. Так же можно заглягуть в лог БД fn_dblog(null,null) за доп. инфо.
Полезная вью - sys.dm_tran_active_transactions
9 ноя 15, 15:24    [18389918]     Ответить | Цитировать Сообщить модератору
 Re: Логирование хранимых процедур  [new]
mezzanine
Member

Откуда:
Сообщений: 157
_human,

Простите, а как это поможет решить проблему с откатом транзакции и необходимостью комита записей лога (все это в одной транзакции)?
9 ноя 15, 15:32    [18389998]     Ответить | Цитировать Сообщить модератору
 Re: Логирование хранимых процедур  [new]
aleks2
Guest
mezzanine
_human,

Простите, а как это поможет решить проблему с откатом транзакции и необходимостью комита записей лога (все это в одной транзакции)?


1. Канешно, кажется удобным наличие возможности журналирования...
2. Но если подумать - это навроде говнокода. Журналы то копятся - место и время жрут.
3. Для запуска транзакции и получения ошибки ПОВТОРНО для анализа достаточно журналировать только ИСХОДНЫЕ параметры транзакции. Что, очевидным образом, можно сделать ВНЕ транзакции.
4. При ошибке просто запускаем транзакцию заново с этими параметрами и лицезреем ошибку.
9 ноя 15, 15:44    [18390111]     Ответить | Цитировать Сообщить модератору
 Re: Логирование хранимых процедур  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37052
aleks2
1. Канешно, кажется удобным наличие возможности журналирования...
Очень удобно. Иногда полезно логировать всякие штуки, типа времени выполнения конкретного стейтмента и кол-во зааффекченных записей.
aleks2
2. Но если подумать - это навроде говнокода. Журналы то копятся - место и время жрут.
О да, проблема. Решается банальным Sliding Window.
aleks2
3. Для запуска транзакции и получения ошибки ПОВТОРНО для анализа достаточно журналировать только ИСХОДНЫЕ параметры транзакции. Что, очевидным образом, можно сделать ВНЕ транзакции.
4. При ошибке просто запускаем транзакцию заново с этими параметрами и лицезреем ошибку.
Ошибка может быть time-related или еще какая related, а исходными данными может быть буфер на 10кк записей.
9 ноя 15, 15:54    [18390180]     Ответить | Цитировать Сообщить модератору
 Re: Логирование хранимых процедур  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
Можно прикрутить механизм DCT для ограничения времени хранения.
9 ноя 15, 16:09    [18390265]     Ответить | Цитировать Сообщить модератору
 Re: Логирование хранимых процедур  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
TDC, то есть.
9 ноя 15, 16:10    [18390275]     Ответить | Цитировать Сообщить модератору
 Re: Логирование хранимых процедур  [new]
Гулин Федор
Member

Откуда: МИНСК
Сообщений: 1249
mezzanine
Возможно когда нибудь внедрят автономные транзакции, тикет с 2007 года активный Add support for autonomous transactions.


вроде мне расказыали про фокус как это можно реализовать в SQL-server
сделав линк-сервер сам на себя
и делая DML Через его
- но подробностей не скажу
9 ноя 15, 18:58    [18391400]     Ответить | Цитировать Сообщить модератору
 Re: Логирование хранимых процедур  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37052
Варианты, которые имею право на жизнь:
  • loopback linked server
  • Service Broker
  • CLR

    Мы протестили у себя, в наших условиях с небольшим отрывом по производительности победил CLR (на нем и сделали).
  • 9 ноя 15, 19:25    [18391569]     Ответить | Цитировать Сообщить модератору
    Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
    Все форумы / Microsoft SQL Server Ответить