Sql server 2008 r2 SQL Server 2008 R2表访问时间

Sql server 2008 r2 SQL Server 2008 R2表访问时间,sql-server-2008-r2,statistics,Sql Server 2008 R2,Statistics,SQL Server是否维护每个表的读、写、更新时间等统计信息 我们想知道哪些表是ERP应用程序花费时间最多的表,并开始寻找优化这些表的方法。您可以按照以下链接创建SQL Server审核: 好吧,SQL Server不会按表名跟踪这些统计信息。但是你可以看看DMV,看看哪些查询花费的时间最长 SELECT [sql] = SUBSTRING ( st.[text], (s.statement_start_offset/2)+1, (CASE s.statement_end_offs

SQL Server是否维护每个表的读、写、更新时间等统计信息


我们想知道哪些表是ERP应用程序花费时间最多的表,并开始寻找优化这些表的方法。

您可以按照以下链接创建SQL Server审核:


好吧,SQL Server不会按表名跟踪这些统计信息。但是你可以看看DMV,看看哪些查询花费的时间最长

SELECT [sql] = SUBSTRING
(
  st.[text],
  (s.statement_start_offset/2)+1,
  (CASE s.statement_end_offset 
    WHEN -1 THEN DATALENGTH(CONVERT(NVARCHAR(MAX), st.[text]))
  ELSE s.statement_end_offset END
  - s.statement_start_offset)/2
), s.*
FROM sys.dm_exec_query_stats AS s
CROSS APPLY sys.dm_exec_sql_text(s.[sql_handle]) AS st
WHERE s.execution_count > 1
AND st.[dbid] = DB_ID('Your_ERP_Database_Name')
ORDER BY total_worker_time*1.0 / execution_count DESC;
当然,你可以根据你想要的任何指标进行排序,然后快速地查看第一列,看看你是否发现了任何可疑的东西

您还可以查看以确定消耗高持续时间或读取的过程

请记住,这些和其他DMV会因各种事件(包括重新启动、服务重新启动等)而重置。因此,如果您想保留这些指标的运行历史记录,以便进行趋势分析/基准测试/比较,您必须自己对其进行快照,或获得第三方产品(例如)这能帮上忙,还有更多


免责声明:我为SQL Sentry工作。

SQL Server确实会捕获您询问的信息,但它是基于每个索引,而不是每个表-查看sys.dm_db_index_operational_stats和sys.dm_db_index_usage_stats。您必须根据对象id聚合数据以获取表信息。但是,也有一些警告——例如,如果没有使用索引(没有读取和写入),它将不会显示在输出中。这些统计信息在实例重新启动时重置,并且有一个bug导致在重建索引()时在index_usage_stats中重置这些统计信息。而且,DMV的输出之间存在显著差异——请查看Craig Freedman的帖子以了解更多信息()


更大的问题是,你想通过掌握这些信息来解决什么问题?我同意Aaron的观点,从优化的角度来说,找到需要很长时间的查询是一个更好的起点。但是,我想让您知道SQL Server确实有这些信息。

我们使用的是从中激活的sp_
它为我们提供了服务器上当前正在进行的操作以及语句使用的执行计划的快照。

它易于使用且免费。

@Josh gallaher我们不知道SQL Server Audit。谢谢你指出这一点。在不久的将来,我们将考虑在SQL Server上实现这一点。必须通过一些批准,但应该是可以做到的。短期内,我们将根据Aaron建议的命令运行脚本,因为管理层对我们施加了时间限制。再次感谢您的回复谢谢您提供的信息。显然,我们一直在寻找一个我们安装的MS SQL版本中不存在的特性(我们还运行DB2、Oracle、Informix等),我们将按照您的建议编写命令脚本,并查看SQL Sentry PA。感谢您的响应