Sql-Server

SQL Server 擴展事件奇怪的行為試圖擷取來自 SAS 的語句

  • April 28, 2022

問題:當請求來自 SAS 時,我們創建的用於擷取針對某個表的查詢的擴展事件 (EE) 會話不起作用。

EE程式碼:

CREATE EVENT SESSION [TEST_Capture_Queries] ON SERVER 
ADD EVENT sqlserver.sql_statement_completed(
   ACTION(sqlserver.client_app_name,sqlserver.client_hostname,sqlserver.database_name,sqlserver.nt_username,sqlserver.query_hash,sqlserver.query_plan_hash,sqlserver.sql_text,sqlserver.username)
   WHERE ([sqlserver].[like_i_sql_unicode_string]([sqlserver].[sql_text],N'%schema%table%'))),
ADD EVENT sqlserver.sql_batch_completed(
   ACTION(sqlserver.client_app_name,sqlserver.client_hostname,sqlserver.database_name,sqlserver.nt_username,sqlserver.query_hash,sqlserver.query_plan_hash,sqlserver.sql_text,sqlserver.username)
   WHERE ([sqlserver].[like_i_sql_unicode_string]([sqlserver].[sql_text],N'%schema%table%')))
ADD TARGET package0.event_file(SET filename=N'D:\Audit\TEST_Capture_Queries.xel',max_rollover_files=(10))
WITH (MAX_MEMORY=4096 KB,EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS,MAX_DISPATCH_LATENCY=30 SECONDS,MAX_EVENT_SIZE=0 KB,MEMORY_PARTITION_MODE=NONE,TRACK_CAUSALITY=OFF,STARTUP_STATE=ON)
GO

我們看到使用 sp_whoisactive 用於源自 SAS 的 SQL 登錄:

SELECT * FROM schema.table

對於同一登錄,我們在 EE 文件中獲得的內容:

-- sql_statement_completed.sql_text
EXEC sp_executesql N'set implicit_transactions off select USER_NAME() select usertype,type,name from systypes where usertype>=257' 
-- sql_batch_completed.batch_text
EXEC sp_executesql N'set implicit_transactions off select USER_NAME() select usertype,type,name from systypes where usertype>=257' 

我不是特別精通 SAS,但 EE 會話肯定會擷取引用schema.table的查詢(來自 SSMS 和應用伺服器) 。我想我錯過了一個事件,但試錯法尚未產生結果。我不想不得不塵埃落定並啟動 SQL Profiler,因此任何見解都會受到讚賞。

我錯過的事件:sqlserver.rpc_completed

引用自:https://dba.stackexchange.com/questions/311404