程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> 其他數據庫知識 >> MSSQL2008 >> 詳解SQL Server 2008對象SQL Server Profiler

詳解SQL Server 2008對象SQL Server Profiler

編輯:MSSQL2008

詳解SQL Server 2008對象SQL Server Profiler。本站提示廣大學習愛好者:(詳解SQL Server 2008對象SQL Server Profiler)文章只能為提供參考,不一定能成為您想要的結果。以下是詳解SQL Server 2008對象SQL Server Profiler正文


1、SQL Profiler對象簡介

SQL Profiler是一個圖形界面和一組體系存儲進程,其感化以下:

1.圖形化監督SQL Server查詢;

2.在後台搜集查詢信息;

3.剖析機能;

4.診斷像逝世鎖之類的成績;

5.調試T-SQL語句;

6.模仿重放SQL Server運動;

也能夠應用SQL Profiler捕獲在SQL Server實例上履行的運動。如許的運動被稱為Profiler跟蹤。

  1、Profiler跟蹤

  從開端=》一切法式=》Microsoft SQL Server 2008=》機能對象翻開Profiler對象,也能夠翻開SQL Server Management Studio=》對象=》SQL Server Profiler。

  然後選擇文件=》新建=》跟蹤翻開一個銜接窗口,選擇將要跟蹤的辦事器實例然後銜接。翻開以下“跟蹤屬性”對話框。

  

  假如有很多跟蹤,可以供給一個跟蹤稱號來贊助在今後停止分類。分歧的跟蹤模板可贊助樹立用於分歧目標的跟蹤。

  翻開跟蹤屬性窗口後,單擊“事宜選擇”選項卡,為跟蹤供給更具體的界說。

  

  2、事宜

  一個事宜表示SQL Server中履行的各類運動。這些運動可以簡略地分類為事宜類,游標事宜,鎖事宜,存儲進程事宜和T-SQL事宜是罕見的事宜類。

  關於機能剖析,重要對SQL Server上履行的各類運動的資本壓力程度的事宜感興致。資本壓力重要包括以下內容:

SQL運動觸及哪一類的CPU應用?應用了若干內存?觸及若干I/0操作?SQL運動履行了多長時光?特定的查詢履行的頻率有多高?查詢面臨哪類毛病和正告?

  上面給出跟蹤查詢停止的事宜:

事宜類 事宜 解釋 Stored Procedures RPC:Completed RPC完成事宜   SP:Completed 存儲進程完成事宜   SP:StmtCompleted 在存儲進程中一條SQL語句完成事宜 T-SQL SQL:BatchCompleted T-SQL批完成事宜   SQL:StmtCompleted 一條T-SQL語句完成事宜

  RPC事宜表現存儲進程應用長途進程挪用(RPC)機制經由過程OLEDB敕令履行。假如一個數據庫運用法式應用T-SQL EXECUTE語句履行一個存儲進程,那末存儲進程將被轉化為一個SQL批而不是一個RPC。RPC要求平日比EXECUTE要求快,由於它繞過了SQL Server中的很多語句解析和參數處置。

  T-SQL由一條或多條T-SQL語句構成。語句或T-SQL語句在存儲進程中也是零丁和團圓的。用SP:StmtCompleted或SQL:StmtCompleted事宜捕獲零丁的語句能夠是價值很高的操作,這取決於零丁語句的數目。假定體系中的每一個存儲進程包括且只要一條T-SQL語句。在這類情形下,完成的語句聚集相當小。如今假定進程中有多條語句,並且這些進程中有些應用其他語句挪用其他進程。搜集一切這些額定的數據如今釀成體系上異常凶猛的負載。在臨盆機上必定要慎用。

  如今回到誰人事宜選擇面板,只要曾經被選擇的事宜才會被顯示。假如想顯示一切可供選擇的事宜,則只需選中“顯示一切事宜”單選框,要添加一個跟蹤事宜,在Event列中查找一個事宜類下的事宜,並單擊其右邊的檢討框;要刪除不須要的事宜,撤消選中的事宜選擇框。

  光分類就有很多多少的說:

  

  上面給出其他一些與機能診斷有關的事宜:

事宜類 事宜 解釋 Security Audit(平安審計) Audit Login(登錄審計) 記載用戶銜接到SQL Server或斷開銜接時數據庫的銜接 Audit Logout(刊出審計) Sessions(會話) ExistingConnection(現有銜接) 表現一切在跟蹤開端之間銜接到SQL Server的用戶 Cursors(游標) CursorImplicitConversion(游標隱含轉換) 注解創立的游標類型與所要求的類型個分歧 Errors and Warnings(毛病和正告) Attention(留意) 表現因為客戶端撤消查詢或許數據庫銜接損壞惹起要求中止 Exception(異常) 注解SQL Server產生了異常 Execution Warning(履行正告) 注解在查詢或存儲進程履行時代湧現了正告 Hash Warning(哈希正告) 注解hash操作產生了毛病 Missing Column Statistics(列統計喪失) 注解優化器請求切實其實定處置戰略用的類統計喪失 Missing Join Predicate(銜接斷言喪失) 注解查詢在兩個表沒有銜接斷言情形下履行 Sort Warning(排序正告) 注解像SELECT如許的查詢中履行排序操作沒有適合的內存 Locks(鎖) Lock:Deadlock(逝世鎖) 標記著逝世鎖的湧現 Lock:Deadlock Chain(逝世鎖鏈) 顯示發生逝世鎖的查詢鏈條 lock:Timeout(鎖超時) 表現鎖曾經跨越其超時參數,該參數由SETLOCK_TIMEOUT timeout_perious(ms)敕令設置 Stored Procedures(存儲進程)    SP:Recompile(重編譯) 注解用於一個存儲進程的履行籌劃必需重編譯,緣由是履行籌劃不存在,強迫的重編譯,或許現有的履行籌劃不克不及重用

 SP:Starting(開端)

 SP:StmtStarting(語句開端)

分離表現一個SP:StmtStarting存儲進程和存儲進程中的一條SQL語句的開端。他們關於辨認開端單由於一個操作招致Attention事宜未能停止的查詢很有效   Transactions(事物) SQLTransaction(SQL事務)  供給數據庫事務的信息,包含事務開端/停止的時光、事務連續事宜等信息 

  3、事宜列

   事宜以分歧的特征(被稱為數據列)來表示。數據列表示一個事宜的欠亨特征,如事宜的類、用於該事宜的SQL語句、事宜的資本開支和事宜起源。

數據列 解釋 EventClass(事宜類) 事宜類型,如SQL:StatementCompleted TextData 事宜所用的SQL語句,如SELECT * FROM Person CPU 事宜的CPU開支(以ms表現),如對一個SELECT語句,CPU=100表現該語句履行100ms Reads 為一個事宜所履行的邏輯讀操作數目。例如對一個SELECT語句,Reads=800表現該語句須要800次邏輯讀操作 Writes 為一個事宜所履行的邏輯寫操作數目 Duration 事宜的履行時光(ms) SPID 用於該事宜的SQL Server過程標識符 StartTime 事宜開端的時光

   以上是經常使用的數據列,別的還有一些不太經常使用的數據列:

  BinaryData(二進制數據)  IntegerData(整數數據)  EventSubClass(事宜子類)  DatabaseID(數據庫標識符)  ObjectID(對象標識符)  IndexID(索引標識符)  TransactionID(事務標識符)  Error(毛病)  EndTime(停止時光)

  列數據可以從新支配以相符你本身所愛好的作風,要掌握列數據的安置,單擊組織列按鈕,將翻開以下對話框。可以單擊Up和Down按鈕修正列的地位,將列移入Groups意味著它將成為一個算計列。

   

  4、列挑選器

  除為一個Profiler跟蹤界說事宜和數據列以外,還可以界說各類過濾前提。這些前提贊助減少跟蹤的輸入,這常常是一個好主張。上面給出經常使用過濾前提列表。

事宜 過濾前提實例 用途 ApplicationName(運用法式稱號) Not like:SQL Profiler 過濾Profiler生成的事宜。這是默許的行動 DatabaseID(數據庫標識符) Equals:<ID of the database to monitor> 過濾特定命據庫生成的事宜。數據庫ID:SELECT DB_IC('Northwind') Duration(連續時光) Greater than or equal:2   關於機能剖析,常常會為一個年夜的任務負載捕獲跟蹤,在年夜的跟蹤中,很多事宜日記具有比所感興致更小的連續周期(Duration)。過濾這個事宜日記,由於簡直沒有可用於優化這些SQL運動的余地 Reads(讀操作數) Greater than or equal"2 過濾讀操作較小的事宜 SPID

Equals:<Database users to monitor>

定位由特定的數據庫用戶發送的查詢

   上面給出設置過濾列的方法:

  

   5、跟蹤模板

  SQL Server Profiler可以用自界說事宜、數據列和過濾器創立一個跟蹤模板,然後界說一個新的跟蹤,然後重用跟蹤個模板來捕獲一個跟蹤。界說新跟蹤模板的進程相似於界說新跟蹤,步調以下:

創立一個新的跟蹤。和後面一樣界說事宜,數據列和過濾器。從文件=》另存為菜單將跟蹤界說保留為跟蹤模板。

  SQL Server Profiler將主動將新的模板參加到其模板列表中。

  新建模板:

  

  保留模板:

  

  檢查:

  

  6、跟蹤數據

  界說了跟蹤今後,單擊運轉按鈕將開端捕獲事宜並將其顯示在屏幕上,可以看到一系列轉動事宜,可以在我們稱之為SQL TV的屏幕上看到體系的運轉,可以像DVD播放機一樣或多或少地掌握跟蹤,可使用對象欄上的按鈕暫停、開端和停滯跟蹤,乃至可以在任務室暫停跟蹤並修正它。

  一旦完成了SQL Server運動的捕獲,便可以將跟蹤輸入保留為一個跟蹤文件或一個跟蹤表。保留到跟蹤文件的跟蹤輸入是一個原生的格局,可以由Profiler翻開以剖析SQL查詢。將跟蹤的輸入保留為一個表,也能夠使Profiler在跟蹤表上用SELECT語句來剖析個中的SQL查詢。

  詳細的操作為 文件 =》 另存為 =》 跟蹤表。選擇你願望存入的的數據庫和表,然後你便可以像通俗表一樣履行各類SQL查詢。

2、跟蹤的主動化

  Profiler GUI簡化了Profiler跟蹤的搜集。不幸的是,這類簡略單純性有其價值。Profiler對象捕獲的事宜進入內存中的緩沖以便經由過程收集反應給GUI。GUI依附收集,收集流量能夠下降體系的速度並招致緩沖被填滿。這將在較小的水平上影響辦事器的機能。進一步地,當緩沖被填滿,辦事器將開端拋棄事宜以免嚴重地影響辦事器機能。

  1、應用GUI捕獲跟蹤

  可以以兩種辦法兩創立一個劇本化跟蹤-手工或許應用GUI。在輕松地知足劇本的一切請求之間,最簡略單純的辦法就是應用Profiler對象的GUI,須要以下步調:

界說一個跟蹤;單擊文件=》導出=》劇本跟蹤界說;必需選擇目的辦事器類型, SQL Server2005/2008;未文件定名,並保留它;

  這些不走將生成一切步調跟蹤並將其輸入到一個文件所需的一切劇本敕令。

  應用Management Studio手工啟動新的跟蹤:

翻開文件;應用體系的相干稱號和途徑調換InsertFileNameHere;履行劇本,它將前往帶有TraceId的單列成果集;

  可以經由過程SQL Agent主動化這個劇本的履行,乃至可使用sqlcmd.exe應用法式從敕令交運行這個劇本。不論應用哪一種辦法,這個劇本將啟動跟蹤。假如沒有界說跟蹤停滯時光,就必需應用TraceId手工停滯跟蹤。

  2、應用存儲進程捕獲跟蹤

  檢查上一節中界說的劇本,會看到以特定次序條用的一系列敕令:

sp_trace_create:創立一個跟蹤界說;sp_trace_setevent:添加事宜和事宜列到跟蹤中;sp_trace_setfilter:將過濾器運用到跟蹤;

  一旦界說了SQL跟蹤連續到跟蹤被停滯。由於SQL跟蹤作為一個後端過程連續運轉,Managerment Studio會話不須要堅持翻開。可使用SQL Server內建函數fn_trace_getinfo肯定正在運轉的跟蹤,查詢以下:


SELECT * FROM ::fn_trace_getinfo(default);

  輸入圖:

  

  fn_trace_getinfo函數的輸入中,分歧的traceid的數目表現SQL Server上運動跟蹤的數目。

第三列(value)表現跟蹤能否正在運轉(value=1)或許停滯(value=0)。可以經由過程履行存儲進程sp_trace_setstatus停滯特定的跟蹤,如traceid=1,以下所示:


EXEC sp_trace_setstatus 1,0;

在跟蹤停滯以後,它的界說必需履行sp_trace_setstatus封閉而且從辦事器中刪除,以下所示:


EXEC sp_trace_setstatus 1,2;

  為了驗證跟蹤勝利地停滯,從新履行fn_trace_getinfo函數,並肯定該函數的輸入不包括該traceid。

  這類技巧所創立的跟蹤文件的格局與Profiler創立的跟蹤文件雷同。是以,這類跟蹤文件可以與Profiler創立的文件以雷同的方法停止剖析。

  應用前一末節所概述的存儲進程捕獲SQL跟蹤,防止了與Profiler GUI相干的開支。並且還比Profiler對象供給了治理SQL跟蹤籌劃的更年夜靈巧性。

3、聯合跟蹤和機能監督器輸入

  假如主動化了機能監督器捕獲到文件,又主動化了Profiler數據捕獲到一個文件。它們籠罩雷同的時光段,那末便可以在SQL Profiler GUI中一路應用它們。肯定跟蹤有StartTime和EndTime數據字段,依照以下步調停止:

翻開跟蹤文件(固然條件是你已經 另存為=》跟蹤文件);單擊 文件=》 導入機能數據;選擇導入的機能監督器文件;

  履行下面的操作將翻開以下所示對話框,這裡許可選擇包括機能監督器計數器。

 

  選擇了想要包括的計數器以後,單擊OK按鈕將一路翻開Profiler和機能監督器數據。如今,可以開端一路應用跟蹤數據和機能監督器數據。假如在頂部窗口選擇一個時光,它將在機能 監督器中放置一條紅線,顯示數據中事宜產生的時光。相反,可以單擊機能監督器數據,表現那段 時光的事宜將被選中。這些機能任務得很好,將可以在調劑進程中准時應用它們以確認瓶頸和壓力 點,並肯定招致這些壓力的特定查詢。

4、SQL Profiler應用要點

  SQL Profiler應用建議以下:

限制事宜和數據列的數目;擯棄用於機能剖析的啟動事宜;限制跟蹤的輸入年夜小;防止聯機數據列排序;長途運轉Proflier;

  1、限制事宜和數據列

  在跟蹤SQL查詢時,可以經由過程過濾事宜和數據列來決議哪些SQL運動應當被捕獲。選擇更多的事宜形成了年夜量的跟蹤開支。數據列不會增長太多的開支,由於它們只是一個事宜類的特征。是以,曉得每一個所願望跟蹤事宜的緣由,並依據需要性來選擇事宜是很主要的。

  最小化捕獲的事宜數目防止SQL Server糟蹋名貴的資本帶寬去生成一切的事宜。捕獲像鎖和履行籌劃如許的事宜時應當當心停止,由於這些事宜會使跟蹤輸入變得異常年夜並下降SQL Server的機能。

  過濾分兩個階段:預過濾由SQL Server履行,後過濾由用戶履行。預過濾是捕獲SQL Server運動的聯機階段,預過濾供給多種溢出:

下降了SQL Server的機能影響,由於生成無限數目的時光;下降跟蹤輸入年夜小;簡化後過濾操作,起首由於要捕獲的事宜更少了;

  預過濾的獨一缺陷是,能夠喪失一些完全剖析中須要的主要信息。

  2、拋棄機能剖析所用的啟動事宜

  所用於機能剖析的信息環繞一個查詢的資本開支。想SP:StmtStarting如許的啟動事宜不供給這類信息,由於只要在事宜完成以後,能力盤算I/O量、CPU負載和查詢的連續時光。所以,在跟蹤運轉遲緩的查詢以停止機能剖析時,不須要捕獲啟動事宜。這類信息由對應的完成事宜來供給。

  甚麼情形下合適捕獲啟動事宜呢?應當在預期某些SQL查詢由於毛病而不克不及停止履行,或許頻仍發明Attention事宜的時刻捕獲啟動事宜。Attention事宜普通表現用戶半途撤消了查詢或許查詢超時,能夠由於查詢運轉了太長時光。

  3、限制跟蹤輸入年夜小

  除預過濾事宜和數據列,其他過濾前提也會限制跟蹤輸入的年夜小。異樣,限制年夜小能夠喪失所存眷的整體體系狀況中感興致的事宜。然則,假如存眷於開支較年夜的查詢,過濾器是有贊助的。

  經由過程過濾器,可以或許挑選履行事宜》=2或邏輯讀數目》=100的查詢,由於消費太低的查詢根本上不須要優化。

  4、防止在線數據列排序

  在機能剖析時代,普通在分歧的數據列(如Duration、CPU、Reads)上排序以肯定響應數字最年夜的查詢。假如脫機排序,就可以下降在與SQL Server交互時必需停止的Profiler運動。排序捕獲到的SQL跟蹤輸入的辦法以下:

捕獲跟蹤,不做任何排序或分組;另存為跟蹤輸入到一個跟蹤文件;翻開跟蹤文件並依照須要在特定的數據列上排序或分組跟蹤文件輸入;

  5、長途運轉Profiler

  直接在臨盆辦事器上運轉測試對象普通不是一個好方法。Profiler有一個年夜型的用戶界面,是以,在其他機械上運轉它更好。與體系監督器類似,Profiler不該該經由過程終端辦事會話來運轉,由於如許對象的重要部門依然在辦事器上運轉。在直接將跟蹤輸入搜集到一個文件時,保留在Profiler運轉的當地文件上。這依然是比經由過程體系存儲進程將Profiler作為辦事器端跟蹤來運轉加倍資本密集的操作。應用體系存儲進程依然是最好的選擇。

  6、限制應用某些事宜

  某些事宜的開支比其他的事宜年夜。因為生成的查詢的特征,語句完成事宜的開支能夠異常年夜。須要謹嚴地應用,特殊是在曾經碰到壓力的體系上,必需謹嚴應用的事宜有:Showplan XML事宜,Performance:Showplan XML、Performance:Showplan XML for Query Compile和Performance:Showplan XML sTATISTICS Prifile。固然這些事宜能夠有效,然則不要在臨盆機械上應用它們。

5、沒有Profiler的情形下查詢機能器量

  樹立一個跟蹤能搜集很多數據供今後應用,然則這類搜集能夠價值很年夜,必需期待成果。

  假如要立刻捕獲體系的機能器量,特殊是關於查詢機能的器量,那末靜態治理視圖sys.dm_exec_query_stats正式所須要的。假如還須要查詢運轉及其零丁開支的汗青記載,那末跟蹤依然是更好的對象。然則,假如只須要曉得這時候候運轉時光最長的查詢或許最多的物理讀操作,則可以從sys.dm_exec_query_stats獲得這些信息。

  由於sys.dm_exec_query_stats只是一個視圖,可以簡略地對其停止查詢並取得辦事器上查詢籌劃統計的信息。

列 描寫 Plan_handle 援用履行籌劃的指針 Creation_time 籌劃創立的時光 Last_execution time 查詢最初一次應用的籌劃時光 Execution_count 籌劃曾經應用的次數 Total_worker_time 從創立起籌劃應用的CPU時光 Total_logical_reads 從創立器籌劃應用的讀操作數目 Total_logical_writes 從創立器籌劃應用的寫操作數目 Query_hash 可用於辨認有類似邏輯的查詢的一個二進制hash Query_plan_hash 可用於辨認有類似邏輯的籌劃的一個二jinzhihash

  為了過濾從sys.dm_exec_query_stats前往的信息,須要將其銜接到其他靜態治理函數上,如sys.dm_exec_sql_text可以顯示與籌劃相干的查詢文本,sys.dm_query_plan顯示用於查詢的履行籌劃。一旦銜接到其他DMF,可以限制願望過濾得數據庫或進程。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved