SQL Server Profiler - 如何过滤跟踪以仅显示来自一个数据库的事件?

428

如何将SQL Server Profiler跟踪限制在特定数据库中?我无法看到如何过滤跟踪以不显示连接的实例上所有数据库的事件。

6个回答

641

在Trace属性 > 事件选择选项卡中 > 选择显示所有列。现在在列筛选器下,您应该看到数据库名称。将数据库名称输入到“Like”部分,然后您只能看到该数据库的跟踪信息。


11
我不知道这是否是常见问题,但当我运行分析器时,我追踪的许多值的数据库名称为空。我必须使用DatabaseID列,并通过查询master数据库中的sysdatabases表找到正确的值来输入。 - Jim Birchall
41
要查找数据库ID:选择[name],[dbid]从[master]。[dbo]。[sysdatabases]排序按[name] ORDER BY [name] - Simon
1
还取决于您选择的模板,如果有的话。+1 - beaudetious
4
你必须在开始跟踪之前完成它。如果在跟踪之后完成,该字段将无法编辑! - Aleksei Poliakov
2
在运行之前不要忘记停止跟踪或启动它。 - Fery
显示剩余3条评论

47

在SQL 2005中,您首先需要在跟踪中显示“数据库名称”列。最简单的方法是选择具有该列的Tuning模板。

假设您选择了Tuning模板,要过滤:

  • 点击“事件选择”选项卡
  • 点击“列筛选器”按钮
  • 勾选“显示所有列(向下)”
  • 选择“DatabaseName”,点击右侧窗格中“Like”旁边的加号,并输入您的数据库名称。

我总是将跟踪保存到表中,这样我就可以在事后对跟踪数据进行LIKE查询。


13
在Trace Properties中转到事件选择选项卡。然后单击“显示所有列”单选按钮。之后单击“列筛选器”按钮。 输入图像描述 现在您可以看到数据库名称属性并单击它。展开类似框并插入您的DB名称,然后单击确定,现在您可以运行分析器。 输入图像描述

9

通过实验我能够观察到以下情况:

当使用SQL Profiler 2005或者SQL Profiler 2000与存储在SQLServer 2000中的数据库进行操作时,出现了上述问题。但是,当使用SQL Profiler 2005与SQLServer 2005数据库进行操作时,它完美地工作!

总之,该问题似乎普遍存在于SQLServer 2000并且已在SQLServer 2005中得到纠正。

解决SQLServer 2000的问题的方法如下(由wearejimbo解释):

  1. Identify the DatabaseID of the database you want to filter by querying the sysdatabases table as below

    SELECT * 
    FROM master..sysdatabases 
    WHERE name like '%your_db_name%'   -- Remove this line to see all databases
    ORDER BY dbid
    
  2. Use the DatabaseID Filter (instead of DatabaseName) in the New Trace window of SQL Profiler 2000


5
在跟踪属性中,单击顶部的事件选择选项卡旁边的常规。然后在右下角单击列筛选器...。您可以选择要筛选的内容,例如TextDataDatabaseName
展开Like节点并使用百分号%输入您的筛选条件,例如%MyDatabaseName%%TextDataToFilter%。没有%%符号,筛选器将无法正常工作。
此外,请务必选中复选框排除不包含值的行。如果找不到要筛选的字段(例如DatabaseName),请转到常规选项卡并更改您的模板,空白的模板应包含所有字段。

3
创建一个新模板并检查DB名称。将该模板用于您的跟踪文件。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接