一、背景

每次查需要优化的SQL都需要上外网,通过Profiler,报表或者DMV执行特定sql来查找,来回跑很麻烦,能不能在本地直接监控外网的好性能的SQL呢?方法是有的,我们可以通过把Profiler跟踪转换为T-SQL脚本,在外网做定时任务,就可以定时执行跟踪,然后通过执行特定的脚本将跟踪保存的文件中的数据导出到数据库的指定表中,这样,就可以web后台远程查看这个指定表中的耗性能的SQL了。详细见下面的操作步骤。

二、操作步骤

  1.从SQL SERVER PROFILER按照自己指定的条件创建跟踪

  2.选择文件-导出-编写跟踪对应的脚本-选择对应的版本号,得到跟踪对应的T-SQL脚本

  3.修改最大文件大小,set @maxfilesize = 20

  设置跟踪的时间,set @DateTime = DateAdd(mi, 20, getdate())

  设置文件滚动更新,参数为2

  以年月日作为文件名

  set @FileName = DateName(year,getdate()) + DateName(month, getdate()) + DateName(day,    getdate())   --以日期做文件名

   set @Prefix = N'D:\ClockingProfiler\' + @FileName

  得到的参数放入下面的SQL中,创建跟踪:

  exec @rc = sp_trace_create @TraceID output, 2, @Prefix, @maxfilesize, @Datetime

  修改后得到下面的SQL:

  

  

  

  

  

-- Create a Queue
declare @rc int
declare @TraceID int
declare @maxfilesize bigint
declare @DateTime datetime
declare @FileName nvarchar(20)
declare @Prefix nvarchar(256) set @DateTime = DateAdd(mi, 20, getdate()) --跟踪分钟
set @maxfilesize = 20 -- Please replace the text InsertFileNameHere, with an appropriate
-- filename prefixed by a path, e.g., c:\MyFolder\MyTrace. The .trc extension
-- will be appended to the filename automatically. If you are writing from
-- remote server to local drive, please use UNC path and make sure server has
-- write access to your network share set @FileName = DateName(year,getdate()) + DateName(month, getdate()) + DateName(day, getdate()) --以日期做文件名
set @Prefix = N'D:\ClockingProfiler\' + @FileName select @Prefix --参数表示允许文件滚动更新
exec @rc = sp_trace_create @TraceID output, 2, @Prefix, @maxfilesize, @Datetime
if (@rc != 0) goto error -- Client side File and Table cannot be scripted -- Set the events
declare @on bit
set @on = 1
exec sp_trace_setevent @TraceID, 10, 15, @on
exec sp_trace_setevent @TraceID, 10, 16, @on
exec sp_trace_setevent @TraceID, 10, 1, @on
exec sp_trace_setevent @TraceID, 10, 9, @on
exec sp_trace_setevent @TraceID, 10, 17, @on
exec sp_trace_setevent @TraceID, 10, 2, @on
exec sp_trace_setevent @TraceID, 10, 10, @on
exec sp_trace_setevent @TraceID, 10, 18, @on
exec sp_trace_setevent @TraceID, 10, 11, @on
exec sp_trace_setevent @TraceID, 10, 12, @on
exec sp_trace_setevent @TraceID, 10, 13, @on
exec sp_trace_setevent @TraceID, 10, 6, @on
exec sp_trace_setevent @TraceID, 10, 14, @on
exec sp_trace_setevent @TraceID, 12, 15, @on
exec sp_trace_setevent @TraceID, 12, 16, @on
exec sp_trace_setevent @TraceID, 12, 1, @on
exec sp_trace_setevent @TraceID, 12, 9, @on
exec sp_trace_setevent @TraceID, 12, 17, @on
exec sp_trace_setevent @TraceID, 12, 6, @on
exec sp_trace_setevent @TraceID, 12, 10, @on
exec sp_trace_setevent @TraceID, 12, 14, @on
exec sp_trace_setevent @TraceID, 12, 18, @on
exec sp_trace_setevent @TraceID, 12, 11, @on
exec sp_trace_setevent @TraceID, 12, 12, @on
exec sp_trace_setevent @TraceID, 12, 13, @on -- Set the Filters
declare @intfilter int
declare @bigintfilter bigint exec sp_trace_setfilter @TraceID, 10, 0, 7, N'SQL Server Profiler - 1073afc5-8f3b-4f95-a683-006cd83f9bc2' --设置cpu大于等于ms
set @intfilter = 100
exec sp_trace_setfilter @TraceID, 18, 0, 4, @intfilter -- Set the trace status to start
exec sp_trace_setstatus @TraceID, 1 -- display trace id for future references
select TraceID=@TraceID
goto finish error:
select ErrorCode=@rc finish:
Go

  4.导出得到的跟踪文件到指定的表中,若表不存在,先创建再导入;否则,直接导入。

  

declare @FileName nvarchar(20)
declare @Prefix nvarchar(256)
set @FileName = DateName(year,getdate()) + DateName(month, getdate()) + DateName(day, getdate()) --以日期做文件名
set @Prefix = N'D:\ClockingProfiler\' + @FileName + '.trc' --从跟踪的文件中导入跟踪数据到表中
IF OBJECT_ID(N'DigitalLibDB.dbo.DigitalLibDB_trc', N'U') IS NULL
BEGIN
SELECT * INTO DigitalLibDB_trc
From fn_trace_gettable(@Prefix, default);
END
ELSE
BEGIN
INSERT INTO DigitalLibDB_trc
SELECT * FROM fn_trace_gettable(@Prefix, default);
END

  5.创建定时作业,第一步执行步骤3中的SQL, 执行完成后跳转到第二步,第二步执行步骤4中的SQL,如下图。

  

  

  

  

三、小结

  至此,就可以通过web后台远程查看外网数据库表的耗性能耗io的sql,方便优化。当然,前提是你公司先得有这个web后台。

   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  ~如果您有什么问题,欢迎在下面评论,我们一起讨论,谢谢~               ~

  ~如果您觉得还不错,不妨点下右下方的推荐,有您的鼓励我会继续努力的~

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

SQL SERVER定时任务执行跟踪--供远程查看 [原创]的更多相关文章

  1. SQL Server中关于跟踪(Trace)那点事

    前言 一提到跟踪俩字,很多人想到警匪片中的场景,同样在我们的SQL Server数据库中“跟踪”也是无处不在的,如果我们利用好了跟踪技巧,就可以针对某些特定的场景做定向分析,找出充足的证据来破案. 简 ...

  2. 【转】SQL Server中关于跟踪(Trace)那点事

    前言 一提到跟踪俩字,很多人想到警匪片中的场景,同样在我们的SQL Server数据库中“跟踪”也是无处不在的,如果我们利用好了跟踪技巧,就可以针对某些特定的场景做定向分析,找出充足的证据来破案. 简 ...

  3. SQL Server中关于跟踪(Trace)那点事(转载)

    前言 一提到跟踪俩字,很多人想到警匪片中的场景,同样在我们的SQL Server数据库中“跟踪”也是无处不在的,如果我们利用好了跟踪技巧,就可以针对某些特定的场景做定向分析,找出充足的证据来破案. 简 ...

  4. 【转贴】SQL Server中关于跟踪(Trace)那点事

    SQL Server中关于跟踪(Trace)那点事 https://www.cnblogs.com/zhijianliutang/p/4113911.html 作者很牛B.. 前言 一提到跟踪俩字,很 ...

  5. 了解Sql Server的执行计划

    前一篇总结了Sql Server Profiler,它主要用来监控数据库,并跟踪生成的sql语句.但是只拿到生成的sql语句没有什么用,我们可以利用这些sql语句,然后结合执行计划来分析sql语句的性 ...

  6. 解决SQL Server管理器无法连接远程数据库Error: 1326错误

    解决SQL Server管理器无法连接远程数据库Error: 1326错误 我们在在使用SQL Server时都会遇到使用SQL Server Management Studio无法连接远程数据库实例 ...

  7. 解决SQL Server管理器无法连接远程数据库的问题(转)

    add by zhj: 本文最后那个数据库别名没搞明白,在我的测试中没有建别名,是可以的.远程登陆时,服务器名称: 服务器IP,端口号 (如223.42.155.248,52134 如果是默认端口号1 ...

  8. SQL Server 2008 R2 跟踪标志

    原文:SQL Server 2008 R2 跟踪标志 跟踪标志用于临时设置特定服务器的特征或关闭特定行为.例如,如果启动 SQL Server 的一个实例时设置了跟踪标志 3205,将禁用磁带机的硬件 ...

  9. 未找到或无法访问服务器 请验证实例名称是否正确并且SQL Server 已配置为允许远程连接

    无法连接到sql server 2008服务器 报下错误 其他信息    在与SQL Server建立连接时出现与网络相关的或特定于实例的错误 未找到或无法访问服务器请验证实例名称是否正确并且SQL ...

随机推荐

  1. MyBatis学习系列二——增删改查

    目录 MyBatis学习系列一之环境搭建 MyBatis学习系列二——增删改查 MyBatis学习系列三——结合Spring 数据库的经典操作:增删改查. 在这一章我们主要说明一下简单的查询和增删改, ...

  2. 搭建高性能计算环境(十)、应用软件的安装之Wien2k

    1,首先安装fftw .tar.gz cd fftw- ./configure --prefix=/opt/fftw- --enable-shared --enable-float --enable- ...

  3. POJ C++程序设计 编程题#3 编程作业—多态与虚函数

    编程题 #3 来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 注意: 总时间限制: 1000ms 内存限制: 65536kB 描述 下面的程序输出 ...

  4. POJ C程序设计进阶 编程题#4:寻找平面上的极大点

    编程题#4:寻找平面上的极大点 来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 注意: 总时间限制: 1000ms 内存限制: 65536kB 描 ...

  5. Objective-C基本数据类型、表达式和语句

    一.基本数据类型 1.一般的计算机语言在定义变量的时候,需要提供给两个内容:类型和名字. 比如:int myClassID; 2.在Xcode中,无论你使用的是GCC编译器还是LLVM编译器,如果我们 ...

  6. Silverlight取得Session

    首先Session是运行在服务器上的,而Silverlight运行在客户端.因此在Silverlight中使用SESSION的说法并不准确, 只因大家经常这样搜索才起这个名字. 有两种方法实现Silv ...

  7. sqoop的codegen工具

    一.codegen工具的使用 sqoop codegen --connect jdbc:mysql://localhost:3306/test --username root --password 1 ...

  8. 学习c编程的第三天

    #include<stdio.h> int add(int,int); int main(){ int x=add(1,2); printf("%d",x); retu ...

  9. spark概论,补充

    基本概念 RDD spark最大的亮点是提出RDD(Resilient Distributed Dataset)的概念,也就是可伸缩的分布式数据集合,本身只读,可恢复.spark本身不做物理储存,通过 ...

  10. 一月份实现Adb小程序

    As Brian said: According to a post on xda-developers, you can enable ADB over WiFi from the device w ...