SQL Server Profiler - 如何过滤跟踪以仅显示来自一个数据库的事件?
Posted
技术标签:
【中文标题】SQL Server Profiler - 如何过滤跟踪以仅显示来自一个数据库的事件?【英文标题】:SQL Server Profiler - How to filter trace to only display events from one database? 【发布时间】:2010-09-21 07:48:51 【问题描述】:如何将 SQL Server Profiler 跟踪限制到特定数据库?我看不到如何过滤跟踪以看不到我连接到的实例上所有数据库的事件。
【问题讨论】:
【参考方案1】:在跟踪属性 > 事件选择选项卡下 > 选择显示所有列。现在在列过滤器下,您应该会看到数据库名称。输入 Like 部分的数据库名称,您应该只会看到该数据库的跟踪。
【讨论】:
我不知道这是否是一个常见问题,但是当我运行分析器时,我跟踪的许多值的数据库名称都是空白的。我必须使用 DatabaseID 列并通过查询主数据库中的 sysdatabases 表找出要输入的正确值 要查找 DatabaseID:SELECT [name],[dbid] FROM [master].[dbo].[sysdatabases] ORDER BY [name] 还取决于您选择的模板(如果有)。 +1 你必须这样做before
开始跟踪。如果您在之后执行此操作 - 该字段将无法编辑!
在运行之前不要忘记停止或启动跟踪。【参考方案2】:
在 SQL 2005 中,您首先需要在跟踪中显示“数据库名称”列。最简单的做法是选择已经添加了该列的 Tuning 模板。
假设您选择了 Tuning 模板进行过滤:
点击“事件选择”标签 点击“列过滤器”按钮 选中显示所有列(右侧向下) 选择“DatabaseName”,单击右侧窗格中 Like 旁边的加号,然后输入您的数据库名称。我也总是将跟踪保存到一个表中,这样我就可以在事后对跟踪数据进行 LIKE 查询。
【讨论】:
【参考方案3】:通过实验我能够观察到这一点:
当 SQL Profiler 2005 或 SQL Profiler 2000 与驻留在 SQLServer 2000 中的数据库一起使用时 - 提到的问题仍然存在,但当 SQL Profiler 2005 与 SQLServer 2005 数据库一起使用时,它可以完美运行!
总之,这个问题似乎在 SQLServer 2000 中很普遍,并在 SQLServer 2005 中得到纠正。
处理 SQLServer 2000 时问题的解决方案是(如 wearejimbo 所述)
通过查询下面的 sysdatabases 表来确定要过滤的数据库的 DatabaseID
SELECT *
FROM master..sysdatabases
WHERE name like '%your_db_name%' -- Remove this line to see all databases
ORDER BY dbid
在 SQL Profiler 2000 的“新跟踪”窗口中使用 DatabaseID 过滤器(而不是 DatabaseName)
【讨论】:
【参考方案4】:创建一个新模板并检查 DBname。为您的跟踪文件使用该模板。
【讨论】:
【参考方案5】:在跟踪属性中,单击顶部常规旁边的事件选择选项卡。然后点击右下角的Column Filters...。然后,您可以选择要过滤的内容,例如 TextData
或 DatabaseName
。
展开 Like 节点并输入带有百分比%
符号的过滤器,例如%MyDatabaseName%
或%TextDataToFilter%
。如果没有 %%
标志,过滤器将无法工作。
另外,请确保选中复选框排除不包含值的行'如果找不到要过滤的字段,例如DatabaseName
,请转到常规 选项卡并更改您的 模板,空白的应包含所有字段。
【讨论】:
以上是关于SQL Server Profiler - 如何过滤跟踪以仅显示来自一个数据库的事件?的主要内容,如果未能解决你的问题,请参考以下文章
SQL Server2012如何打开2016的profiler文件
SQL Server Profiler:如何更详细地检查/了解审核注销事件的持续时间?