Я использую расширенные события для отслеживания операторов, используемых нашим приложением. Я создал сеанс, который будет собирать информацию, которую я хочу, за исключением того, что я также хотел бы знать фактические значения параметров, которые были использованы .
Я выполняю эту трассировку в непроизводственной среде, и любая трассировка, от которой страдает производительность, является приемлемой.
Все запросы происходят из Hibernate и параметризованы в виде:
SELECT a, b, c From Customer where CustomerId = @P0
Это моя сессия.
CREATE EVENT SESSION [TracingForStatements] ON SERVER
ADD EVENT sqlserver.sp_statement_completed (
ACTION (
sqlserver.session_id,
package0.collect_system_time,
sqlserver.transaction_id,
package0.event_sequence
)
WHERE (
sqlserver.database_id=555
)
)
ADD TARGET package0.ring_buffer(SET max_memory= 128000)
WITH (EVENT_RETENTION_MODE = NO_EVENT_LOSS,
MAX_DISPATCH_LATENCY = 1 SECONDS)
Как я могу зафиксировать фактические значения параметров, которые использовались в захваченных операторах? Является ли это возможным?
- Правка (Обходное решение): изменение события на rpc_completed дает мне полную команду sql (включая все значения параметров), вызываемую из Hibernate. Для других случаев было бы полезно знать, как фиксировать значения параметров, если это возможно.
источник
Ответы:
Кто-то упомянул: «Я думаю, что только событие sqlserver.rpc_completed даст вам полную команду SQL, включая значения параметров». Пожалуйста, просмотрите ответ ниже:
Захват значений переданных параметров в расширенных сеансах сервера Sql
источник