成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

SQL Server監控系列之調優排錯

數據庫 SQL Server
今天我們將介紹的是SQL Server監控系列之調優排錯,SQL Server內部運行的可見性是的查詢調整、優化和綜合排查成為可能!這一節主要和大家說說SQL Server跟蹤(SQL Server Profile)的一些監控方式和途徑。

使用場景

記得某次給一家公司調優的時候,負責人發給我一堆業務的T-SQL腳本,我面對海量腳本還是從容,雖然不了解內部復雜的業務,但是我們得專注問題的關鍵 “慢”,我們根據查詢的“慢”把他們篩選出來,一一調式優化,不就迅速解決問題嗎?三天后,負責人含淚握著我的手,哥們辛苦了,查詢響應得到了質的改善。

跟蹤提供者

SQL Server 為我們兩者提供跟蹤的方式:一種是一個物理文件(可保存在本機或者UNC網絡路徑),一種是行集。對于后者大家應該比較熟悉

image

這個工具在 SSMS 的 工具 –> SQL Profile

AB490696-8C76-4819-A08D-1D14E3E828BA

詳細的我暫時不介紹,先說說兩者的區別和類同點 DIFFAndSame(行集,文件提供者)。

兩者都是用類似Buffer來保存當前的事件數據,很明顯是為了減少IO的壓力,這樣可以不阻塞和盡量不遺漏 事件數據,當Buffer 到達一定量時候可能才會Flush到磁盤或者發送到網絡的終端(客戶端)顯示監控行集。

物理文件保存監控結果的方式的重要保證是不能遺漏任何事件,一旦IO降速的時候,可能會影響到整個T-SQL的執行情況。

  1. SELECT * FROM sys.dm_os_wait_stats 
  2. WHERE wait_type IN ('SQLTRACE_LOCK','IO_COMPLETION'); 

我使用這個語句來監控TRACE 和IO 完成對我當前機器的影響,我的某個客戶的IO情況:                      

  1. wait_type   
  2.  waiting_tasks_count  
  3.  wait_time_ms  
  4.  max_wait_time_ms  
  5.  signal_wait_time_ms   
  6.    
  7.    
  8. IO_COMPLETION  
  9.  66030898  
  10.  24377499  
  11.  3634     
  12.  418960   
  13.    
  14.    
  15. SQLTRACE_LOCK  
  16.  12007  
  17.  175943  
  18.  1001  
  19.  1281 

因為我進行了大量的過濾,因此這個值還是能夠接受的,影響不是特別大。

行結果集的方式,其實也是我們最熟悉的,就是使用SQL Server Profile監控GUI 直接展現給我們看到的。但是,我是非常不建議使用的,首先如果Buffer滿了,它有一定的延遲,可能會拋棄事件已清空緩存區繼續接受事件,而事件沒有發送到Client,也沒有寫到物理文件,自然就丟失了。比如,SQL Server Profile 在DB服務器進行監控,因為高負載的機器再用來展示,很有可能就會丟失事件,另外物理文件方式,其實是接受一個足夠大的Buffer,進行的大塊寫操作,性能是優于行集的。

image(行集)

保密性原則

SQL Server的安全特性會自動過濾 包含隱私的數據,比如密碼。我在我的SSMS中執行了如下的語句:

  1. EXEC sp_password 'pp','pp1','sa'

這是修改sa帳號密碼的系統sp,我打開了SQL Server Profile –> 選擇了T-SQL 監控模版

image

然后執行上面的存儲過程,監控結果:

image

監控結果:--*sp_password----------------------------

SQL Server Profile

使用SQL Server Profile GUI工具還是很多優勢,首先是減少了我們監控的復雜性,可以款速的建立監控,在跟蹤屬性中,可以可以選擇MSSQL為我們提供的模版,包括常用的T-SQL、T-SQL Duration、T-SQL Locks模版分別監控當前DB運行的所有查詢,所有查詢的耗時、所有的鎖定狀態。

在跟蹤屬性 –> 選擇事件選擇 我們可以選擇自己需要的事件,所有的事件在MSDN 都有定義->單擊列篩選器 可以自定義過濾,排序噪點干擾因素

image(我隨便選擇了一個耗時 = 500 微妙的過濾條件)

其他的模版大家可以自己看看MSDN 手冊,自己嘗試一下:SQL Server 2008 R2 本機  MSDN

服務器端跟蹤和物理方式收集

SQL Server Profile 只是對一些存儲過程的封裝,我更傾向于,自己定義常用的腳本,將監控結果保存在本機,用來大量的分析和存檔。

當然涉及4個存儲過程,雖然設置過濾的腳本非常麻煩,但是SQL Server Profile 可以利用 文件->導出 可以導出監控腳本意味著,我們不需要編寫復雜的T-SQL 腳本,不過還是建議大家熟悉這幾個存儲過程:

sp_trace_create 定義跟蹤 ,創建的跟蹤會在sys.traces查詢的到。

s_trace_setevent 設置監控事件

sp_trace_setfilter 設置過濾

sp_trace_setstatus 設置跟蹤的狀態  常用的是  sp_trace_setstatus @traceid,0 停止功能 、sp_trace_setstatus @traceid,2 移除跟蹤,這將導致sys.traces最終查詢不到該跟蹤

其實整個跟蹤還是比較簡單的。我這里有一個常用的腳本:

用來 監控超過指定秒數 和 數據庫 的 批處理和存儲過程 語句(超過5MB的文件,會執行ROLLOVER,根據文件名在后面添加類似_1,_2.trc的跟蹤結果):

  1. CREATE PROC [dbo].[sp_trace_sql_durtion]  
  2.     @DatabaseName nvarchar(128),  
  3.     @Seconds bigint,  
  4.     @FilePath nvarchar(260)  
  5. AS 
  6. BEGIN 
  7. DECLARE @rc int,@TraceID int,@MaxFileSize bigint;  
  8. SET @MaxFileSize = 5;  
  9.    
  10. EXEC sp_trace_create @TraceID OUTPUT,2,@FilePath,@MaxFileSize,NULL;  
  11.    
  12. IF @rc != 0   
  13.     RETURN;  
  14.    
  15. DECLARE @On bit;  
  16. SET @On = 1;  
  17.    
  18. EXEC sp_trace_setevent @TraceID,10,35,@On;  
  19. EXEC sp_trace_setevent @TraceID,10,1,@On;  
  20. EXEC sp_trace_setevent @TraceID,10,13,@On;  
  21. EXEC sp_trace_setevent @TraceID,41,35,@On;  
  22. EXEC sp_trace_setevent @TraceID,41,1,@On;  
  23. EXEC sp_trace_setevent @TraceID,41,13,@On;  
  24.    
  25. SET @Seconds = @Seconds * 1000000;  
  26.    
  27. EXEC sp_trace_setfilter @TraceID,13,0,4,@Seconds;  
  28.    
  29. IF @DatabaseName IS NOT NULL 
  30.     EXEC sp_trace_setfilter @TraceID,35,0,0,@DatabaseName  
  31.    
  32. EXEC sp_trace_setstatus @TraceID,1  
  33. SELECT TraceID = @TraceID;  
  34.    
  35. END 

參數非常的明了,數據庫名稱、執行事件超過多少秒、保存的路徑。

當我們運行這個腳本一段事件以后,可以快速的發現大量耗時的T-SQL,我們可以通過

  1. SELECT * FROM fn_trace_gettable(N'監控文件路徑',1); 

來查看行方式的結果。

同樣的富有創造力的讀者可以自己創建監控鎖定,監控死鎖等方式保存文件,但是我的建議是盡可能的減少噪音,也就是說我們要達到什么目地就在《Microsfot SQL Server 2005 技術內幕: T-SQL 程序設計》 中有一個正則,用來將類似的語句全部組合成,只有參數形式替換具體值的SQL CLR,但是我認為那個正則還有bug,等我空了給大家寫一個,自己也能使用的更完善。

監控異常

在上個系列中,講述了具體的SQL Event抓去的異常,可以及時通知,但是具體的異常信息,并不是特別詳細。因此我們可以選擇事件中的Error來添加有關T-SQL批處理和SP的所有異常,用于分析,這個跟蹤非常有利于我們監控一些異常情況!!!我創建了一個跟蹤的腳本,和上面的跟蹤事件的腳本一樣,超過5MB RollOver。我們要定期的執行這個跟蹤,雖然不建議長期開啟,但是定期監控處理異常是有利我們系統更加長時間運作的。

  1. CREATE PROC [dbo].[sp_trace_sql_exception]  
  2.     @FilePath nvarchar(260)  
  3. AS 
  4. DECLARE @rc int,@TraceID int,@Maxfilesize bigint 
  5. SET @maxfilesize = 5   
  6.    
  7.    
  8. EXEC @rc = sp_trace_create @TraceID output, 2, @FilePath, @Maxfilesize, NULL   
  9. IF (@rc != 0)   
  10.     RETURN;  
  11.    
  12. DECLARE @on bit 
  13. SET @on = 1  
  14. EXEC sp_trace_setevent @TraceID, 33, 1, @on 
  15. EXEC sp_trace_setevent @TraceID, 33, 14, @on 
  16. EXEC sp_trace_setevent @TraceID, 33, 51, @on 
  17. EXEC sp_trace_setevent @TraceID, 33, 12, @on 
  18. EXEC sp_trace_setevent @TraceID, 11, 2, @on 
  19. EXEC sp_trace_setevent @TraceID, 11, 14, @on 
  20. EXEC sp_trace_setevent @TraceID, 11, 51, @on 
  21. EXEC sp_trace_setevent @TraceID, 11, 12, @on 
  22. EXEC sp_trace_setevent @TraceID, 13, 1, @on 
  23. EXEC sp_trace_setevent @TraceID, 13, 14, @on 
  24. EXEC sp_trace_setevent @TraceID, 13, 51, @on 
  25. EXEC sp_trace_setevent @TraceID, 13, 12, @on 
  26.    
  27. DECLARE @intfilter int,@bigintfilter bigint;  
  28.    
  29. EXEC sp_trace_setstatus @TraceID, 1  
  30.    
  31. SELECT TraceID=@TraceID  
  32. GOTO finish  
  33.    
  34. ERROR:   
  35. SELECT ErrorCode=@rc  
  36.    
  37. FINISH:  

定期執行吧,同志們,找異常。。。

默認跟蹤和黑盒跟蹤

在sys.traces中的TraceID = 1的跟蹤是SQL Server 默認跟蹤,這個跟蹤比較輕量級,一般監控服務器的啟用停止,對象的創建和刪除,日志和數據文件自動增長以及其他數據庫的變化。(監控那些沒事刪錯了表的人,是最好的,當然前提不要都使用一個帳號!)

可以通過

  1. EXEC sp_configure 'default trace enabled',0;  
  2. RECONFIGURE WITH OVERRIDE; 

來關閉默認跟蹤。

黑盒跟蹤,就是可以幫助我們診斷數據庫沒事自個奔了的異常,在MSDN 搜索sp_create_trace的時候應該也發現了

image

的選項,那么我們也能創建一個類似的存儲過程來快速的創建黑盒跟蹤,幫助我們診斷一些異常!

  1. CREATE PROCEDURE sp_trace_blackbox  
  2.     @FilePath nvarchar(260)  
  3. AS 
  4. BEGIN 
  5.     DECLARE @TraceID int,@MaxFileSize bigint 
  6.     SET @MaxFileSize = 25;  
  7.     EXEC sp_trace_create @TraceID OUTPUT,8,@FilePath,@MaxFileSize  
  8.     EXEC sp_trace_setstatus @TraceID,1;  
  9.  
  10. END 

我這里提供@FilePath = NULL參數,這個默認就保存在SQL Server的數據文件夾中。

結尾

這里詳細的描述了SQL Server Trace 的各種功能特性,有興趣的朋友可以深入到MSDN研究監控,我這是也只是一筆帶過,也參考了MSDN 和《Microsoft SQL Server 2005調優》那本書,下面的監控可能和大家講述 DDL觸發器監控,C2審核以及SQL Server的事件通知(涉及的Service Broker我會開一個系列和大家詳細說說Service Broker),最后的結束可能就是說說2008的數據收集監控

原文鏈接:http://www.cnblogs.com/bhtfg538/archive/2011/01/21/1939706.html

【編輯推薦】

  1. SQL Server 2000刪除實戰演習
  2. SQL Server存儲過程的命名標準如何進行?
  3. 卸載SQL Server 2005組件的正確順序
  4. 對SQL Server字符串數據類型的具體描述
  5. SQL Server數據類型的種類與應用
責任編輯:彭凡 來源: 博客園
相關推薦

2011-09-02 14:05:25

SQL Server性能調優

2009-01-08 19:14:37

服務器應用程序SQL Server

2023-11-28 08:43:48

2009-01-08 19:11:39

服務器應用程序SQL Server

2009-01-08 19:06:13

服務器應用程序SQL Server

2010-07-19 13:35:51

SQL Server性

2010-07-19 09:39:53

SQL Server

2017-07-21 08:55:13

TomcatJVM容器

2023-03-30 07:52:46

SQLTiFlash調優

2014-09-22 13:31:46

Linux

2023-11-10 09:29:30

MySQLExplain

2020-11-09 07:34:49

JVM性能監控

2011-09-13 15:39:00

SQL Server性能調優

2010-07-21 09:28:34

SQL Server

2021-11-07 23:49:19

SQL數據庫工具

2009-11-17 13:45:12

Oracle SQL調

2011-03-21 09:35:38

LAMP調優網絡文件

2017-10-17 14:02:30

jvm調優工具

2017-09-22 15:15:23

jvm調優命令

2019-11-01 08:49:07

JVM監控性能
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 精品久久久久久久久久久久久久久久久 | 欧美亚洲视频 | 丝袜 亚洲 欧美 日韩 综合 | 精品一区二区三区免费视频 | 91伊人| 国产精品久久久久久久三级 | www.亚洲精品 | 亚洲精选久久 | 人人看人人草 | 精品欧美一区二区三区精品久久 | 欧美精品久久久久 | 国产精品自产av一区二区三区 | 亚洲精品国产精品国自产在线 | 日日拍夜夜 | 久久精品一区二区三区四区 | 亚洲视频在线免费观看 | www亚洲一区 | 久久蜜桃av | 色呦呦网站 | 日韩欧美三级 | 久久精品国产亚洲夜色av网站 | 亚洲精品视频在线看 | 最大av在线| 久久精品二区 | 日日骚视频| 亚洲视频精品在线 | 国产一区二区影院 | 免费一级黄色 | 一区二区国产精品 | 精品一区欧美 | 日韩一区二区在线视频 | 国产98色在线 | 日韩 | 国产精品a久久久久 | 亚洲成av片人久久久 | 久久久久久国产精品 | 天天射色综合 | 久久亚洲二区 | 超碰综合 | 日韩av啪啪网站大全免费观看 | 成人av鲁丝片一区二区小说 | 国产在线一区二区三区 |