日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
擦亮自己的眼睛去看SQLServer之說說跟蹤

這幾天看了下范偉主演的<<跟蹤孔令學(xué)>>,再一次欣賞了范偉精湛的演技特別是那種憨厚的表情??赐旰?,讓我想起了SQLServer中的跟蹤與反跟蹤技術(shù)。覺得這部分內(nèi)容值得寫一篇文章和大家分享分享。了解SQLServer跟蹤技術(shù)能讓我們比較簡單的在運(yùn)行時實時的獲取SQLServer的內(nèi)部運(yùn)作。這種獲取方式比我們?nèi)ナ褂酶櫂?biāo)志、動態(tài)管理視圖等來的方便簡單的多。說到跟蹤,很多人會想起SQL Profiler。SQL Profiler僅僅是一個GUI,SQL Trace才是本質(zhì)。SQL Trace是構(gòu)建服務(wù)器跟蹤和Profiler的基礎(chǔ)。如果你了解到這點(diǎn),那你就會毫不猶豫的在生產(chǎn)環(huán)境使用服務(wù)器跟蹤。下面從五個方面介紹SQL Trace,一、SQL Trace跟蹤的代價 二、SQL Trace架構(gòu) 三、具體跟蹤例子 四、如何反跟蹤 五、SQL Trace跟蹤原則

成都創(chuàng)新互聯(lián)服務(wù)項目包括北鎮(zhèn)網(wǎng)站建設(shè)、北鎮(zhèn)網(wǎng)站制作、北鎮(zhèn)網(wǎng)頁制作以及北鎮(zhèn)網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,北鎮(zhèn)網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到北鎮(zhèn)省份的部分城市,未來相信會繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!

一、SQL Trace跟蹤的代價

必須指出,跟蹤會影響系統(tǒng)的性能這是不可完全避免的。當(dāng)然可以通過一些方式我們能將這種代價降到最小。很多人往往以跟蹤會影響現(xiàn)網(wǎng)性能為理由而拒絕跟蹤。其實這是不對的,還有一些人平時也做跟蹤,不過他們喜歡在系統(tǒng)不繁忙的時候跟蹤。這樣的做法都是有問題的。前者往往會出現(xiàn)突然間你的系統(tǒng)出現(xiàn)問題,而你完全沒有任何預(yù)兆,后者往往會出現(xiàn)你錯過捕獲問題的***時機(jī)這樣在不繁忙時的跟蹤等于白費(fèi)。 那什么時候?qū)ιa(chǎn)環(huán)境進(jìn)行跟蹤呢?正確的做法應(yīng)該是每時每刻的收集系統(tǒng)信息,為對系統(tǒng)性能整體分析提供信息來源。

二、SQL Trace架構(gòu)

如果你想理解SQL Trace,那***的方式莫過于用你自己的系統(tǒng)去對比。一般情況下我們都會在系統(tǒng)中記錄一些日志,根據(jù)我們關(guān)注的點(diǎn)來區(qū)分記錄日志的級別。典型的日志組件就是

Log4net之類的日志組件。這樣我們就能夠通過日志來分析系統(tǒng)的運(yùn)行情況。知道這點(diǎn),那理解SQL Trace就容易了。在SQLServer中,跟蹤信息由一系列的事件組成。既然有事件,那誰觸發(fā)事件呢。數(shù)據(jù)庫引擎中的各個組件都是事件的生產(chǎn)者。下面看看SQL Trace的架構(gòu)圖:

如上圖所示:整個SQL Trace架構(gòu)有三個部分組成,數(shù)據(jù)庫引擎、跟蹤控制器、跟蹤會話。數(shù)據(jù)庫引擎是事件生成者,跟蹤控制器負(fù)責(zé)事件的分發(fā)以及事件的過濾,跟蹤會話負(fù)責(zé)對事件的列過濾以及跟蹤事件的終點(diǎn)。下面簡單描述下整個過程,跟蹤控制器通過一個位圖讓數(shù)據(jù)庫引擎的其他組件知道跟蹤器請求了哪些事件,這個位圖是所有跟蹤的事件集合。一旦數(shù)據(jù)庫引擎生成一個事件后,就把事件信息保存在跟蹤控制器中的隊列中。然后跟蹤控制器把完整的事件信息傳遞給每個要求這個事件的跟蹤會話。跟蹤會話接收到自己關(guān)注的事件信息時,先經(jīng)過過濾器(主要是過濾掉不感興趣的列與行),過濾掉后發(fā)送給跟蹤的I/O提供者。這里面的隊列只是起緩沖作用。I/O提供者有很多種,比如Profiler、服務(wù)器跟蹤、SQLServer自己的跟蹤。

三、具體跟蹤例子

這里的例子不想用SQL Profiler進(jìn)行舉例,因為我覺得它僅僅是方便我們跟蹤而已。但是它在跟蹤時既會把輸出寫入目標(biāo)文件或者表(然后選擇保存文件中保存表)還有把跟蹤信息寫入運(yùn)行Profiler的客戶端。把跟蹤信息寫入到運(yùn)行Profiler客戶端,這個比直接寫入文件往往會慢。大家可以想想為什么?不過倒是可以用Profiler圖形化方式定義跟蹤,然后導(dǎo)出生成的跟蹤SQL。具體如下:

一旦你開啟了跟蹤后,你可以通過:

select * from sys.traces 查看到你正在跟蹤的會話。

四、如何反跟蹤

有時候,我們不希望自己的sql被人跟蹤。比如,我們不希望別人能看到我們程序中寫的sql。方法有很多,這里介紹一種簡單的方法。思路就是:強(qiáng)迫SQLServer停止跟蹤。具體存儲過程如下:

 
 
 
 
  1. /*+--------------------------------------------------------------------------------------------------------------------------------------- 
  2. *    名稱:        [DBO].[Performance_Trace_StopAll] 
  3. *    功能:        防止反跟蹤 
  4. *    作者:        junling 
  5. *    創(chuàng)建時間:    2011-02-09 
  6. *    項目名稱:    XXXX 
  7. * ----------------------------------------------------------------------------------------------------------------------------------------- 
  8. *    歷史記錄 
  9. *    編號    日期        作者    備注 
  10. *    1.0    2011-02-09    junling    創(chuàng)建 
  11. ------------------------------------------------------------------------------------------------------------------------------------------+*/ 
  12. create  proc [dbo].[Performance_Trace_StopAll] 
  13.  
  14. AS 
  15.     declare traceCursor cursor for select id from sys.traces where id <> 1 
  16.     open traceCursor 
  17.     declare @curid int 
  18.     fetch next from traceCursor into @curid 
  19.     while(@@fetch_status=0) 
  20.       begin          
  21.  
  22.           exec  sp_trace_setstatus @curid,0 
  23.           exec  sp_trace_setstatus @curid,2 
  24.           fetch next from traceCursor into @curid 
  25.       end 
  26.     close traceCursor 
  27.     deallocate traceCursor 

具體什么時候調(diào)用,就是看你具體的情況了。

五、SQL Trace跟蹤原則

這里主要列出我們在跟蹤時應(yīng)該注意的事項,或者說按照下面的原則會降低跟蹤對生產(chǎn)環(huán)境的影響。

1、不要使用Profiler GUI跟蹤,如果使用了盡量不要運(yùn)行在跟蹤的SQLServer所在服務(wù)器;

2、不要把跟蹤數(shù)據(jù)直接寫入表,我們可以采用系統(tǒng)不是很繁忙時才把跟蹤信息導(dǎo)入表中(除非你想立刻分析數(shù)據(jù));

3、跟蹤會有大量的I/O操作,盡量把跟蹤文件單獨(dú)放在物理磁盤中;

4、只選擇自己感興趣的事件,多選一個事件都會帶來開銷(除非你多選的事件不發(fā)生,那樣也就沒有選擇的必要;

5、過濾你的跟蹤信息,比如你只對某數(shù)據(jù)庫感興趣,你只對某些列感興趣(注意這里僅僅是減少了架構(gòu)圖中的I/O提供者的開銷,想想為什么);

6、像XXXXXXStarting之類的事件往往沒有太大意義;

7、要注意你跟蹤的sql中是否使用了標(biāo)量函數(shù),對這些sql的跟蹤會嚴(yán)重影響性能,每個標(biāo)量函數(shù)每處理一行都會觸發(fā)事件(如果表很大,這是件很恐怖的事件);

8、只給需要跟蹤的用戶指定跟蹤權(quán)限。

六、結(jié)尾

今天主要和大家討論了SQLServer的跟蹤方面的知識,其中的知識還有很多值得我們?nèi)ネ诰?,比如事件的分類、SQL Trace目錄視圖的每個列的意義、如何把trc格式文件導(dǎo)入表中分析統(tǒng)計、跟蹤的安全性問題、跟蹤的性能優(yōu)化等等。 在這些方面多花點(diǎn)時間,你會到SQLServer有更好的理解的。

今天分析就到此結(jié)束,文中如有描述不當(dāng)?shù)牡胤?,歡迎指出。共同進(jìn)步才是硬道理。

原文鏈接:http://www.cnblogs.com/yueyue_jwfm/archive/2011/07/09/2101853.html


當(dāng)前標(biāo)題:擦亮自己的眼睛去看SQLServer之說說跟蹤
鏈接地址:http://www.5511xx.com/article/coshhjp.html