[置頂]SQL SERVER定時任務執行跟蹤--供遠程查看 [原創]

一、背景

每次查需要優化的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後臺。

 

 

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

  ~如果您有什麼問題,歡迎在下面評論,我們一起討論,謝謝~               ~

  ~如果您覺得還不錯,不妨點下右下方的推薦,有您的鼓勵我會繼續努力的~

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章