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

怎么找回原来粘贴的数据库(只需复制粘贴就可搞定数据库备份历史记录或恢复特定的查询)(1)

图1 SQL Complete中的执行历史

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

点击下方“了解更多”点击下载dbForge Studio for SQL Server,并通过30天免费试用版自行检查此功能!

,