,歡迎訪問網(wǎng)頁設(shè)計(jì)愛好者web開發(fā)。sql server 2000系統(tǒng)支持的跟蹤函數(shù)(二)
baya pavliashvili and kevin kline
http://msdn.microsoft.com/library/default.asp?url=/nhp/default.asp?contentid=28000409
 
fn_trace_getfilterinfo 和 fn_trace_geteventinfo
這些函數(shù)可以用來檢索一個(gè)跟蹤的元數(shù)據(jù)(這些函數(shù)的輸出的含義是模糊的,如果你不熟悉跟蹤的事件標(biāo)志符和過慮的列的標(biāo)志符.你可以看看sql server的在線幫助 “sp_trace_setevent”)
這2個(gè)函數(shù)都是將跟蹤標(biāo)志符作為唯一的參數(shù). fn_trace_getfilterinfo返回指定跟蹤的過慮后的信息.舉例:假設(shè)我們限制跟pubs數(shù)據(jù)庫,因?yàn)槲覀冊(cè)噲D解決該數(shù)據(jù)庫中一個(gè)運(yùn)行很長時(shí)間的查詢的故障,我們可以如下運(yùn)行該函數(shù):
select * from :: fn_trace_getfilterinfo(1) 
--results: 
columnid   logical_operator comparison_operator value    
---------- ---------------- ------------------- ---------
35                0         6                   pubs
這個(gè)輸出告訴我們,我們指定的跟蹤過慮是在列為35(數(shù)據(jù)庫名)和沒有使用邏輯操作符("and" or "or") 因?yàn)橹挥幸粋€(gè)條件.比較操作符是”liee”(=6)過濾的值是”pubs”.
根據(jù)你應(yīng)用過慮的類型,你可以改變比較操作符.在許多案例中,你可以使用 like或 not like.而且,如果你限制跟蹤指定的處理或指定的數(shù)據(jù)庫,那么你可以指定"=", ">", "< >", "<", "> =", or "< ="等邏輯操作符.
備注:如果你通過sql server profiler工具建立一個(gè)跟蹤,這個(gè)跟蹤會(huì)自動(dòng)增加一個(gè)過濾器,不包括通過profiler自己產(chǎn)生給sql server的跟蹤過濾語句.如果你喜歡了解profiler工具,只要簡單的將過濾器設(shè)置為off.
fn_tracegeteventinfo 可以返回一個(gè)跟蹤的事件信息,有很多的跟蹤事件你可以指定.你指定的事件越多,就會(huì)有更多的信息被整理,因此要仔細(xì).我勸告大家要了解每一個(gè)事件的含義并且選擇那些和你解決問題密切相關(guān)的事件. fn_tracegeteventinfo 是一個(gè)非常有用的函數(shù),當(dāng)你因?yàn)椴煌哪康囊M運(yùn)行多個(gè)跟蹤. 
要獲得我們建立的跟蹤事件的標(biāo)志符,我們可以如下運(yùn)行fn_tracegeteventinfo函數(shù):
select distinct eventid 
from :: fn_trace_geteventinfo(1)
--results: 
eventid     
----------- 
12
37
40
41
42
43
這個(gè)結(jié)果告訴我們,這個(gè)跟蹤在檢測以下事件:
·                       sql: batchcompleted—event id of 12 
·                       sp: recompile—event id of 37 
·                       sql: statementstarting—event id of 40 
·                       sql: statementcompleted—event id of 41 
·                       sp: starting—event id of 42 
·                       sp: completed—event id of 43 
同樣的,我們可以運(yùn)行相同的函數(shù),進(jìn)行很小的改動(dòng)就可以獲得一個(gè)跟蹤的所有數(shù)據(jù)列
select distinct columnid from :: fn_trace_geteventinfo(1)
--results: 
columnid    
----------- 
1
10
11
12
13
14
16
17
18
這里我們收集的典型數(shù)據(jù)用來性能調(diào)整,包括一個(gè)查詢的:正文數(shù)據(jù),程序名,登陸名,spid,持續(xù)時(shí)間,開始結(jié)束時(shí)間,讀取,寫入和cpu占用.
使用系統(tǒng)提供的udfs
現(xiàn)在你指定一些系統(tǒng)提供的udfs,你可以通過這些系統(tǒng)函數(shù)建立自己的自定義函數(shù).其中有一個(gè)主要的限制是自定義函數(shù)無法調(diào)用存儲(chǔ)過程.但是自定義函數(shù)可以調(diào)用其他的自定義函數(shù).下面的udf初始化fn_trace_geteventinfo函數(shù),使結(jié)果更方便閱讀:
create function dbo.fn_gettracecolumns (@trace_id int)
returns @tracecolumns table (
  column_id int, 
  column_name varchar(155)
)
as
begin
insert @tracecolumns (
column_id)
select distinct columnid from :: 
fn_trace_geteventinfo(@trace_id)
update @tracecolumns 
set column_name = 
  case column_id 
  when 1 then 'textdata' 
  when 3 then 'databaseid'  
  when 4 then 'transactionid' 
  when 6 then 'ntusername' 
  -- similar statements omitted here - see source 
  else 'other'
  end
return
end
this function can be executed as follows:
select * from dbo.fn_gettracecolumns(3)
概要
在這篇文章中,我介紹了sql server 2000提供的非常有用的系統(tǒng)自定義函數(shù),希望大家喜歡并且研究其他的系統(tǒng)提供的自定義函數(shù).
下載: traceudfs.sql
參考資源:
·                       284790 inf: how to create a sql server 2000 trace 
·                       283786 inf: how to monitor sql server 2000 traces 
·                       270599 bug: fn_trace_gettable function cannot read rollover files 273972 generated by sql 
·                       profilerhow to: programmatically load trace files into tables 
·                       268591 prb: odbc tracing to sql.log can slow sql server or consume all disk space 
·                       307786 inf: tracing to network drive may reduce sql server throughput 
·                       286239 bug: replay tool uses loginname column for setuser instead of databaseusername column 
·                       andrew novick's "find out what they're doing with fn_get_sql"—www.databasejournal.com/features/mssql/article.php/2189761