6

是否可以使用 SQL Profiler 来观察 LocalDB 实例请求的查询?

4

5 回答 5

19

只要您知道正确的服务器名称,就可以像使用所有其他 SQL 版本一样使用 SQL Profiler。您可以使用SqlLocalDb实用程序查找服务器名称。

要找到它,请使用sqllocaldb info YourInstanceName查找Instance Pipe Name。它有形式np:\\.\pipe\LOCALDB#12345\tsql\query

将其用作服务器名称以连接到服务器并开始分析

于 2013-09-24T08:35:25.520 回答
4

这是我在 SQL Server Express 2012 上使用的(注意:不是“LocalDB* - 我从未使用过 LocalDB,所以这可能与“常规”SQL Server Express 不同)。

第 1 步:设置跟踪

这基本上是“艰苦的工作”。您首先需要找出 SQL Server 的默认日志目录在哪里。您需要此目录名称来指定跟踪文件。

然后通过执行以下操作创建跟踪:

DECLARE @TraceID int
DECLARE @tracefile nvarchar(255)
DECLARE @endDate datetime
DECLARE @size bigint

-- no file extension!
SET @tracefile = 'C:\Data\sqlserver\MSSQL11.SQLEXPRESS\MSSQL\Log\mydb_trace' 

-- tracing stops when either the max size of the file is reached 
-- or the enddate (whichever occurs first)
-- size is in MB
SET @size = 250
SET @enddate = DateAdd(DAY, 15, GetDate())

EXEC @rc = sp_trace_create @TraceID output, 2, @tracefile, @size, @enddate

现在对于应该跟踪的每个事件,您需要sp_trace_setevent多次调用来定义应该返回该事件的哪一列:

有关事件和列的完整列表,请参阅:http: //msdn.microsoft.com/en-US/library/ms186265%28v=sql.90%29.aspx

-- Enable Event: 45 = SP:StmtCompleted
EXEC sp_trace_setevent @TraceID, 45, 27, @on -- 27: EventClass
EXEC sp_trace_setevent @TraceID, 45, 12, @on -- 12: SPID
EXEC sp_trace_setevent @TraceID, 45, 35, @on -- 35: DatabaseName
EXEC sp_trace_setevent @TraceID, 45, 11, @on -- 11: SQLSecurityLoginName
EXEC sp_trace_setevent @TraceID, 45,  6, @on --  6: NTUserName
EXEC sp_trace_setevent @TraceID, 45,  8, @on --  8: ClientHostName
EXEC sp_trace_setevent @TraceID, 45, 10, @on -- 10: ApplicationName
EXEC sp_trace_setevent @TraceID, 45,  1, @on --  1: TextData
EXEC sp_trace_setevent @TraceID, 45, 13, @on -- 13: Duration
EXEC sp_trace_setevent @TraceID, 45, 14, @on -- 14: StartTime
EXEC sp_trace_setevent @TraceID, 45, 15, @on -- 15: EndTime
EXEC sp_trace_setevent @TraceID, 45, 18, @on -- 18: CPU
EXEC sp_trace_setevent @TraceID, 45, 29, @on -- 29: Nesting Level

必须为您要跟踪的每个事件完成上述所有调用!

我发现最有趣的事件12 = SQL:BatchCompleted, 42 = SP:Starting, 43 = SP:Completed, 。45 = SP:StmtCompleted50 = SQL Transaction

或者,您可以设置一个过滤器,我通常过滤掉系统事件并只显示特定数据库的事件:

-- Exclude system events (so only user events are shown)
-- 60: IsSystem Column
--  0: logical Operator: AND (only)
--  1: comparison operator: not equal
--  1: value
EXEC sp_trace_setfilter @TraceID, 60, 0, 1, 1

-- only mydb database
EXEC sp_trace_setfilter @TraceID, 35, 0, 6, N'mydb'

设置跟踪后,必须将其激活:

EXEC sp_trace_setstatus @TraceID, 1

(请注意,由于使用变量,上述必须作为单个批次运行)。

要查看跟踪是如何定义的,可以使用以下语句:

select traceid,
       case property
         when 1 then 'Trace Options'
         when 2 then 'Trace file'
         when 3 then 'Max. file size'
         when 4 then 'Stop time'
         when 5 then 'Status'
       end as property_name,
       case
         when property = 5 then
            case convert(nvarchar(max), value)
               when '1' then 'Active'
               else 'Inactive'
            end
         else convert(nvarchar(max), value)
       end as value
from ::fn_trace_getinfo(null)
where property in (2,3,5)

现在运行您的应用程序或任何要跟踪的数据库的问题语句。

步骤 2:检索跟踪信息

为此,您需要知道实际跟踪文件的完整路径(从步骤 1 开始)。请注意,fn_trace_gettable您需要指定包含文件扩展名的文件。

SELECT ApplicationName,
       LoginName,
       HostName,
       SPID,
       Duration,
       StartTime,
       EndTime,
       DatabaseName,
       reads,
       writes,
       RowCounts,
       cpu,
       EventClass,
       case EventClass
        when 10 then 'RPC:Completed'
        when 11 then 'RPC:Starting'
        when 12 then 'SQL:BatchCompleted'
        when 13 then 'SQL:BatchStarting'
        when 40 then 'SQL:StmtStarting'
        when 41 then 'SQL:StmtCompleted'
        when 42 then 'SP:Starting'
        when 43 then 'SP:Completed'
        when 44 then 'SP:StmtStarting'
        when 45 then 'SP:StmtCompleted'
        when 50 then 'SQL Transaction'
        when 67 then 'Execution Warnings'
        when 71 then 'Prepare SQL'
        when 72 then 'Exec Prepared SQL'
        when 73 then 'Unprepare SQL'
       end as Event,
       LineNumber,
       TextData
FROM ::fn_trace_gettable('C:\Data\sqlserver\MSSQL11.SQLEXPRESS\MSSQL\Log\mydb_trace.log', default)
order by StartTime;

调整上面返回你感兴趣的信息。

获得所需信息后,您必须关闭跟踪:

第 3 步:禁用跟踪

为此,您需要知道 Trace-ID(例如,通过运行步骤 1 中的“info 语句)。使用此 ID,您需要先停止跟踪,然后才能将其删除:

-- stop the trace
EXEC sp_trace_setstatus @TraceID, 0

-- delete the trace
EXEC sp_trace_setstatus @TraceID, 2
于 2013-07-10T15:44:18.307 回答
3

来自http://expressprofiler.codeplex.com/

ExpressProfiler(又名 SqlExpress Profiler)是一个简单但足够好的替代 SQL Server Profiler 的基本 GUI。

无要求,无需安装。

可用于 SQL Server 2005/2008/2008r2/2012 的 Express 和非 Express 版本(包括 LocalDB)

于 2013-07-13T14:13:30.817 回答
1

就像将服务器设置为 (LocalDB)\v11.0 一样简单

http://expressprofiler.codeplex.com/discussions/456518

于 2014-06-14T04:19:25.460 回答
0

Microsoft SQL Server 2012 Express LocalDB 是一种面向程序开发人员的 SQL Server Express 执行模式。

SQL Server Express 不提供 Sql Profiler。

因此,您不能将 Sql profiler 用于 LocalDB。

但是,您可以通过其他方式。

如何将 SQL Profiler 与 SQL Server Express Edition 一起使用

于 2013-10-16T22:25:39.137 回答