sqlserver 抓取所有執行語句 SQL語句分析 死鎖 抓取


在多人開發中最頭疼的是人少事多沒有時間進行codereview,本來功能都沒時間寫,哪有時間來開會細細來分析代碼.軟件能跑就行,但是一些影響性能的語句寫出來,有可能本人都不知道.找就更

麻煩了.幸虧sqlserver提供了工具可以導出執行語句進行分析.可以看看是哪些語句影響整體性能.工具叫sql server profiler,這玩意可以抓取實例上執行的所有語句\死鎖\事物,為分析提供幫助.

開始->sqlserver目錄->性能工具->sql server profiler 打開軟件新建連接你想抓的實例,然后你就可以看到這個了

點擊顯示所有事件,會列出可以監視的所有狀態.一般分析和用的多的話死TSQL\Stored ProcedureS\Lock 這三個.第一個很簡單是SQL語句,第二個是存儲過程,第三個是鎖的情況.

一般把前兩個放在一起分析.可以找到所有的執行語句.第三個用來單獨分析來找死鎖.

前兩個選好以后,轉到第一個選項卡,不要保存在文件,保存在文件給沒有一樣,直接保存到表,這時,你要另外找個數據庫了.因為保存到表中相當於往保存的數據庫中插入一條記錄,然后這個語句

又會產生一個語句,造成無限遞歸,一會就把服務器搞死,我們一次分析時,直接把要分析的庫跟抓取的庫放在同一個實例上,結果3分鍾后整個SQL掛了,沒有響應了,刪了抓取表,重啟實例服務,重啟網站

才好.還好是處理的快.簡單說,比如你要分析服務器上的一個實例所有的語句,你要把抓取的結果放在你本地的數據庫實例中

放到數據庫表中后,因為是結構化數據,所以分析也特別容易,一下貼一張圖.抓取的結果放在表中,是會覆蓋原表中的數據.還有它抓取數據中,界面在不斷的閃爍.也在列表中增加,如果服務器顯卡不佳,一會

就給卡死,所以開啟以后直接最小化,抓取完畢直接用任務處理器殺掉進程就行.抓取時間跟你們要分析的片段有關.然后用SQL語句直接查出耗時前10,然后個人認領回去修改就行.我存在本地數據庫

名字DataA中的表InitTableInfo,這樣我們就可以查詢下

use DataA

select top 100 datediff(second, StartTime, EndTime) costtime,
       RowNumber,
       TextData,
       ApplicationName,
       ClientProcessID,
       SPID
  from InitTableInfo
 where StartTime is not null
   and EndTime is not null
 order by costtime desc

以下是結果展示

第一個是花費的時間,還有對應的語句,以及一些額外的信息.可以看到一些用時最大的達到20多秒.很嚇人的額.這樣貼出來讓個人認領去修改.達到提升執行效率的目的.

2.死鎖

程序運行中一些關鍵模塊,比如會員積分和金額代金券等,有些人寫的因為不夠注意或者當時水平不行,容易些一些死鎖.這樣我們需要有一個分析的路徑.

如果再程序中加入try catch來捕獲,自己寫的熟悉的模塊還好,如果是別人寫的另外時間緊任務重.你一時發現不了,你就可以啟用死鎖了

deadlock graph 會把找到的deadlock放到一個xdl文件中,這玩意用文件夾也打的開,可以分別存儲每個deadlock發生的語句和占用的資源.這時間你就可以根據這玩意處理了.

一般處理死鎖是相同順序的讀寫\優化索引和最小限度的使用表里的數據,對於抓取數據,進行使用行級鎖和頁級鎖.對於非必要的數據進行臟讀.單獨說又是很多了.這里只介紹工具

保存好的死鎖文件,可以送給你的各位同事,

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM