彩票走势图

数据库操作教程:如何检查SQL Server查询历史记录

翻译|使用教程|编辑:鲍佳佳|2020-10-20 11:18:41.040|阅读 781 次

概述:查询历史记录中存储的数据对于任何DBA来说都是最有价值的。在许多情况下,必须追溯SQL Server查询历史记录。例如,如果您的SQL Server发生崩溃,则可能需要调查特定的工作案例,检查备份历史记录或恢复特定的查询。

# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>

相关链接:

dbForge Studio for SQL Server为有效的探索、分析SQL Server数据库中的大型数据集提供全面的解决方案,并设计各种报表以帮助作出合理的决策。

点击下载dbForge Studio for SQL Server最新试用版

查询历史记录中存储的数据对于任何DBA来说都是最有价值的。在许多情况下,必须追溯SQL Server查询历史记录。例如,如果您的SQL Server发生崩溃,则可能需要调查特定的工作案例,检查备份历史记录或恢复特定的查询。

幸运的是,对于任何故障或例行分析任务,都会显示完整的SQL Server查询历史记录,并且存在使用这些数据的用户友好型解决方案。

当需要在特定时间段内查看有关SSMS中已执行的SQL语句的数据时,可以使用以下几个选项:

  1. 查询通过系统表示形式(sys.dm_exec_query_stats,sys.dm_exec_sql_text和sys.dm_exec_query_plan)保存在缓存中。
  2. 使用SQL Server Profiler
  3. 使用扩展事件
  4. 从2016版本开始使用Query Store
  5. 在SSMS中使用SQL Complete(SQL Complete \ Execution History)

例如,选项#1允许您使用以下脚本输出100个执行时间最长(包括所有延迟)的查询:

with s as (
select top(100)
creation_time,
last_execution_time,
execution_count,
total_worker_time/1000 as CPU,
convert(money, (total_worker_time))/(execution_count*1000)as [AvgCPUTime],
qs.total_elapsed_time/1000 as TotDuration,
convert(money, (qs.total_elapsed_time))/(execution_count*1000)as [AvgDur],
total_logical_reads as [Reads],
total_logical_writes as [Writes],
total_logical_reads+total_logical_writes as [AggIO],
convert(money, (total_logical_reads+total_logical_writes)/(execution_count + 0.0)) as [AvgIO],
[sql_handle],
plan_handle,
statement_start_offset,
statement_end_offset,
plan_generation_num,
total_physical_reads,
convert(money, total_physical_reads/(execution_count + 0.0)) as [AvgIOPhysicalReads],
convert(money, total_logical_reads/(execution_count + 0.0)) as [AvgIOLogicalReads],
convert(money, total_logical_writes/(execution_count + 0.0)) as [AvgIOLogicalWrites],
query_hash,
query_plan_hash,
total_rows,
convert(money, total_rows/(execution_count + 0.0)) as [AvgRows],
total_dop,
convert(money, total_dop/(execution_count + 0.0)) as [AvgDop],
total_grant_kb,
convert(money, total_grant_kb/(execution_count + 0.0)) as [AvgGrantKb],
total_used_grant_kb,
convert(money, total_used_grant_kb/(execution_count + 0.0)) as [AvgUsedGrantKb],
total_ideal_grant_kb,
convert(money, total_ideal_grant_kb/(execution_count + 0.0)) as [AvgIdealGrantKb],
total_reserved_threads,
convert(money, total_reserved_threads/(execution_count + 0.0)) as [AvgReservedThreads],
total_used_threads,
convert(money, total_used_threads/(execution_count + 0.0)) as [AvgUsedThreads]
from sys.dm_exec_query_stats as qs with(readuncommitted)
order by convert(money, (qs.total_elapsed_time))/(execution_count*1000) desc
)
select
s.creation_time,
s.last_execution_time,
s.execution_count,
s.CPU,
s.[AvgCPUTime],
s.TotDuration,
s.[AvgDur],
s.[AvgIOLogicalReads],
s.[AvgIOLogicalWrites],
s.[AggIO],
s.[AvgIO],
s.[AvgIOPhysicalReads],
s.plan_generation_num,
s.[AvgRows],
s.[AvgDop],
s.[AvgGrantKb],
s.[AvgUsedGrantKb],
s.[AvgIdealGrantKb],
s.[AvgReservedThreads],
s.[AvgUsedThreads],
--st.text as query_text,
case
when sql_handle IS NULL then ' '
else(substring(st.text,(s.statement_start_offset+2)/2,(
case
when s.statement_end_offset =-1 then len(convert(nvarchar(MAX),st.text))*2      
else s.statement_end_offset    
end - s.statement_start_offset)/2  ))
end as query_text,
db_name(st.dbid) as database_name,
object_schema_name(st.objectid, st.dbid)+'.'+object_name(st.objectid, st.dbid) as [object_name],
sp.[query_plan],
s.[sql_handle],
s.plan_handle,
s.query_hash,
s.query_plan_hash
from s
cross apply sys.dm_exec_sql_text(s.[sql_handle]) as st
cross apply sys.dm_exec_query_plan(s.[plan_handle]) as sp

至于其他选项,值得强调的是在SSMS中使用SQL Complete的可能性。

SQL Complete在指定的时间段内将有关已执行的SQL语句的主要信息存储在SSMS中。使用此SSMS加载项,您可以查看,编辑和搜索数据库中运行的T-SQL查询。便捷的界面使这项工作更加易于管理。

特别是,请注意SQL Complete提供的以下功能:

  • 检查SQL语句的执行-您可以定义它们是成功还是失败
  • 查看特定时期的查询历史记录中的数据
  • 为多个条件对数据进行排序
  • 搜索特定的语句-使处理大量数据的分析人员非常方便

SQL Complete解决方案存储在磁盘上的文件中或在使用连接字符串指定的数据库中的表中运行的每个语句。存储周期可以是任意的—您可以自己在SQL Complete选项中设置它。因此,如果您正在编写脚本,您将获得与所做的每一个更改相关的完整历史记录。但是请记住,SQL Complete只为SQL Complete与之集成的SSMS执行的查询存储历史记录。
SQL语句保存在写入文件和/或数据库的列表中。该解决方案可以自动删除旧的SQL查询历史记录日志。此外,您还可以进行监视和执行任何特定查询,同时接收其他有价值的信息进行研究和分析。

图1 SQL Complete中的执行历史

您可以使用任何资源来按用户检查MS SQL Server查询历史记录。可以轻松方便地为您提供各种执行任务的工具。

点击下载dbForge Studio for SQL Server,并通过30天免费试用版自行检查此功能!慧都现隆重推出“软件国产化服务”活动,现dbForge Studio SQL Sever直降3000,在线订购正版授权最低只要1710元!


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@cahobeh.cn

文章转载自:

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP