【问题标题】:rows processed statistics information in sql server 2005行在 sql server 2005 中处理的统计信息
【发布时间】:2011-05-06 14:44:35
【问题描述】:

在 Oracle 中,有一个名为 V$SQLAREA 的视图列出了共享 SQL 区域的统计信息,并且每个 SQL 字符串包含一行。它提供有关内存中、已解析并准备执行的 SQL 语句的统计信息。

有一列 -ROWS_PROCESSED 将代表此 SQL 语句处理的总行数相加。

我正在寻找 SQLSERVER 2005 中的附属信息。

我查看了一些 DMV(如 sys.dm_exec_query_stats),但没有找到任何相关内容。

@@ROWCOUNT 对我没有用,因为我需要增量统计信息,这些信息将汇总数据库中顶级 cpu/io/执行消耗查询的 rows_processed。

我将不胜感激有关该主题的任何帮助。

提前致谢,

罗尼。


我看到当我查询以下查询时,我收到了 XML 格式的查询计划。

在 XML 计划代码中,有一个“EstimateRows”部分,其数字与查询的估计行数相关。

我正在考虑将 query_plan 列替换为仅检索上述信息的选项(除非我会在某些系统视图/表中找到它)。

在哪里可以找到查询的实际行数?它存储在哪里?

SELECT 
       case when sql_handle IS NULL
           then ' '
           else ( substring(st.text,(statement_start_offset+2)/2,       
   (case when qs.statement_end_offset = -1         
   then len(convert(nvarchar(MAX),st.text))*2      
   else statement_end_offset    
   end - statement_start_offset) /2  ) )
        end as query_text , 
    query_plan,
 FROM sys.dm_exec_query_stats qs 
CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle)
cross apply sys.dm_exec_sql_text(sql_handle) st;

【问题讨论】:

  • 我找不到想要这些信息的充分理由?
  • 查看特定行是否返回大量行,然后我们可以分析应用查询 - 可能 WHERE 子句太宽泛了..
  • 我们在 Oracle 分析中经常使用此信息(我们的应用程序支持 Oracle 和 SQL SERVER),我们想知道系统视图/表中是否有等效信息(统计信息)。跨度>

标签: sql sql-server-2005 statistics dmv


【解决方案1】:

据我所知,没有直接的等价物,尤其是对于行数。相关的 dmvs 跟踪 IO 成本,用于显示缺失的索引、最昂贵的查询等

这将为您提供当前会话的每个 SQL 语句的统计信息。 YMMV:我只是根据我周围的脚本把它放在一起。

SELECT 
    *
FROM 
    sys.dm_exec_query_stats  QS
    CROSS APPLY 
    sys.dm_exec_sql_text(sql_handle) ST

我的脚本基于我mentioned here的链接

【讨论】:

  • 感谢您的及时回复,但是,我已经有一个常规查询可以检索您提到的统计信息。
【解决方案2】:

您可以使用系统变量@@rowcount 了解最后一条语句影响的记录数。

【讨论】:

  • 感谢您的回复,但您没有阅读我的问题吗? @@ROWCOUNT 对我没有用,因为我想要增量统计信息,这些信息将汇总数据库中顶级 cpu/io/执行消耗查询的 rows_processed。
猜你喜欢
  • 2011-01-15
  • 2010-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-24
相关资源
最近更新 更多