Требуется реализовать ведение журнала всех запросов SQL в приложении, включая переданные параметры.
- СУБД: SQL Server 2017 Standard
- Язык приложений:
.NET
стек - Количество приложений: 12 +
Какреализовать это с наименьшим влиянием на производительность с архитектурной точки зрения? Хранение на отдельном экземпляре. Может быть, мне стоит использовать механизм очереди?
UPD :
Extended Events
: это не подходит для нашей рабочей нагрузки, поскольку создает дополнительную нагрузку.
Query store
: По мере увеличения объема данных в QS
получать данные оттуда становится все труднее, поскольку индексов нет, кроме того, невозможно получить точную информацию по запросупараметры.
Идея состоит в том, чтобы регистрировать запросы в приложениях и отправлять их в хранилище, отличное от рабочего экземпляра, чтобы не создавать дополнительную нагрузку. Я могу получать запросы с параметрами, продолжительностью и другой информацией в приложениях, но необходимо реализовать эффективный способ сохранения данных.
Я попробовал решение в лоб - appender от nlog
,который асинхронно записывает в базу данных. Были настроены параметры пакета и другие, но приложения получили ~ 30% снижения производительности.