Я хотел бы настроить в своей базе данных систему контрольных журналов, чтобы отслеживать UPDATE/INSERT
заявления в конкретной таблице с очень высокой активностью. Передо мной два варианта: использовать встроенную систему аудита SQL Server или использовать расширенные события.
Поскольку аудит SQL Server внутренне использует расширенные события, я предполагаю, что при непосредственном использовании аудита вместо расширенных событий будут возникать дополнительные издержки.
Можно ли как-нибудь проверить, какая система больше влияет на сервер? Если бы я мог знать, что на самом деле происходит при создании любого сеанса XE, это помогло бы мне проанализировать влияние на сервер.
Мы рассмотрели триггеры и пропустили этот вариант из-за накладных расходов. Но это было решено только на основе информации из Интернета.
источник
Ответы:
Я создал простую тестовую установку для проверки SQL Server Audit на наличие триггеров и, возможно, других вариантов. В моих тестах по вставке 1 миллиона строк в таблицу я получил 52, 67 и 159 секунд для базовой линии, аудита SQL и моего триггера соответственно:
Теперь это не особенно научно, но потенциально предлагает вам один из способов сравнения подходов. Посмотрите скрипт и посмотрите, может ли он быть вам полезен:
Хотя опция триггера здесь не очень хорошо работает, мой код триггера может быть упрощен в зависимости от того, что вы хотите захватить, и он позволяет вам получить доступ к старым и новым значениям в довольно удобном формате, который не поддерживается в SQL Audit. Я использовал эту технику для таблицы конфигурации с более низкой активностью, и она работает довольно хорошо. В зависимости от того, что вы хотите захватить, вы можете также рассмотреть возможность изменения данных .
Дайте мне знать, как вы справляетесь со своими испытаниями. Удачи.
источник
Одно из преимуществ аудита, которое приходит на ум, заключается в том, что он будет автоматически записывать, кто его включает и выключает, XE не будет делать это «из коробки» (хотя вы можете найти событие, которое отслеживает остановку / запуск XE). Вы также можете обнаружить, что они собирают разные данные, в зависимости от того, что именно вы хотите.
Что касается проведения некоторого тестирования, вам необходимо иметь резервную копию базы данных, захватить трассировку приложения под нагрузкой, а затем восстановить копию, выполняя воспроизведение / воспроизведение с проверкой / заменой на XE и сравнивая данные о производительности.
Какие данные о производительности? Тебе решать. Для некоторых идей - Линчи Ши сделал сравнение между Audit и Trace, сосредоточившись на транзакциях в секунду, в то время как Kehayias провел сравнение между Trace и XE, сосредоточившись на пакетах в секунду и общем времени выполнения воспроизведения.
Я рекомендую вам прочитать оба и их комментарии, потому что вы должны знать, что независимо от того, что вы делаете, это будет открыто для интерпретации. Сложно достать яблоки для сравнения яблок. Кроме того, трассировка / воспроизведение может не смоделировать нагрузку должным образом - например, когда ваше приложение выполняет много массовых загрузок из дисковых файлов, которые больше не существуют.
Но важно то, что вы пробуете хотя бы одну вещь, чтобы вы могли обосновать свои решения, а также вести блог об этом для остальных из нас.
источник