效能調校相關工具程式 3download.microsoft.com/download/9/b/2/9b24903a-a633-4901...3...

34
3 效能調校相關工具程式 C H A P T E R 「工欲善其事,必先利其器」。當你要對 SQL Server 做效能調校時, 大概不可能空手入白刃,應依不同的狀況善用各種工具程式,廣泛地分 析和深入研究,因為現今資訊系統整體的運作往往非常地複雜,需要依 靠多種不同的工具程式才能深入地觀察系統各個面向。 由於非資訊專業的使用者回報之訊息可信度不高,當他們誤改了什麼設 定;自己偷偷安裝了不該安裝的軟體,或是做了不正確的動作,大概自 己都不知道。就算知道,也描述不清,甚至不願據實以告。另外,使用 者可能會對系統的某部分有偏見,因此,所描述的重點很容易引導你遽 下結論,導致花了非常多的時間在處理枝微末節的瑣事上。通常你不能 依照使用者的敘述太快下結論,需要有工具來驗證你的前提或假設。甚 至是先用工具程式觀察系統的基本設定與運作,再來詢問使用者系統問 題的現象,以驗證或解釋瓶頸所在。

Transcript of 效能調校相關工具程式 3download.microsoft.com/download/9/b/2/9b24903a-a633-4901...3...

Page 1: 效能調校相關工具程式 3download.microsoft.com/download/9/b/2/9b24903a-a633-4901...3 效能調校相關工具程式 C H A P T E R 「工欲善其事,必先利其器」。當你要對

3效能調校相關工具程式

CHAPTER

「工欲善其事,必先利其器」。當你要對 SQL Server 做效能調校時,

大概不可能空手入白刃,應依不同的狀況善用各種工具程式,廣泛地分

析和深入研究,因為現今資訊系統整體的運作往往非常地複雜,需要依

靠多種不同的工具程式才能深入地觀察系統各個面向。

由於非資訊專業的使用者回報之訊息可信度不高,當他們誤改了什麼設

定;自己偷偷安裝了不該安裝的軟體,或是做了不正確的動作,大概自

己都不知道。就算知道,也描述不清,甚至不願據實以告。另外,使用

者可能會對系統的某部分有偏見,因此,所描述的重點很容易引導你遽

下結論,導致花了非常多的時間在處理枝微末節的瑣事上。通常你不能

依照使用者的敘述太快下結論,需要有工具來驗證你的前提或假設。甚

至是先用工具程式觀察系統的基本設定與運作,再來詢問使用者系統問

題的現象,以驗證或解釋瓶頸所在。

Page 2: 效能調校相關工具程式 3download.microsoft.com/download/9/b/2/9b24903a-a633-4901...3 效能調校相關工具程式 C H A P T E R 「工欲善其事,必先利其器」。當你要對

90

3效能調校相關工具程式

效能調校的方法通常來自於個人的經驗,以及對技術的純熟度而有不同的

解決方法,因此,如何蒐集系統環境資訊並找到最佳解決方式是門藝術。

一般來說,檢視一遍系統的基本運作資料,例如,整體系統的軟硬體規

格、效能計數器 (Performance Monitor)、事件檢視器 (Event log)、SQL

Server 記錄檔、資料大小、上線人數、批次存取量、瓶頸業務流程等等,

可能都是固定的開始。

有了基本認知,可以讓你免於妄加猜測,或是忽略上述各種記錄中明顯

呈現的問題,一頭栽入錯誤的方向。一般來說,若是事件檢視器或 SQL

Server 的記錄檔呈現有任何問題時,應當優先處理,因為這已經是系統健

不健康而非有沒有效率的問題。當使用者無法告知你任何臆測時,這些廣

泛蒐集的資訊也是你構思假設的起點。

我們將效能調校時較常用到的相關工具表列如下,並將下列工具依其蒐集

的資訊內容區分三類,在這些工具的使用上,應由廣泛收集而漸漸朝向特

殊目的:

工具屬性 效能調校工具 說明

蒐集廣泛

的資訊

SQLDiag

公用程式

通用診斷收集公用程式,可以當作主控台應用程式或服

務來執行。預設的檔案路徑位於 <系統磁碟機>:\Program

Files\Microsoft SQL Server\90\Tools\Binn 目錄之下,

產出的記錄檔預設放在 <系統磁碟機>:\Program Fi les\

Microsoft SQL Server\90\Tools\Binn\SQLDIAG 目錄之

下。它可以在同一時間,一次幫你收集相當多的資訊。透

過 SQLdiag 公用程式可從 SQL Server 和其他類型的伺服

器收集記錄檔和資料檔,並使用它來監控一段時間的伺服

器運作行為,或對伺服器的特定問題進行疑難排解。

MSInfo32

公用程式

作業系統提供的公用程式 (MSInfo32.exe),用於檢視作

業系統相關的管理資訊,包含系統資訊、硬體資源、元

件⋯等。由「開始」→「程式集」→「附屬應用程式」

→「系統工具」→「系統資訊」路徑即可開啟MSInfo32

工具程式。執行檔存放路徑為 <系統磁碟機>:\Program

Files\Common Files\Microsoft Shared\MSInfo\ MSInfo32.

exe。

表 3.1:由廣泛的資訊收集到針對特殊目的工具

Page 3: 效能調校相關工具程式 3download.microsoft.com/download/9/b/2/9b24903a-a633-4901...3 效能調校相關工具程式 C H A P T E R 「工欲善其事,必先利其器」。當你要對

91SQL Server 2005 Performance Tuning 效能調校

3.1綜觀的工具

工具屬性 效能調校工具 說明

事件檢視器

(Event Log)

Windows NT 之後所附的事件記錄與事件檢視器是集中

存放各種事件訊息的地方,微軟出的各種服務,如 SQL

Server、I IS、COM+、Exchange、BizTalk⋯等等,因為

不可以直接與使用者以圖形化介面互動,所有的訊息大都

放到事件記錄中。當然,作業系統本身的訊息也都是放置

在此處。

當系統有問題,不能運作時,你可能需要小心檢視是否有

異常的事件記錄。若是效能調校,最好也先瀏覽一下事件

檢視器,看看有沒有蛛絲馬跡可供參考。

效能監視器

(Performance

Monitor)

Windows NT 之後所附的效能監視器是詳盡呈現各種效能

數據的工具。可以用它來觀測伺服器當下的運作,記錄整

個系統多台機器上的各種效能計數器,以找出整個系統的

瓶頸。在效能調校的過程中會一再地用它。

工作管理員

(Task

Manager)

快速檢視當下系統中各個程序所耗費的各種資源,並透過

圖形呈現 CPU、記憶體總體使用的狀況。

蒐集較為

專屬的資

SSMS Management Studio 整合環境提供了存取、設定和管理

SQL Server 系列產品的圖形介面,並透過各種的「查詢

編輯器」來存取不同服務,使所有開發人員和管理員都能

夠存取。

Management Studio 預設內建了一組報表,整合系統動態

管理檢視和函數的資訊,提供系統執行狀況的分析。

查詢編輯器 Management Studio 整合式環境提供的「查詢編輯器」,

可編輯 Transact-SQL 指令碼,存取SQL Server 2005 所

提供的各種系統物件,如檢視、動態管理檢視和函數、預

存程序等,以查詢當下的系統效能。

表 3.1:由廣泛的資訊收集到針對特殊目的工具 (續)

Page 4: 效能調校相關工具程式 3download.microsoft.com/download/9/b/2/9b24903a-a633-4901...3 效能調校相關工具程式 C H A P T E R 「工欲善其事,必先利其器」。當你要對

92

3效能調校相關工具程式

工具屬性 效能調校工具 說明

Profiler SQL Prof i ler 是用途廣泛的監控工具程式。當檢視 SQL Server 的設計與執行效能或除錯時,常配合這個工具

1。

2005 版本除了提供監控資料庫的動作,找出有問題的查

詢,重新測試執行相關查詢等等,更新增監控 Ana lys is

Services 執行個體所發生的的事件。

此外,它整合作業系統的效能監視器追蹤結果,透過圖形

化的交互參照呈現,提供使用者更便利的分析環境。使用

SQL Profi ler 的另一項好處是錄製資料庫的動態行為後,

再藉由「Database Engine Tuning Advisor」工具程式來

調校並建立正確的索引。與其猜測應該建立哪些索引,不

如讓它先稍微審視過資料的使用方式,並提供較為聰明的

建議。

Dynamic

Management

Views

SQL Server 2005提供全新的動態管理檢視和函數,可用

於觀察系統當下的執行狀況,以監控或調校效能。將於

《第 4 章:動態管理檢視和函數》有更完整的介紹。

針對特定

目的

Database

Engine Tuning

Advisor

可用來分析「工作負載」執行時,對一或多個資料庫的

效能影響。提供在 SQL Server 資料庫中新增、移除或修

改實體設計結構的建議。這些實體效能結構包括:叢集索

引、非叢集索引、索引檢視及資料分割。

網路監視器

(Network

Monitor)

Windows 2000 之後所附的 (Windows NT 要額外安裝) 網

路監視器讓你可以直接擷取本機在網路上傳輸的封包,透

過該程式可以直接檢視各服務實際傳遞的封包資料,在某

些特殊的情境下,可以用它來深入地分析。

DBCC DBCC 一般有兩種解釋,Database Console Command

或是 Database Consistence Check,兩種都說得通。

DBCC 提供了非常多的進階指令,不管是啟動追蹤 SQL

Server 的各種細節行為,或是檢查資料庫是否健康,調整

資料庫檔案,檢視使用者的輸入指令等等,有非常多的功

能,因此在 SQL Server 2000 版本之後,它的解釋比較偏

向是 Database Console Command 的縮寫,也就是用來

下各種維護管理命令的指令台。

1 SQL Profiler 是一個很容易上手,檢視 SQL Server 當下運作的工具。因此有不少朋友直

接利用它來做監控 (Audit) 的動作,但要小心的是這一定會對 SQL Server 平常執行的效能

有所影響。據筆者在自己的機器上測試,啟動 SQL Profiler 追蹤約略差 1/7 的效率。

表 3.1:由廣泛的資訊收集到針對特殊目的工具 (續)

Page 5: 效能調校相關工具程式 3download.microsoft.com/download/9/b/2/9b24903a-a633-4901...3 效能調校相關工具程式 C H A P T E R 「工欲善其事,必先利其器」。當你要對

93SQL Server 2005 Performance Tuning 效能調校

3.1綜觀的工具

工具屬性 效能調校工具 說明

外加延伸

的工具

SQL Server

2005

Performance

Dashboard

Reports

提供針對 SQL Server 2005 SP2後的效能監控,它是一組

遵循Reporting Services報表定義的客製化報表,提供整

合在SQL Server Management Studio內的介面,藉由存

取 SQL Server 2005 所提供的系統物件,讓你知道 SQL

Server 2005 執行個體當下運作的情形,藉以分析效能問

題。

一些 Resource

Kit 提供的工

Application Center Test 或 Web Application Stress

Tool,這兩者都是針對 Web 應用程式壓力測試的工具,

內附在 Visual Studio.NET 2003 企業版中的Application

Center Test 功能較為簡單,但操作簡易,可以圖形呈現

測試過程與結果,很容易上手,本章《第 3.4.1 節:SQL

Server 2005 Performance Dashboard Reports》有簡單的

介紹,若要完整的功能可以單獨購買 Application Center

Test。

Web Application Stress Tool 是 Application Center Test

的前身,可以直接在微軟的網站下載,其呈現測試結果的

畫面雖不若 Application Center Test 友善與直觀,但功能

較 Visual Studio.NET 所附的 Application Center Test 稍

多,你可以自行下載,或執行筆者從微軟下載附在光碟中

的 Web Application Stress Tool。

Visual Studio

2005 Team

System

完整的軟體開發生命週期平台,但與資料庫效能直接相關

的可能是 Test 和 DB Pro 兩個版本。

Visual Studio

2005 Team

Edition for

Database

Professional

資料庫的生命週期開發與管理,可建立資料庫的 Script、

比對資料庫間的差異、重構、版本控管、產生測試資料⋯

等。

針對資料庫內的預存程序、函數做單元測試,並可將測試

整合到以 Visual Studio 所建立的其他測試專案,以執行

Web 測試、壓力測試等。

表 3.1:由廣泛的資訊收集到針對特殊目的工具 (續)

廣泛地蒐集資訊是讓你對系統的整體架構有個概觀的了解,接著,針

對你所懷疑的地方,需要更多更詳盡的資訊以擬定假設,例如,透過

Management Studio 工具程式觀察當下使用者的互動情形,是否有嚴重的

鎖定。也可以透過各種的 T-SQL 函數與指令來呈現 SQL Server 的各種狀

Page 6: 效能調校相關工具程式 3download.microsoft.com/download/9/b/2/9b24903a-a633-4901...3 效能調校相關工具程式 C H A P T E R 「工欲善其事,必先利其器」。當你要對

94

3效能調校相關工具程式

況,以及透過 SQL Profiler 來記錄各種事件發生的先後順序,使用者的執

行細節等等。

當你需要更深入的了解與研究,可以使用 Management Studio 提供的

「查詢編輯器」分析各個使用者執行的 T-SQL 執行計劃之優劣,或是以

Windows 2003 Resource Kit、SQL Server 2005 Resource Kit所提供的小

工具或Visual Studio Team System 來執行壓力測試,各個程序 (Process)

的分析,各系統資源的使用分析與監控,以及透過 DBCC 來要求追蹤,傾

印 (dump) 相關的數據等等。最重要的是將各種工具所收集的多樣化數據

整合,綜合分析研判。

接下來,我們依照表 3.1 的順序,由上而下依序介紹各種工具程式。

3.1 綜觀的工具

先介紹用來廣泛蒐集資訊,讓你對系統有概括性了解的各種工具。

3.1.1 SQLDiag 公用程式概觀

在相同的時間區段內,收集各種面向的資訊非常重要。例如,當觀察到

SQL Server 對某個查詢的回應遲緩時,可能需要同時觀察系統硬體各項資

源的使用、SQL 語法和索引的設計,以及 SQL Server 當時的鎖定狀況,

是否有錯誤發生⋯等等。通常必須要互相參照,才容易找出禍首。

另外,對於系統變化的趨勢則需要一段時間的觀察,常常問題的成因是資

源耗用的累積,或是不定時的突發事件,這往往需要利用背景的服務程式

自行蒐集相關資訊。對於廣大的 DBA 而言,擅長撰寫 SQL 語法,但對程

式語言並不熟悉,因此要自行串起蒐集資訊的機制並不容易。

接下來的內容將介紹 SQL Server 2005 後大幅改版的 SqlDiag 工具程式,

利用它可以週期性地廣泛蒐集各種系統資訊。

Page 7: 效能調校相關工具程式 3download.microsoft.com/download/9/b/2/9b24903a-a633-4901...3 效能調校相關工具程式 C H A P T E R 「工欲善其事,必先利其器」。當你要對

95SQL Server 2005 Performance Tuning 效能調校

3.1綜觀的工具

3.1.1.1 SQLDiag 公用程式

SQLDiag.exe 公用程式從 SQL Server 7.0 以來,一直是個容易執行的工具

程式,對非專業的使用者來說,不用特別瞭解如何透過不同的監控工具蒐

集各式資訊。在 SQL Server 2005 版本後,SQLDiag 公用程式納入另外一

個工具程式 PSSDiag 的功能,讓它的能力大為擴增,但也使得執行方式與

資料解析變得複雜。

SQLDiag 公用程式提供「主控台應用程式」或「Windows 系統服務」兩

種方式來執行,前者讓管理者隨時可以互動的方式執行,後者提供長時間

在背景收集診斷資料的能力。SQLDiag 從 SQL Server 和 Windows 伺服

器收集記錄檔和資料檔,並可以週期性地監視伺服器,以便對伺服器的特

定問題進行疑難排解。透過它能蒐集到下列資訊:

Windows 伺服器的軟硬體資訊 (透過 MSInfo32 公用程式取得)。

Windows 效能計數器 (Perfmon) /事件記錄 (Event Log)。

SQL Server 伺服器 / Profiler 追蹤。

SQL Server 錯誤記錄。

SQL Server 封鎖資訊。

SQL Server 組態資訊。

自行設定要 SQLDiag 蒐集的資訊。

若 SQL Server 執行個體未啟動,它依然可蒐集上述資訊中局部的內容。

若要它的使用方式,可以參考SQL Server 2005 的線上說明:

ms-help://MS.SQLCC.v9/MS.SQLSVR.v9.zh-CHT/sqlcmpt9/html/45ba1307-33d1-431e-872c-a6e4556f5ff2.htm

或是進入「命令提示字元」程式,直接執行 SQLDiag /? 2,以呈現各項參

數,至於參數的使用說明,筆者留待下一節搭配執行模式一起介紹。

2 可以在任何目錄路徑下執行,是因為 SQL Server 2005 在安裝時,會設定 Path 環境變數

到 SQLDiag.exe 所在目錄,它預設的目錄如下:<系統磁碟機>:\Program Files\Microsoft

SQL Server\90\Tools\Binn。

Page 8: 效能調校相關工具程式 3download.microsoft.com/download/9/b/2/9b24903a-a633-4901...3 效能調校相關工具程式 C H A P T E R 「工欲善其事,必先利其器」。當你要對

96

3效能調校相關工具程式

在主控台執行 SQLDiag.exe 工具程式之結果如圖 3.1所示:

圖 3.1:執行SQLDiag公用程式蒐集伺服器環境資訊

當 S Q L d i a g 啟動且未賦予任何參數時,它會初始化且按照預設的

SQLDiag.Xml 組態檔所指定之項目蒐集資訊。SQLDiag 工具程式初始化

完成後,接著將出現一則訊息,內容約略如下:

2007/09/02 14:41:31.01 SQLDIAG Collection started. Press Ctrl+C to stop.

告知 SQLdiag 收集的作業已經開始,將平行收集所有的診斷資料,你可

以按【CTRL+C】組合鍵來停止蒐集資訊。

圖 3.1 的下方有一段警告訊息,那是因為筆者的電腦上裝有兩個執行個

體,而其中一個執行個體 SQLExpress並未啟動,SQLDiag 工具程式預設

會掃描監控同一台伺服器上;所有的 SQL Server 執行個體,所以丟出存

取不到的錯誤訊息。

重要的是在 SQLDiag 啟動時,能透過組態檔指定要蒐集的資料,以及如

何蒐集。例如,何時啟動蒐集、輪詢伺服器的頻率,存放資料的單一檔案

大小等。

Page 9: 效能調校相關工具程式 3download.microsoft.com/download/9/b/2/9b24903a-a633-4901...3 效能調校相關工具程式 C H A P T E R 「工欲善其事,必先利其器」。當你要對

97SQL Server 2005 Performance Tuning 效能調校

3.1綜觀的工具

簡單的作法是在硬碟檔案目錄中,任意建立一個子目錄,如 C:\SqlDiag,

然後在命令提示列搭配 P 選項指向該目錄路徑,該選項告知 SQLdiag 所

需的支援檔案,如:XML 組態檔、Transact-SQL 指令碼和公用程式等,

以及在診斷收集期間使用的其他檔案所在位置。

在主控台中,執行如下的命令:

sqldiag -PC:\SqlDiag

SQLDiag 會自動在該目錄下產生相關的檔案 3,列表如下:

MSDiagProcs.sql:SqlDiag 開始存取某個 SQL Server 執行個體

前,先對該執行個體進行的初始化 T-SQL Script,多是在 Tempdb

系統資料庫上建立所需的物件,因此你也可以在檔案中加入自己的

script。

SQLDiag.XML:SqlDiag 工具程式預設讀取的設定檔,提供標準的

資料蒐集,包含SQL Server 錯誤處理、設定狀態⋯等,本節開始所

列的資訊。

SD_Detailed.XML:設定蒐集較上述 SQLDiag.xml 更詳細的資

訊。

SD_General.XML:設定蒐集較上述 SQLDiag.xml 精簡的資訊。

SQLDiag_Schema.XSD:上述 XML 組態檔的結構描述 (xml

schema) 定義,你可用它來撰寫、修改、驗證既有的 XML 組態

檔。

接下來就稍微修改 MSDiagProcs.sql 檔案,增加兩個預存程序。首先是讓

SqlDaig 工具程式在 tempdb 系統資料庫內,建立統計執行計劃重複使用

的預存程序 dbo.spReusedPlans,定義如下:

3 若不指定路徑,SQLDiag.Xml 預設產生的相關設定檔案位在如下的路徑:

<系統磁碟機>:\Program Files\Microsoft SQL Server\90\Tools\Binn\

而錄製的輸出結果放在上述目錄下的子目錄:SQLDiag。

Page 10: 效能調校相關工具程式 3download.microsoft.com/download/9/b/2/9b24903a-a633-4901...3 效能調校相關工具程式 C H A P T E R 「工欲善其事,必先利其器」。當你要對

98

3效能調校相關工具程式

IF OBJECT_ID('dbo.spReusedPlans') IS NOT NULL DROP PROC dbo.spReusedPlans GOPRINT ''--這段內容將會出現在##<機器名稱>__MSDiagProcs_Startup.OUT 檔案內RAISERROR ('===== 建立預存程序spReusedPlans,統計執行計劃重用的比例', 0, 1) WITH NOWAITGOCREATE PROC dbo.spReusedPlansASdeclare @single int, @reused int, @total int

select @single= sum(case(usecounts) when 1 then 1 else 0 end), @reused= sum(case(usecounts) when 1 then 0 else 1 end), @total=count(usecounts)from sys.dm_exec_cached_plans

select '查詢時間' = getdate(),'只用過一次的執行計劃(usecounts=1)'= @single,'重複使用的執行計劃(usecounts>1)'= @reused,'重用比例%'=cast(100.0*@reused / @total as dec(5,2)),'重複使用量'=@total,'單一使用執行計劃所佔記憶體byte 數'=(select sum(cast(size_in_bytes as bigint))from sys.dm_exec_cached_planswhere usecounts = 1)GO

程式碼列表 3.1:修改 MSDiagProcs.sql 檔案,讓 SqlDaig 工具程式在初始化

時,新增我們後續監控時需要預存程序

接著是週期性重複叫用其他預存程序的預存程序 dbo.spReusedPlans,定

義如下:

IF OBJECT_ID('dbo.spPollSP') IS NOT NULL DROP PROC dbo.spPollSP GOPRINT ''RAISERROR ('===== 建立預存程序dbo.spPollSP,以重複呼叫其他預存程序', 0, 1) WITH NOWAITGO

Page 11: 效能調校相關工具程式 3download.microsoft.com/download/9/b/2/9b24903a-a633-4901...3 效能調校相關工具程式 C H A P T E R 「工欲善其事,必先利其器」。當你要對

99SQL Server 2005 Performance Tuning 效能調校

3.1綜觀的工具

CREATE PROC dbo.spPollSP @spName sysname,@interval char(8)='00:01:00'ASDECLARE @sql NVARCHAR(200)SET @sql='EXEC '+ @spName +'; WAITFOR DELAY ''' + @interval + ''''WHILE 1=1 EXEC(@sql)GO

程式碼列表 3.2:重複呼叫其他預存程序的預存程序

在範例程式碼中,透過T-SQL函數RAISERROR;將建立預存程序的通知

寫入到記錄檔中,你可以在 SqlDiag 工具程式的輸出目錄下,找到如下名

稱的記錄檔,在該記錄檔中有執行 MSDiagProcs.sql 檔案的各項輸出:

##<伺服器名稱>_<SQL Server 執行個體名稱>_MSDiagProcs_Startup.OUT

若是針對預設的執行個體,則上述名稱中的<SQL Server 執行個體名稱>

區段會消失。

接著修改 SQLDiag.Xml 檔。透過 Visual S tudio 2005 開啟該檔,

由於在檔首的 X M L根元素 d s C o n f i g 內;指定了結構描述定義檔

SQLDiag_Schema.XSD,如下所示:

<dsConfig xmlns:pssd="http://tempuri.org" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="SQLDiag_Schema.Xsd">

且在相同檔案目錄下有該 xml 結構描述定義檔案。則藉由 Visual Studio

2005 的intellisense 功能,能方便而正確地編寫 XML 元素與屬性,其畫面

如圖 3.2 所示:

Page 12: 效能調校相關工具程式 3download.microsoft.com/download/9/b/2/9b24903a-a633-4901...3 效能調校相關工具程式 C H A P T E R 「工欲善其事,必先利其器」。當你要對

100

3效能調校相關工具程式

圖 3.2:藉由 Visual Studio 2005 參照 xml schema 檔案後提供的 intellisense

功能,較能方便而正確地編寫組態檔

接著,筆者儘量刪除原始的組態檔範本 S Q L D i a g.x m l 之內容,留下

基本架構的範例後,在 <CustomDiagnostics> 元素內加入一個子元素

<CustomTask>,並藉由屬性 cmd 呼叫先前撰寫的預存程序,範例內容如

下:

<?xml version="1.0" standalone="yes"?><dsConfig xmlns:pssd="http://tempuri.org" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="SQLDiag_Schema.Xsd"><Collection setupver="3.0.1.7" casenumber="SRX000000000000"> <Machines> <Machine name="."> <MachineCollectors> <EventlogCollector enabled="false" startup="false" shutdown="true" /> <PerfmonCollector enabled="false" pollinginterval="5" maxfilesize="256"> <PerfmonCounters> <PerfmonObject name="\Processor(*)" enabled="true"> <PerfmonCounter name="\% Processor Time" enabled="true" /> </PerfmonObject> </PerfmonCounters> </PerfmonCollector> </MachineCollectors>

Page 13: 效能調校相關工具程式 3download.microsoft.com/download/9/b/2/9b24903a-a633-4901...3 效能調校相關工具程式 C H A P T E R 「工欲善其事,必先利其器」。當你要對

101SQL Server 2005 Performance Tuning 效能調校

3.1綜觀的工具

<Instances> <Instance name="mssqlserver" windowsauth="true" ssver="9" user=""> <Collectors> <SqldiagCollector enabled="false" startup= "false" shutdown="true" /> <BlockingCollector enabled="false" pollinginterval="5" maxfilesize="350"/> <ProfilerCollector enabled="false" template= "_GeneralPerformance90.xml" pollinginterval="5" maxfilesize="350"> <Events> <EventType name="TSQL"> <Event id="12" name="SQL: BatchCompleted" enabled ="false" description= "Occurs when a Transact- SQL batch has completed. " /> </EventType> </Events> </ProfilerCollector> <CustomDiagnostics> <CustomTask enabled="true" groupname="ByronSP" taskname="ReusePlanPercentage" type="TSQL_Command" point="Startup" wait= "OnlyOnShutdown" cmd="exec tempdb.dbo.spPollSP 'tempdb. dbo.spReusedPlans','00:00:10'"/> </CustomDiagnostics> </Collectors> </Instance> </Instances> </Machine> </Machines></Collection><Analysis> <Producers></Producers> <Analyzers></Analyzers> <ViewItems></ViewItems> <Trends></Trends></Analysis></dsConfig>

程式碼列表 3.3:SQLDiag 工具程式所讀取組態檔的基本架構,並透過 Custom-

Task 元素呼叫我們自行撰寫的預存程序

Page 14: 效能調校相關工具程式 3download.microsoft.com/download/9/b/2/9b24903a-a633-4901...3 效能調校相關工具程式 C H A P T E R 「工欲善其事,必先利其器」。當你要對

102

3效能調校相關工具程式

依程式碼列表 3.3 的內容修改完畢後,再以 mySqlDiag.xml 為檔名存放到

先前所建立的 SqlDiag 子目錄中。再次在主控台環境下,轉移到 SqlDiag

子目錄中,執行如下的命令:

C:\SqlDiag>sqldiag -P. -ImySqlDiag.xml

範例中透過 I 選項設定 SQLdiag 工具程式要用的組態檔為 mySqlDiag.

xml,選項 P 賦予點「.」參數代表預設目錄為當下目錄。執行時,由於未

指定 O 選項,預設 SQLdiag 工具程式的輸出結果會放在啟動目錄之下;

名稱為 SQLDIAG 的子目錄中。

按【CTRL+C】組合鍵停止蒐集資訊後,在「C:\SqlDiag\SQLDIAG」目

錄中可以看到許多記錄檔,其有一個檔案名稱的格式約略如下:

<伺服器名稱>_<SQL Server 執行個體名稱>_<GroupName>_<TaskName>_Startup.OUT

比照程式碼列表 3.3 筆者透過 CustomTask 元素所做的設定,其檔案名稱

如下 (筆者的電腦名稱為 Hu1):

HU1__ByronSP_ReusePlanPercentage_Startup.OUT

因為是針對預設的執行個體執行 T - S Q L 語法,所以檔名省掉了

<S Q L S e r v e r 執行個體名稱>這個區段,而導致 <伺服器名稱> 與

<GroupName> 區段中間連續兩個底線符號。

3.1.1.2 SQLDiag 公用程式預設蒐集的項目

除了客製化所需要蒐集的資訊外,在原始的 SQLDiag.Xml 檔案內,有

著許多既定的資料蒐集方式,你僅要設定各元素的「enabled」屬性為

「false」或「true」就可以停止或啟動該項資訊的蒐集。以下就來看看各

項設定:

Windows 系統事件記錄

僅需要將 <MachineCollectors> 元素的子元素 <EventlogCollector> 之

「enabled」屬性設為「true」,就可以要求 SQLdiag 工具程式擷取

Page 15: 效能調校相關工具程式 3download.microsoft.com/download/9/b/2/9b24903a-a633-4901...3 效能調校相關工具程式 C H A P T E R 「工欲善其事,必先利其器」。當你要對

103SQL Server 2005 Performance Tuning 效能調校

3.1綜觀的工具

Windows 事件記錄。如下所示:

<EventlogCollector enabled="true" startup="true" shutdown="true" />

SQLdiag 工具程式執行完畢後,在預設的結果輸出資料夾 SQLDIAG 下,

可能看到

「<主機名稱>_applog_Startup.txt」、「<主機名稱>_seclog_Startup.txt」、「<主機名稱>_syslog_Startup.txt」

「<主機名稱>_applog_Shutdown.txt」、「<主機名稱>_seclog_Shutdown.txt」、「<主機名稱>_syslog_Shutdown.txt」

兩組檔案,這與你設定「s tar tup」和「shutdown」兩個屬性有關,

它們代表是在 SQLdiag 工具程式一起動就取得資訊,還是截止時再將

Windows 系統事件記錄讀取出來,存放到檔案上。而由檔名的 app、

sec、sys 也可看出它們分別是Windows 系統事件記錄中的「應用程

式」、「安全性」和「系統」。

Windows 系統效能計數器

僅需要將 <MachineCollectors> 元素的子元素 <PerfmonCollector> 之

「enabled」屬性設為「true」,就可以要求 SQLdiag 工具程式擷取

Windows 效能計數器的各種數值。如下所示:

<PerfmonCollector enabled="true" pollinginterval="5" maxfilesize="256"> <PerfmonCounters> <PerfmonObject name="\Processor(*)" enabled="true"> <PerfmonCounter name="\% Processor Time" enabled="true" /> ⋯ </PerfmonObject> <PerfmonObject name="\Memory" enabled="true"> <PerfmonCounter name="\Page Faults/sec" enabled="true" /> <PerfmonCounter name="\Available MBytes" enabled="true" /> ⋯ </PerfmonObject> ⋯ </PerfmonCounters></PerfmonCollector>

程式碼列表 3.4:透過 PerfmonCollector 元素設定要擷取的系統效能計數器

Page 16: 效能調校相關工具程式 3download.microsoft.com/download/9/b/2/9b24903a-a633-4901...3 效能調校相關工具程式 C H A P T E R 「工欲善其事,必先利其器」。當你要對

104

3效能調校相關工具程式

SQLdiag 工具程式執行完畢後,在預設的結果輸出資料夾下,可看到

SQLDIAGn.BLG檔案,並以 Windows 系統所提供的「效能」工具程式檢

視其內容。至於記錄的大小與檔案數量的多寡,取決於你設定需要記錄的

效能計數器之數量,以「pollinginterval」屬性設定的輪詢頻率,和儲存

記錄的檔案大小「maxfilesize」 (單位為 megabyte)。

以滑鼠雙擊該檔案,就可以叫出Windows作業系統的「效能」工具程式,

透過工具列的「檢視記錄檔資料」按鈕 (上方工具列的第四個按鈕,圖示

是個圓筒),叫出「系統監視器內容」對話窗,選擇上方的「記錄檔」選項

後,透過「新增」按鈕,可選擇先前產生的 SQLDIAGn.BLG 檔案,如圖

3.3 所示:

圖 3.3:選擇「效能」工具程式的資料來源為先前的記錄檔

選擇資料來源後,透過工具列的「新增」按鈕(上方工具列的第8個按鈕,

圖示是個加號),叫出「新增計數器」對話窗,選擇你所要呈現的計數器,

如圖 3.4 所示:

Page 17: 效能調校相關工具程式 3download.microsoft.com/download/9/b/2/9b24903a-a633-4901...3 效能調校相關工具程式 C H A P T E R 「工欲善其事,必先利其器」。當你要對

105SQL Server 2005 Performance Tuning 效能調校

3.1綜觀的工具圖 3.4:選擇「效能」工具程式要呈現的計數器

而後便可以觀察先前錄製的系統資源使用狀況。

到此,相信你應該對於 SqlDiag 工具程式有初步的概念,並能透過此工具

觀察資料庫的執行狀況,客製化地取得局部的作業系統資訊,如效能計數

器與 Windows 事件。接下來,繼續介紹 SqlDiag 工具程式所提供的其他

記錄內容、各種參數功能與執行模式。

3.1.1.3 SQLDiag 公用程式蒐集資訊特定資訊

SQLDiag 工具程式讀取的 XML 組態檔中,<MachineCollectors> 元

素下,針對效能計數器與 Windows 事件的設定。在該組態檔接下來的

<Instances> 元素中,設定如何取得 SQL Server 執行個體的相關資訊,由

於同一台伺服器可以安裝多個執行個體,因此 <Instances> 元素下也能設

定一個以上的 <Instance> 子元素,範例如下:

<Instances> <Instance name="mssqlserver" windowsauth="true" ssver="9" user=""> <Collectors> ⋯

<Instance name="SqlExpress" windowsauth="true" ssver="9" user="">

Page 18: 效能調校相關工具程式 3download.microsoft.com/download/9/b/2/9b24903a-a633-4901...3 效能調校相關工具程式 C H A P T E R 「工欲善其事,必先利其器」。當你要對

106

3效能調校相關工具程式

將 name 屬性值設為星號「*」,則相同的錄製方式會同時施行在該機器上

的多個執行個體,範例如下:

<Instance name="*" ⋯

在 <Instance> 元素下透過 <Collectors> 子元素,可以完成多項針對 SQL

Server 執行個體的記錄設定,首先是 <SqldiagCollector> 元素,它要求

是否要在 SQLdiag 工具程式啟動或是停止時,呼叫在 MSDiagProcs.sql

檔案內所定義的 temp.dbo.sp_sqldiag09 預存程序,該預存程序是用來廣

泛蒐集 SQL Server 執行個體的各項資訊,其設定如下:

<SqldiagCollector enabled="false" startup="true" shutdown="true" />

而執行預存程序所產生的輸出檔案,則以如下的檔名格式儲存在資料輸出

目錄下:

<伺服器名稱>_<執行個體名稱>_sp_sqldiag_Startup.OUT

<伺服器名稱>_<執行個體名稱>_sp_sqldiag_Shutdown.OUT

這些檔案都是單純的文字內容,經由一般的文字編輯器即可檢視與搜尋。

<Collectors> 元素下的另一個 <BlockingCollector> 子元素;其功能與上

述的 <SqldiagCollector> 子元素相似,但它是呼叫 MSDiagProcs.sql 檔

案內所定義的 temp.dbo.sp_trace09 預存程序,並設定錄製檔案大小與輪

詢的週期,其設定如下:

<BlockingCollector enabled="true" pollinginterval="5" maxfilesize="350" />

由於這是要追蹤各連接存取資料時,造成的彼此互相鎖定,因此透過

「SQL Server Management Studio」以兩條連接,各別執行如下的語法,

營造鎖定與被鎖定:

Page 19: 效能調校相關工具程式 3download.microsoft.com/download/9/b/2/9b24903a-a633-4901...3 效能調校相關工具程式 C H A P T E R 「工欲善其事,必先利其器」。當你要對

107SQL Server 2005 Performance Tuning 效能調校

3.1綜觀的工具

begin tran update Northwind.dbo.customers set companyname='asdf3qwer' where customerid='alfki'

select * from Northwind.dbo.customers

該預存程序實際上是透過「S Q L Tr a c e」功能,追蹤「E r r o r s a n d

Warnings」→「Blocked Process report」事件,輸出的檔名格式如下:

<伺服器名稱>_<執行個體名稱>_sp_trace_blk.trc

該檔案需要用「SQL Server Profiler」工具程式開啟,如圖 3.5 所示:

圖 3.5:透過 SQL Server Profiler 工具程式檢視 SQL Trace 所追蹤的 block 事件

從圖 3.5 可以看到先前所營造鎖定與被鎖定的兩條連接相關資訊。

Page 20: 效能調校相關工具程式 3download.microsoft.com/download/9/b/2/9b24903a-a633-4901...3 效能調校相關工具程式 C H A P T E R 「工欲善其事,必先利其器」。當你要對

108

3效能調校相關工具程式

SQL Trace 或 SQL Server Profiler

SQL Trace 是 SQL Server 資料庫引擎提供的可追蹤事件與資料,如執行

T-SQL 批次、發生鎖定或死結⋯等。針對這些已經定義好的事件;在發

生之時蒐集符合篩選條件的資料,放入各目的地佇列中,之後再存放到檔

案,或經由「SQL Server Management Object(SMO)」物件,讓其他的

SQL Server 前端應用程式,如 SQL Server Profiler,或自行撰寫的監控程

式使用這些追蹤資訊。而一個資料庫引擎可以同時啟動多個追蹤,因此,

能針對不同問題挑選不同的事件、過濾條件與存放結果的方式,擷取與

追蹤有興趣的事件,但要顧慮其對系統效能的影響。整體架構如圖 3.6 所

示:

圖 3.6:SQL Trace 與 SQL Server Profiler 的架構關係

關於 SQL Trace 的詳細資料,可以參閱「SQL Server 2005 線上叢書」的

內容,其所在結點如下:

「SQL Server Database Engine」→「管理 Database Engine」→「監視

和微調效能」→「監視事件」。

Page 21: 效能調校相關工具程式 3download.microsoft.com/download/9/b/2/9b24903a-a633-4901...3 效能調校相關工具程式 C H A P T E R 「工欲善其事,必先利其器」。當你要對

109SQL Server 2005 Performance Tuning 效能調校

3.1綜觀的工具

SQLDiag 工具程式除了上述特別錄製鎖定與被鎖定的資訊外,也可以

透過 SQL Trace 追蹤 SQL Server 內所發生的各種事件,在組態檔的

<ProfilerCollector> 元素內設定,部分內容如下:

<ProfilerCollector enabled="true" template="_GeneralPerformance90.xml" pollinginterval="5" maxfilesize="350"><Events> <EventType name="Errors and Warnings"> <Event id="16" name="Attention" enabled="true" description ="Occurs when attention events, such as client-interrupt requests or broken client connections, happen." />⋯

</EventType> <EventType name="Locks"> <Event id="148" name="Deadlock Graph" enabled="true" description="Occurs when an attempt to acquire a lock is canceled because the attempt was part of a deadlock and was chosen as the deadlock victim. Provides an XML description of a deadlock." />⋯

</EventType>⋯

</Events>⋯

程式碼列表 3.5:設定要透過 SQL Trace 追蹤的各種事件

在程式碼列表 3 .5 中,僅列出了少數 S Q L Tr a c e 可追蹤的事件,而

SQLDiag 工具程式預設產出的 SQLDiag.xml 組態檔中,有完整的各種

事件定義,不過在個別事件的 <Event> 元素之「enabled」屬性多設為

false,若要錄製該項事件,需先設定為 true。

透過「SQL Server Profiler」工具程式可以檢視 SQL Trace 錄製的檔案。

開啟「SQL Server Profiler」工具程式後,經由主選單「開啟」→「追蹤

檔案」選項;選擇 SQLDiag 工具程式的輸出目錄下以 .trc 為副檔名的檔

案,其檔名格式為:

<伺服器名稱>_<執行個體名稱>_sp_trace_n.trc

Page 22: 效能調校相關工具程式 3download.microsoft.com/download/9/b/2/9b24903a-a633-4901...3 效能調校相關工具程式 C H A P T E R 「工欲善其事,必先利其器」。當你要對

110

3效能調校相關工具程式

當設定了檔案大小限制,在記錄檔超過限制時,SQL Trace 會自動產生

新的檔案,並在檔名添加新的流水號。而有多個追蹤檔時,SQL Server

Profiler 會提示是否要擷取在該追蹤檔其後續的檔案:

圖 3.7:當有多個追蹤檔時,SQL Server Profiler 會提示是否要組裝這些追蹤檔,

以便整合在 Profiler 中一起觀察

至此,看到 SQLDiag 工具程式可以同時設定追蹤效能計數器和 SQL

Trace,而 SQL Server 2005 版本後的 SQL Server Profiler 工具程式能

夠一起呈現這兩者的結果,讓你比較 SQL Server 引擎執行某個動作的當

下,系統資源的使用情形。

如同上述開啟 .trc 檔案後,經由主選單「開啟」→「匯入效能資料」選

項;選擇 SQLDiag 工具程式的輸出目錄下;以 .blg 為副檔名的檔案,

接下來,在「[效能計數器限制]對話方塊」中勾選先前有設定錄製之計數

器,便可以如圖 3.8 所示,一體呈現分析:

Page 23: 效能調校相關工具程式 3download.microsoft.com/download/9/b/2/9b24903a-a633-4901...3 效能調校相關工具程式 C H A P T E R 「工欲善其事,必先利其器」。當你要對

111SQL Server 2005 Performance Tuning 效能調校

3.1綜觀的工具

圖 3.8:透過 SQL Server Profiler 工具程式整合分析 SQL Trace 與效能計數器的

資料

若你想要在兩者間比對,僅需要以滑鼠點選上方 SQL Server 任一筆事件

記錄,或是中間的效能計數器,SQL Server Profiler 皆會立刻同步兩個視

窗,以反白或紅線呈現相同時間點的對應。另外,在中間的效能計數器區

塊還可以按住滑鼠左鍵,拖曳出一個時間區段後,SQL Server Profiler 將

放大該區段,以呈現細節。若你想要回復原始的整個時間區段,只要在上

方 SQL Server 事件視窗中,點選在該時間區段外的任一筆記錄即可。

MSInfo32

討論至此,可以發現 SQLdiag 工具程式已同時蒐集了 Windows 系統的

事件與效能資訊、SQL Server 執行個體所發生的狀況等。除此之外,在

XML 組態檔接下來的 <CustomDiagnostics> 節點內,使用了 MSInfo32.

exe 工具程式蒐集系統相關資訊。部分設定碼如下所示:

Page 24: 效能調校相關工具程式 3download.microsoft.com/download/9/b/2/9b24903a-a633-4901...3 效能調校相關工具程式 C H A P T E R 「工欲善其事,必先利其器」。當你要對

112

3效能調校相關工具程式

<CustomTask enabled="true" groupname="MsInfo" taskname="Get MSINFO32" type="Utility" point="Startup" wait="OnlyOnShutdown" cmd="start /B /WAIT MSInfo32.exe /computer %server% /report &quot;%output_path%%server%_MSINFO32.TXT &quot; /categories +SystemSummary+ResourcesConflicts+Resources- IRQS+ComponentsNetwork+ComponentsStorage+ComponentsProblem- Devices+SWEnvEnvVars+SWEnvNetConn+SWEnvServices+SWEnvProgram- Group+SWEnvStartupPrograms" />

程式碼列表 3.6:SQLDiag.xml 組態檔中,設定透過 msinfo32 工具程式蒐集

Windows 作業系統所提供的軟硬體資訊

msinfo32.exe 是 Windows 作業系統所提供的蒐集與呈現軟硬體資訊之工

具程式,你可以透過「開始」→「執行」選項,在「執行」對話窗內直接

輸入 msinfo32,便可叫出該工具程式。各 Windows 作業系統版本所執行

的 MSInfo32.exe 畫面皆不相同,因此,你在自己機器上所看到的程式畫

面可能與圖 3.9 稍有不同:

圖 3.9:透過 MSInfo32.exe 可以取得 Windows 系統的各項資訊

點選 MSInfo32.exe 主選單的「檔案」→「輸出」選項,可以將系統當下

的各項資訊輸出成文字檔,供你日後參考。由於輸出內容包含軟硬體的各

項細節資訊,所以,按下「輸出」後可能要稍等一下。

Page 25: 效能調校相關工具程式 3download.microsoft.com/download/9/b/2/9b24903a-a633-4901...3 效能調校相關工具程式 C H A P T E R 「工欲善其事,必先利其器」。當你要對

113SQL Server 2005 Performance Tuning 效能調校

3.1綜觀的工具

若是經由 sqldiag 工具程式取得 msinfo32 工具程式的輸出結果,在預設

的輸出資料夾下,可看到以「<主機名稱>_MSINFO32.TXT」命名之檔

案,透過一般的文字編輯器即可檢視內容。

總括來說,除了從 Windows 效能計數器、事件記錄檔之外,sqldiag 工具

程式取得診斷資訊之方式是藉由 SQL Server 2005 所提供之 sqlcmd.exe 公

用程式,連接到 SQL Server 執行個體執行 T-SQL 語法,或經 Windows

命令處理器執行之工具程式 (如上述的 msinfo32 )收集而來。SQLdiag 會

針對每部電腦各使用一條工作執行緒,以監視其他工具程式收集診斷資料

的作業,通常會同時等待多項工具作業完成。在收集過程中,若沒有指定

輸出路徑,SQLdiag 會將每個診斷的輸出遞送到預設的 <系統磁碟機>:\

Program Files\Microsoft SQL Server\90\Tools\Binn\SQLDIAG 目錄

之中。由於監控作業若設定不當,可能本身就影響效能,因此,你需要對

監控作業有一定的了解與監控 。

3.1.1.4 透過 SqlNexus 工具程式分析蒐集的資訊

當透過上述所介紹的 SqlDiag 工具程式蒐集完資料後,將會在預設目錄

下產生一大堆的資料檔案,除了按照筆者的解釋,個別利用文字編輯器或

對應的工具程式檢視外,在 Addison Wesley 出版的「SQL Server 2005

Practical Troubleshooting: The Database Engine」一書中,有提供一個

整合分析的免費工具程式:SqlNexus。由於書籍光碟所附的版本較舊,你

可以在如下的網址中,取得最新版本:

http://www.sqlnexus.net/

經由捷徑或網址叫起 SqlNexus 工具程式後,它會先要求連結到一個 SQL

Server 執行個體,你設定完登入方式後,SqlNexus 在該 SQL Server 執行

個體內建立一個名為 sqlnexus 的資料庫,以存放前述 SqlDiag 工具程式

所蒐集的資料。

進入程式主畫面後,點選左下方的「Import」選項,在「Data Import」

對話窗中,指定先前 SqlDiag 工具程式的輸出目錄,SqlNexus 工具程式

Page 26: 效能調校相關工具程式 3download.microsoft.com/download/9/b/2/9b24903a-a633-4901...3 效能調校相關工具程式 C H A P T E R 「工欲善其事,必先利其器」。當你要對

114

3效能調校相關工具程式

就會開始解析各種資料檔,並匯入到先前建立的sqlnexus 資料庫中。而後

你可以分別點選左上方已經設計好的「SQL Server Reporting Services」

格式之報表,整體畫面如圖 3.10 所示:

圖 3.10:透過SQL Nexus 工具程式載入 (Import) SQLDiag 工具程式所產生的

輸出資料後,可以進行整體的分析

SQL Nexus 是個簡單的數據解析器與報表檢視介面,直觀易用。雖然這個

工具程式用起來還有些小 bug 的感覺 ,但已經可以提供整體分析的能

力,期待作者可以修好這些 bug,並具體解釋客製化分析報表的設計與嵌

入,則這一系列的蒐集與分析過程將更為具體且有延展性。

3.1.1.5 SQLDiag 公用程式的各種設定與執行方式

接下來,我們繼續介紹 SqlDiag 工具程式所提供的各種引數功能與執行模

式,如何在特定時間重複蒐集資訊。

在 SQL Server 2005 中,SQLDiag 公用程式已有大幅改變。其命令列選

項與 SQL Server 2000 版本的 SQLDiag 公用程式並不相容。例如,前一

Page 27: 效能調校相關工具程式 3download.microsoft.com/download/9/b/2/9b24903a-a633-4901...3 效能調校相關工具程式 C H A P T E R 「工欲善其事,必先利其器」。當你要對

115SQL Server 2005 Performance Tuning 效能調校

3.1綜觀的工具

版提供 -I、-U 、-P、-E 選項可指定要連線的本機 SQL Server 執行個體,

以及登入方式,在此版均不適用。線上說明也特別強調,此版公用程式的

選項依然可能變更,若你開發的應用程式或指令碼依賴其命令列選項或行

為,則在未來 SQL Server 版本中可能無法正確運作。

SQLDiag 公用程式的選項設的繁多,在此僅簡略描述部分功能,其語法定

義如下:

sqldiag { [/?] } | { [/I < SQLdiag 要用的組態檔>] [/O<輸出檔案名稱>] [/P<設定支援資料夾路徑>] [/N<設定輸出的檔案是否要覆寫>] [/C<檔案是否要壓縮>] [/B [+] <工具程式執行的開始時間>] [/E [+] <工具程式執行的結束時間>] [/A SQLdiag_application_name] [/M 機器名稱] [/X] [/R]} | { [START | STOP | STOP_ABORT] } | { [START | STOP | STOP_ABORT] /A SQLdiag_應用程式名稱 }

程式碼列表 3.7:SQLDiag 公用程式所提供的執行選項

?:顯示使用說明。

I < 指定 SQLdiag 要用的組態檔>:若不指定,則 SQLdiag 會使用

SQLDiag.Xml 預設組態檔。

O <輸出的資料夾名稱>:將 SQLDiag 的輸出重新導向到指定的資

料夾。如果未指定 O 選項,SQLdiag 輸出會寫入 SQLdiag 可執

行檔所在的資料夾之下,名稱為 SQLDIAG 的子資料夾中。如果

SQLDIAG 資料夾不存在,SQLdiag 會嘗試建立它。

例如,使用下列程式碼執行SQLDiag 公用程式時,便會將蒐集的結果

輸出於 C 磁碟機的MyDiag資料夾中,若 MyDiag 資料夾不存在,則

會建立一個新的 MyDiag 資料夾。

SQLDiag –O c:\MyDiag

Page 28: 效能調校相關工具程式 3download.microsoft.com/download/9/b/2/9b24903a-a633-4901...3 效能調校相關工具程式 C H A P T E R 「工欲善其事,必先利其器」。當你要對

116

3效能調校相關工具程式

P <設定支援資料夾路徑>:依預設為 SQLdiag 可執行檔所在的資

料夾。此資料夾包含 SQLdiag 支援檔案,例如,XML 組態檔、

Transact-SQL 指令碼和公用程式,以及在診斷收集期間使用的其

他檔案。如果使用此選項來指定支援檔案路徑,且相關的檔案尚未

存在的話,SQLdiag 會將所需要的支援檔案自動複製到指定的資料

夾。

/M:設定要存取的機器名稱,SQLDiag 可以蒐集其他機器上的資

訊。

/X:以快照模式執行。SQLdiag 蒐集到組態檔設定所需的各種資

料後,便自動關閉。而不似一般的執行模式,會持續等待並輪詢目

標,以取得系統一段時間的執行狀況。

N <設定輸出的檔案是否要覆寫>:可用的選項如下:

1 = 覆寫輸出資料夾(預設值)。

2 = 當 SQLdiag 啟動時,會將輸出資料夾重新命名為 SQLDIAG_

00001、S Q L D I A G_00002 等。在重新命名目前輸出資料夾之後,

SQLdiag 會將輸出寫入預設輸出資料夾 SQLDIAG 中。

3.1.1.6 在特定時間啟動與停止 SQLDiag 工具程式的資訊蒐集

搭配營運工作的節奏,系統常會週期性地發生例外狀況,或是緩慢累積變

化的趨勢。這需要透過排程在特定時間點啟動資訊蒐集,而後再彙整分

析,才容易找出端倪。SQLDiag 工具程式支援在特定時間啟動與停止蒐集

資訊的選項,相關引數定義如下:

/B [+]<YYYYMMDD_HH:MM:SS>:指定開始收集資料的日期和時

間,使用 24 小時制。例如,下午 1:00 應該指定為 13:00:00。以下

範例設定在 2007 年 9 月 16 日凌晨 1 時開始蒐集資料:

sqldiag /ImySQLDiagNothing.xml /P. /B20070916_01:00:00

上述範例中,為了簡化測試,筆者定義了一個停止所有蒐集項目的

XML 組態檔 mySQLDiagNothing.xml,儘量簡化 SQLDiag 工具程式

所要執行的工作,光就時間引數測試,減少其他因素的干擾。

Page 29: 效能調校相關工具程式 3download.microsoft.com/download/9/b/2/9b24903a-a633-4901...3 效能調校相關工具程式 C H A P T E R 「工欲善其事,必先利其器」。當你要對

117SQL Server 2005 Performance Tuning 效能調校

3.1綜觀的工具

若是指定相對於目前的時間,可在引數內容中增添 + 號;不含日期且勿

在 + 號和指定的起始時間之中插入空格。範例如下:

sqldiag /B +01:00:00

SQLdiag 會等 1 小時後開始收集資訊。如果指定的開始時間已經過去,

SQLdiag 會變更開始日期,使開始的日期設定在下一天。

/E [+]<YYYYMMDD_HH:MM:SS>:指定停止收集資料的日期和時

間。同樣可利用 + 號不帶日期,以指定相對於開始蒐集後的截止時

間。範例如下:

/B +01:00:00 /E +02:00:00

SQLdiag 會等 1 小時再開始收集資訊,之後會收集 2 小時再停止及結

束。如果未指定 /B,則立即開始收集診斷資訊,並在 /E 所指定的日期

和時間結束。不管是起始或停止,SQLdiag 工具程式會使用執行所在之

電腦的時間。

換句話說,使用 /B <起始時間> 和 /E <終止時間> 引數,讓你除了透

過 Windows 作業系統排程,或 SQL Server Agent Services 的 Job 之

外,也可直接透過 SQLdiag 工具程式自身的功能來指定時間;自動啟

動及停止收集資料。

例如,若要針對常常在凌晨 2 點出現的問題蒐集資訊,可以將 SQLdiag

設定成在凌晨 1 點自動開始,並在 4 點停止。範例如下:

sqldiag /ImySQLDiagNothing.xml /P. /B20070916_01:00:00 /E+03:00:00

在命令列模式執行上述指令後,SQLdiag 工具程式呈現的執行畫面如圖

3.11 所示:

圖 3.11:指定特定的時間啟動蒐集後,持續取得 3 個小時的資訊再停止

Page 30: 效能調校相關工具程式 3download.microsoft.com/download/9/b/2/9b24903a-a633-4901...3 效能調校相關工具程式 C H A P T E R 「工欲善其事,必先利其器」。當你要對

118

3效能調校相關工具程式

若在「命令提示字元」環境啟動了 SQLdiag 工具程式,該程式因為要

等待執行而停滯,而你隨時想要終止執行,都可以透過【Ctrl+C】快捷

鍵以結束該程式。

另外,如前所述,如果指定的開始或結束日期和時間已經過去,

SQLdiag 會變更日期,使開始日期和時間設定在未來。範例如下:

sqldiag /ImySQLDiagNothing.xml /P. /B+00:00:10 /E20070914_11:56:00

筆者在 2007/09/15 11:54:49 執行上述命令,但結束時間卻是前一日的

11:56:00,其結果如圖 3.12 所示:

圖 3.12:停止的日期時間已過,SQLDiag 工具程式自動加一日當作停止時間

因為目前的日期是 2007/09/15,在開始收集診斷資訊之前,結束時間

便已經過去。SQLDiag 會將結束日期自動調整至隔天。所以在此範例

中,診斷收集是從程式執行後 10 秒開始蒐集資料,並於 2007/09/15日

的同一時間停止收集。所以圖 3.12 下方等 11:56:00 時間到才出現停止

Page 31: 效能調校相關工具程式 3download.microsoft.com/download/9/b/2/9b24903a-a633-4901...3 效能調校相關工具程式 C H A P T E R 「工欲善其事,必先利其器」。當你要對

119SQL Server 2005 Performance Tuning 效能調校

3.1綜觀的工具

蒐集的訊息,但呈現的結束日期仍是啟動時的設定,也就是前一天的日

期。

週期循環地停止和重新啟動 SQLdiag 工具程式以收集資訊

若要每天收集一組資訊,且不要每天手動地啟動和停止 SQLdiag,可使用

/L 引數。它讓 SqlDiag 在排程關閉後,自行重新啟動來連續執行。

若指定 /L,而 SQLdiag 因為達到 /E 引數指定的結束時間而停止,或因

為使用 /X 引數(快照集模式)而停止,SQLdiag 都會自動重新啟動新的錄

製流程。

下列範例指定以連續模式執行 S Q L d i a g,以便在每天的 01:00:00 和

03:00:00 之間,自動收集資料:

sqldiag /B 01:00:00 /E 03:00:00 /L

下列範例指定以連續模式執行 SQLdiag。每天在 15:45:00 取得系統的快照

資料集之後,隔日自動重新啟動:

sqldiag /ImySQLDiag.xml /B 15:45:00 /P. /X /L /N2

上述範例加上 N 2 引數,讓 S Q L D i a g 工具程式自動生成新的

SqlDiag_nnnn 子目錄,以避免重覆詢問是否使用相同輸出目錄並覆蓋同

名檔案。為了呈現連續啟動的畫面,筆者執行如下的選項:

sqldiag /ImySQLDiagNothing.xml /P. /B+00:01:00 /E+00:01:00 /L /N2

執行結果如圖 3.13 所示:

Page 32: 效能調校相關工具程式 3download.microsoft.com/download/9/b/2/9b24903a-a633-4901...3 效能調校相關工具程式 C H A P T E R 「工欲善其事,必先利其器」。當你要對

120

3效能調校相關工具程式

圖 3.13:指定相對的啟動與停止時間,並週期性地重新啟動

在圖 3.13 中可以看到 SqlDiag 等待一分鐘、蒐集一分鐘、停止蒐集,而後

再重新開始的輪迴。

當利用 SQLdiag 長時間收集診斷資料,且在這段時間中,管理者可能登

出執行 SQLdiag 的機器,甚至重新啟動機器,這需要將 SqlDiag 當作

Windows 系統服務來執行,才可以自動且持續地執行,接下來我們將討

論此功能。

3.1.1.7 將 SQLDiag 登錄成 Windows 系統服務

透過 /R 選項,可將 SQLdiag 登錄成 Windows 服務來執行。若未搭配

/A 引數,預設的服務名稱是 SQLDIAG。將 SQLDiag 登錄成服務時,命

Page 33: 效能調校相關工具程式 3download.microsoft.com/download/9/b/2/9b24903a-a633-4901...3 效能調校相關工具程式 C H A P T E R 「工欲善其事,必先利其器」。當你要對

121SQL Server 2005 Performance Tuning 效能調校

3.1綜觀的工具

令列所指定的任何其他引數都會保留下來,在服務啟動時,會重複使用它

們,以達成我們前述的各項需求。

sqldiag /ImySQLDiagNothing.xml /P"C:\SqlDiag" /B+00:01:00 /E+00:01:00 /L /N2 /R

經由 /R 引數註冊的執行畫面如圖 3.14 所示:

圖 3.14:註冊、執行、停止和解除 SqlDiag 服務的過程

由於 SqlDiag 是以服務的方式執行,預設的目錄會變成 C:\WINDOWS\

system32,因此筆者在範例語法中,特別透過 /P 選項指定目錄。另外,

SqlDiag 會將執行過程中的相關資訊寫入 Windows 系統的「應用程式」

事件,若啟動服務有問題,可以透過 Windows 系統的「事件檢視器」觀

察 SQLDiag 所輸出的錯誤訊息。

若要啟動或重新啟動 S Q L D I A G 服務,可在命令列執行「S Q L D i a g

START」命令,或是利用 Windows 的「net start sqldiag」命令來啟動。

當然,經由 Windows 系統的「服務」也可以設定、啟動或停止 SqlDiag

服務。

一旦 SQLDIAG 服務啟動成功,在「Windows 工作管理員」便可以看到

SQLDiag.exe 執行檔出現在處理程序中。各種透過 Windows 系統工具觀

察該服務的狀況如圖 3.15 所示:

Page 34: 效能調校相關工具程式 3download.microsoft.com/download/9/b/2/9b24903a-a633-4901...3 效能調校相關工具程式 C H A P T E R 「工欲善其事,必先利其器」。當你要對

122

3效能調校相關工具程式

圖 3.15:透過 Windows 作業系統觀察 SqlDiag 服務的執行狀況

與上述啟動服務相反的是,在命令提示列可透過「sqldiag stop」、「net

stop sqldiag」或是「服務」管理程式來停止 SqlDiag 服務的執行。若要

從 Windows 系統取消 SQLDIAG 服務登錄,可指定 /U 引數。

在註冊時,使用 /A <執行個體名稱> 引數可以變更預設 SQLDIAG 服務

的名稱,SQLdiag 會自動將 DIAG$ 字串置於 /A 指定的執行個體名稱之

前。換句話說,若執行的語法如下:

sqldiag /R /A instance1

則 Windows 系統內註冊的服務名稱為 DIAG$instance1。一旦使用 /A 引

數來指定 SQLdiag 的多執行個體,在啟動服務時,也可以在命令列上傳

遞 SQLdiag 執行個體名稱。例如,啟動上述執行個體 Instance1,可使用

下列語法:

SQLDIAG START /A Instance1

再提醒一點,當重新啟動 SQLdiag 服務時,它會覆寫目前輸出資料夾的

內容。若要避免發生此情形,請在命令列上記得指定 /N 2 引數,以重新