﻿# 如何在 SQL 2008 安裝 Performance Dashboard Reports

微軟在 SQL Server 2005 Service Pack 2 推出的時候也釋出了一套免費的 [Performance Dashboard Reports](http://web.archive.org/web/20120104023532/http://www.microsoft.com/download/en/details.aspx?id=22602) 自訂報表，透過此報表可以很輕易的分析出整台 SQL Server 的執行效能，是一個非常非常實用的效能分析工具，幾乎是每位 DBA 必備的工具之一，可惜的是到了 SQL Server 2008 之後就不再更新，以致於無法正常安裝到 SQL Server 2008 之後的版本，本文章將說明正確的安裝步驟，讓此報表也能夠在 SQL Server 2008 上正確執行。

在我們下載完 [SQL Server 2005 Performance Dashboard Reports](http://web.archive.org/web/20120104023532/http://www.microsoft.com/download/en/details.aspx?id=22602) 之後，直接點擊 \*.msi 檔進行安裝，安裝到選取安裝路徑時，請記得要選取正確的 SQL Server 2008 的安裝目錄才行，如下圖示請點選 **Browse** 按鈕：

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/99e46a50476467916c79-SNAGHTMLbd84306.png)

然後預設的安裝路徑為 C:\\Program Files (x86)\\Microsoft SQL Server\\90\\Tools\\PerformanceDashboard\\ 我們只要把該路徑的 90 修改成 100 即是 SQL Server 2008 的預設安裝路徑，不過其實安裝在哪裡都沒什麼關係，因為之後報表還是需要被手動載入，但基本上我不會亂裝到其他的路徑：

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/1b8ac33d45ef1f5bcbc9-SNAGHTMLbd9b2e8.png)

安裝完後在安裝目錄下會看見一個 **setup.sql** 指令檔，這個指令檔必須手動到 SQL Server 執行，才會在 **msdb** 資料庫建立起 [Performance Dashboard Reports](http://web.archive.org/web/20120104023532/http://www.microsoft.com/download/en/details.aspx?id=22602) 所需的函數與預存程序：

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/18ad7f440e71b577e1f0-image_1030.png)

若在 SQL Server 2005 資料庫伺服器執行這個指令檔 ( Service Pack 2 以後的更新 ) 並不會有任何問題，但是在 SQL Server 2008 的資料庫伺服器就會遇到以下錯誤：

    Msg 207, Level 16, State 1, Procedure usp\_Main\_GetCPUHistory, Line 6  
    無效的資料行名稱 'cpu\_ticks\_in\_ms'。  
    Msg 15151, Level 16, State 1, Line 1  
    無法 尋找 物件 'usp\_Main\_GetCPUHistory'，因為它不存在或您沒有權限。

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/daf34ddfc81c3baf0b8e-image_1031.png)

這個錯誤的主因出在於原本在 SQL Server 2005 裡有個 DMV (Dynamic Management Views) 叫做 [sys.dm\_os\_sys\_info](http://msdn.microsoft.com/en-us/library/ms175048.aspx)，在這個版本的 DMV 有個 cpu\_ticks\_in\_ms 欄位，但在 SQL Server 2008 之後的版本該欄位被修改成 ms\_ticks，所以你必須手動修改 **setup.sql** 指令檔，在 第 218 行的地方將該欄位修正，修正後重新執行一次就可以建立完成。

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/b8731ef5860213ab061b-image_1032.png)

接著就是利用 Management Studio 從伺服器層級開啟自訂報表，如下圖示：

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/72e234a7333a6768006e-image_1033.png)

然後切換至 [Performance Dashboard Reports](http://web.archive.org/web/20120104023532/http://www.microsoft.com/download/en/details.aspx?id=22602) 的安裝目錄並選取 performance\_dashboard\_main.rdl 報表

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/92120b2893921360a381-image_1034.png)

按下開啟舊檔後，報表就會立即出現正確的效能分析報告，如下圖示（點圖可放大顯示）

[![image](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/4e3f2d84bf84db4277da-image_thumb_69.png "image")](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/fd7b44e17f3f8a35aeff-image_1035.png)

這裡其實包含好幾份子報表，都是相互連動的，所分析出來的資訊之寶貴無法言寓，有心想研究的人建議可參考安裝目錄下的 **PerfDash.chm** 文件，這裡有每一份報表的詳細說明：

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/7d4585cb66a5e6e6c6d0-image_1036.png)

在點選進 (Drill down) 子報表之後，如果要回上一頁，可以按報表左上角的「向後巡覽」按鈕，這樣就可以不用每次重新開啟報表：

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/a2a0425b9a49c2de6dbf-image_1037.png)

在眾多報表之中，我覺得最有用的應該就是 **Missing Indexes** (遺失的索引)：

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/1958d215b21dabb6cf00-image_1038.png)

這份報表可以幫我們找出有哪些表格遺失了某些「可能需要」的索引（切記：越多的索引代表資料寫入速度越慢），然而在分析出所有**遺失的索引**後，你可以在 Proposed Index 欄位發現他連建立索引的語法都幫你寫好了，可惜的是你無法直接從報表上複製文字下來，只能先匯出 Excel 再複製其 T-SQL 語法：

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/daefdfe6c6c90cdc4c97-image_1039.png)

由於你不應該把所有「可能遺失的索引」都建立起來，因此以下提供一個基本的判斷原則，幫助你選擇到底有哪些索引應該被建立，這調校原則雖然適用於許多情況，但該原則還是僅供參考，設定不好而導致資料庫寫入速度變慢請不要找我負責，因為資料庫的效能調校不僅僅只有這樣的判斷邏輯，還有許多其他的環境因素都有可能影響到調校的策略，像是：硬碟存取速度、應用程式特性、系統資源分配情況、…等等

-   當 Avg Total User Cost 欄位的數值超過「個位數」以上，就算是蠻高的成本，可以考慮建立索引
-   當 Avg User Impact 欄位的數值超過 80 以上，也算是蠻高的衝擊，也可以考慮建立該索引

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/412f2e259498f7ebb802-image_1040.png)

不過再進一步分析 Unique Compiles、User Seeks、User Scans 數量過低的情況，其實建立索引不見得對整體執行效能有幫助（因為該索引的使用率過低），反而會導致寫入效能低落的情況，這時你也可以選擇不建立該索引：

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/3b4d1fa2ecc2ff5c03d1-image_1041.png)

**§ 最後提醒 **§****

這些統計資訊的資料來源大多來自於 SQL Server 裡所謂的 **動態管理檢視** ( DMV )，這些資訊是從資料庫實體 (Instance) 啟動之後所累積的動態資訊，所以 SQL Server 跑得越久，所收集到的資訊越精準，也越能找出在啟動 SQL Server 服務之後到現在所累積的效能問題有哪些。

**相關連結**

-   [Microsoft Download Center - Feature Pack for SQL Server 2005 Feb 2007](http://web.archive.org/web/20120104012900/http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=24793)
-   [Microsoft Download Center - SQL Server 2005 Performance Dashboard Reports](http://web.archive.org/web/20120104023532/http://www.microsoft.com/download/en/details.aspx?id=22602)
-   [提升 SQL SERVER 執行效率的小技巧：為 SQL 快取暖身](/post/2009/11/25/SQL-Server-Performance-Tuning-Caching-commonly-used-tables.aspx)
-   [資料庫-工作日誌: MSSQL Performance Dashboard Reports](http://havefundb.blogspot.com/2010/10/mssql-performance-dashboard-reports.html)
-   Performance Dashboard Reports for SQL Server 2008 - The Premiers
-   [**Performance Dashboard Reports for SQL Server 2008**](http://blogs.technet.com/b/rob/archive/2009/02/18/performance-dashboard-reports-for-sql-server-2008.aspx)
-   **[Using Performance Dashboard with SQL Server 2008](https://learn.microsoft.com/en-us/archive/blogs/vascov/using-performance-dashboard-with-sql-server-2008)**
-   [Utilizing SQL 2005 Performance Dashboard in SQL Server 2008](http://sql-articles.com/blogs/utilizing-sql-2005-performance-dashboard-in-sql-server-2008/)
-   [SQL Server 2005 Performance Dashboard](http://blogs.technet.com/b/rob/archive/2008/06/12/sql-server-2005-performance-dashboard.aspx)
-   [sys.dm\_os\_sys\_info (Transact-SQL)](http://msdn.microsoft.com/en-us/library/ms175048.aspx)
