如何跟踪在 sql server 中触发的确切查询

Sag*_*ana 3 sql-server-2008-r2

我在性能调优方面遇到了问题。我们正在使用一个名为 ARAS(领先的 PLM 软件之一)的应用程序,它使用 Sql 服务器作为后端。

每次我们使用 Aras 接口找到一些数据时,它都会与 SQL 服务器交互并给我们 Response。

但我无法找到将哪个查询发送到 SQL Server。我试图用这个查询找到它

SELECT deqs.last_execution_time AS [Time], dest.TEXT AS [Query]
FROM sys.dm_exec_query_stats AS deqs
CROSS APPLY sys.dm_exec_sql_text(deqs.sql_handle) AS dest
ORDER BY deqs.last_execution_time DESC.
Run Code Online (Sandbox Code Playgroud)

这也没有正确帮助我。

我们使用的是 SQL Server 2008 Express 和 ARAS 9.3

Kin*_*hah 9

尽管 SQL Profiler 在 Express Edition 中不可用,但您仍然可以通过以下任何一种方法来利用跟踪功能:

  1. CodePlex 提供ExpressProfiler
  2. 或者您可以安装开发人员版,然后使用探查器来跟踪 sql 语句。
  3. 使用跟踪标志 4032将所有客户端的所有 sql 记录到错误日志中。

注意:这会将来自所有客户端的所有 sql 记录到错误日志中,因此最好在完成跟踪后将其关闭。这个跟踪标志的缺点是它必须在启动时应用,;-T4032并且必须重新启动 sql server。

    DBCC TRACEON(4032,3605,-1)
Run Code Online (Sandbox Code Playgroud)

4.您可以启动服务器端跟踪 ,如下所示:

/***********************************************/ 
/* Server Side Trace                           */ 
/***********************************************/ 
-- Declare variables 
DECLARE @rc INT 
DECLARE @TraceID INT 
DECLARE @maxFileSize bigint 
DECLARE @fileName NVARCHAR(128) 
DECLARE @on bit 

-- Set values 
SET @maxFileSize = 5 
SET @fileName = N'C:\SQLTrace' 
SET @on = 1 

-- Create trace 
EXEC @rc = sp_trace_create @TraceID output, 0, @fileName, @maxFileSize, NULL  

-- If error end process 
IF (@rc != 0) GOTO error 

-- Set the events and data to collect 
EXEC sp_trace_setevent @TraceID, 41,  1, @on 
EXEC sp_trace_setevent @TraceID, 41, 12, @on 
EXEC sp_trace_setevent @TraceID, 41, 13, @on 
EXEC sp_trace_setevent @TraceID, 41, 14, @on 
EXEC sp_trace_setevent @TraceID, 41, 15, @on 
EXEC sp_trace_setevent @TraceID, 41, 16, @on 
EXEC sp_trace_setevent @TraceID, 41, 17, @on 

-- Set Filters 
-- filter1 include databaseId = 6 .. **Change your database ID *** HERE !!
EXEC sp_trace_setfilter @TraceID, 3, 1, 0, 6 
-- filter2 exclude application SQL Profiler 
EXEC sp_trace_setfilter @TraceID, 10, 0, 7, N'SQL Profiler' 

-- Start the trace 
EXEC sp_trace_setstatus @TraceID, 1 

-- display trace id for future references  
SELECT TraceID=@TraceID  
GOTO finish  

-- error trap 
error:  
SELECT ErrorCode=@rc  

-- exit 
finish:  
GO
Run Code Online (Sandbox Code Playgroud)

-- 查找跟踪 ID

SELECT * FROM :: fn_trace_getinfo(default)
Run Code Online (Sandbox Code Playgroud)

--- 停止跟踪

sp_trace_setstatus traceid, 0 --- here 0 is the trace ID which we got from above query
Run Code Online (Sandbox Code Playgroud)

--将跟踪文件加载到sql server中的新表中

SELECT * INTO sqlTableToLoad 
FROM ::fn_trace_gettable('C:\SQLTrace\trace.trc', DEFAULT) 
Run Code Online (Sandbox Code Playgroud)