【问题标题】:How can I know how many queries are fired on my SQL Server from a specific server?我如何知道从特定服务器在我的 SQL Server 上触发了多少查询?
【发布时间】:2013-10-28 05:16:04
【问题描述】:

背景:
我在一家有两个部门使用同一个主数据库的公司工作。一个部门的申请是由我的团队开发的,而另一个部门的申请是外包的。此应用程序是基于 Windows 的应用程序,多个用户同时在系统上工作。

由于主数据库上的极端负载,现在发生了很多冲突,我们没有足够的统计数据来辩论。

现在我想知道,有多少查询是从其他应用程序中触发的。他们的源代码对我们不可用。

我可以设置任何简单的工具或日志记录工具,然后它开始计算从该服务器发出的查询数。

谢谢。

P.S:我知道存在一个有点类似的问题,但它是针对 mysql 的,无助于解决我的问题。 "How can i know how many queries are fired in my database?"

【问题讨论】:

  • 查看 newrelic。他们有一些非常糟糕的 SQL 监控功能,根据您的设置,这些功能可能非常有用。他们也在做各种促销活动。您可以获得免费试用和 T 恤或 USB 充电器。
  • SQL Server 已经存储了很多相关的统计信息。例如,活动监视器显示活动查询和执行它们的客户端。 DMV 可以返回相同的信息以及更多信息。 SQL Server 的内置报告可以更深入。最后,“管理数据仓库”可以收集所有这些信息,用于历史监控、查询。我们在谈论什么版本?

标签: c# sql-server sql-server-2008 sql-server-2005


【解决方案1】:
  1. 您可以简单地使用 SQL Server Profiler 来获取此类信息。长时间运行它是不切实际的,但是如果您知道问题何时发生,则可以通过这种方式对其进行监视。您可以保存输出并稍后进行分析。

  2. 您可以使用一些市售工具来记录数据库中的所有活动。其中一些非常好,可以让您详细分析信息。

【讨论】:

  • 是的。但是您可以过滤,例如仅查询一定数量的读取或持续时间以捕获那些讨厌的。
【解决方案2】:

以下查询将为您提供在服务器上触发的所有查询,并在其上触发特定的数据库名称......

**********************************************************
select db_name(sql_text.dbid) as [Database],
case db_id()
when sql_text.dbid then object_name(sql_text.objectid)
else cast(sql_text.objectid as sysname) end as [Object],
sql_text.text as [AllTSQL],
dbo.GetTSQLFragment(
sql_text.text,
statement_start_offset,
statement_end_offset) as [FragmentTSQL]
from sys.dm_exec_query_stats stats
cross apply sys.dm_exec_sql_text(sql_handle) as sql_text
***************************************************************

如果可行,请告知

【讨论】:

  • 我也在谷歌搜索并找到了这个查询,但不幸的是它给了我一个错误。
  • “找不到列“dbo”或用户定义的函数或聚合“dbo.Assets”,或者名称不明确。”我收到此错误。我的数据库中有一个“资产”表。
  • 我将上述查询中的代码“dbo.GetTSQLFragment”替换为“dbo.Assets”。
  • 检查正确的语法。不要只是盲目地复制粘贴。
  • 我可以知道您在哪个版本的 SQL 上尝试过这个查询吗?它是企业版吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-22
  • 1970-01-01
相关资源
最近更新 更多