如何產生必要的資料庫中繼資料,以建立僅限統計資料的資料庫,SQL Server 2005 中和在 SQL Server 2008 中的指令碼

文章翻譯 文章翻譯
文章編號: 914288 - 檢視此文章適用的產品。
全部展開 | 全部摺疊

在此頁中

簡介

查詢最佳化器在 Microsoft SQL Server 2005 或 Microsoft SQL Server 2008 中使用下列類型的資訊來決定最佳的查詢計劃:
  • 資料庫中繼資料
  • 硬體環境
  • 資料庫工作階段狀態
通常,您必須模擬所有這些相同類型的資訊,如果您想要重現查詢最佳化器在測試系統上的行為。

Microsoft 客戶支援服務可能會要求您產生指令碼的資料庫中繼資料。Microsoft 客戶支援服務會使用這個指令碼的資料庫中繼資料來調查最佳化器的問題。本文將告訴您,產生統計資料指令碼的步驟。本文也將告訴查詢最佳化器使用資訊的方式。

其他相關資訊

如果您使用 SQL Server 2005 之前請遵循步驟來產生指令碼,請確定,SQL Server 管理 Studio 是 SQL Server 2005 Service Pack 2 版或更新版本。 如果您在 SQL Server 2005 中使用較早版本的 SQL Server 管理 Studio,指令碼精靈不會包含所有必要選項本文中的步驟才能正常運作。

指令碼整個資料庫

當您產生僅限統計資料的複製品資料庫時,可能更容易且更可靠,若要編寫指令碼的個別物件的整個資料庫。當您撰寫指令碼整個資料庫時您會收到下列好處:
  • 避免遺漏重現問題所需的相依物件的問題。
  • 您需要大幅較少的步驟,以選取所需的物件。
附註如果產生為資料庫指令碼,而且資料庫的中繼資料包含數千個物件,指令碼的處理程序會消耗大量的 CPU 資源。 我們建議您在離峰產生指令碼。或者若要產生指令碼的個別物件使用第二個選項。

若要編寫指令碼由您的查詢所參考的每個資料庫,請依照下列步驟執行:
  1. 開啟 SQL Server 管理 Studio。
  2. 物件總管 中展開 [資料庫],並再找出您要編寫指令碼的資料庫。
  3. 在資料庫上按一下滑鼠右鍵,指向 [工作],然後再按一下 [產生指令碼
  4. 「 指令碼精靈 」 中確認 [已選取正確的資料庫]。 按一下以選取 [選取的資料庫中的所有指令碼物件] 核取方塊,然後按一下 [下一步]
  5. 在 [選取的指令碼選項] 對話方塊變更下列設定從預設值為下列表格中列的值。
    摺疊此表格展開此表格
    指令碼選項要選取值
    Ansi 與邊框距離則為 True
    繼續執行指令碼上錯誤則為 True
    產生相依物件的指令碼則為 True
    包括系統限制式名稱則為 True
    定序的指令碼則為 True
    指令碼資料庫建立則為 True
    指令碼登入則為 True
    指令碼物件層級權限則為 True
    指令碼統計資料指令碼統計資料和長條圖
    編寫索引的指令碼則為 True
    指令碼引動程序則為 True
    附註指令碼登入 選項和 指令碼物件層級權限] 選項可能不需要除非結構描述中包含由 dbo 以外的登入所擁有的物件。
  6. 按一下 [下一步]。
  7. 按一下 [指令碼至檔案] 選項,然後輸入檔案名稱。
  8. 按一下 [完成]。

指令碼的個別物件

您可能僅指令碼參考特定的查詢,而非完整的資料庫指令碼處理的個別物件。不過,除非藉由使用 WITH SCHEMABINDING 子句所建立所有資料庫物件,sys.depends 系統資料表中的 [相依性] 資訊不一定精確。 這個 inaccuracy 可能會造成下列問題之一:
  • 指令碼的處理程序並不指令碼相依的物件。
  • 指令碼的處理程序可能會撰寫指令碼不正確的順序中的物件。若要成功地執行指令碼,您必須手動編輯產生的指令碼。
因此,我們不建議您除非資料庫中有大量的物件,而且指令碼會否則花太長的時間,指令碼個別物件。 如果您必須使用指令碼的個別物件,請依照下列步驟執行:
  1. 在 SQL Server 管理 Studio 展開 [資料庫],然後再找出您要編寫指令碼的資料庫]。
  2. 在資料庫上按一下滑鼠右鍵],指向 [指令碼資料庫為]、 指向 要 CREATE,然後再按一下 [檔案]。
  3. 輸入檔案名稱,然後按一下 [儲存檔案

    核心資料庫容器將編寫指令碼。這個容器包含檔案、 檔案群組、 資料庫和屬性。
  4. 在資料庫上按一下滑鼠右鍵,指向 [工作],然後再按一下 [產生指令碼
  5. 請確定已選取正確的資料庫,然後再按 [下一步]。
  6. 在 [選取的指令碼選項] 對話方塊變更下列設定從預設值為下列表格中列的值。
    摺疊此表格展開此表格
    指令碼選項要選取值
    Ansi 與邊框距離則為 True
    繼續執行指令碼上錯誤則為 True
    包括系統限制式名稱則為 True
    產生相依物件的指令碼則為 True
    定序的指令碼則為 True
    指令碼登入則為 True
    指令碼物件層級權限則為 True
    指令碼統計資料指令碼統計資料和長條圖
    指令碼 USE 資料庫則為 True
    編寫索引的指令碼則為 True
    指令碼引動程序則為 True
    附註指令碼登入 選項和 指令碼物件層級權限] 選項可能不需要除非結構描述中包含由 dbo 以外的登入所擁有的物件。
  7. 在 [選擇物件類型] 對話方塊選取 [有問題的查詢引用的所有資料庫物件類型]。

    比方說如果查詢只會參考資料表,選取 資料表。 如果查詢參考檢視,選取 檢視及目錄]。 如果有問題的查詢使用使用者定義函式,選取 函式
  8. 在選取查詢所參考的所有物件類型按一下 [下一步]。
  9. 您在步驟 7 中選取每個資料庫物件類型會出現一個對話方塊。 在每個對話方塊中選取特定的資料表、 檢視、 函數或其他的資料庫物件,然後按一下 [下一步]。
  10. 按一下 [指令碼至檔案] 選項,然後指定相同您在步驟 3 中所輸入的檔案名稱。
  11. 按一下 [完成] 啟動指令碼]。
當指令碼已完成,將指令碼檔案傳送給 Microsoft 技術支援工程師。 Microsoft 支援工程師也可能會要求下列資訊:
  • 硬體組態包括處理器和實體記憶體數量存在數目
  • 執行查詢時所使用中的 SET 選項
附註您可能已經提供此資訊由傳送 SQLDiag 報表或 SQL Profiler 追蹤。您可能有也用另一種方法來提供這項資訊。

如何使用資訊

下表協助說明如何查詢最佳化器會使用此資訊來選取查詢計劃。

中繼資料

摺疊此表格展開此表格
條件約束查詢最佳化器經常用來偵測矛盾查詢和基礎結構描述之間的條件約束。範例如果查詢有一個"WHERE col = 5"子句和一個 「 CHECK (col < 5) 」 檢查限制式存在,查詢最佳化器知道會符合沒有資料列。

查詢最佳化器會使類似扣除額) 有關空值屬性的類型。比方說"Col 其中位 NULL"子句是已知為 true 或為 False,則取決於資料行的 Null 屬性,以及資料行是從外部資料表的外部聯結。FOREIGN KEY 條件約束的存在是有助於決定基數和適當的聯結順序。查詢最佳化器可以使用條件約束資訊來消除聯結或簡化述詞。這些變更可能會移除需求以存取基底資料表。
統計資料統計資料資訊包含密度] 及 [顯示索引與統計資料索引鍵的前置字元的資料行的散發的長條圖。依據述詞性質查詢最佳化器可能使用密度、 長條圖或兩者來評估述詞的基數。最新的統計資料所需的精確的基數估計。基數估計是用來作為在估計成本的運算子的輸入。因此,您必須擁有良好的基數估計值,以取得最佳的查詢計劃。
資料表大小 (資料列和頁面的數目)查詢最佳化器使用 [長條圖] 和 [密度計算給定的述詞是,則為 True 或 False 的可能性。 最終的基數估計的計算方式是將機率乘以子運算子所傳回的資料列數目。 在資料表或索引的分頁數目是在估計 IO 成本因數。 資料表大小用來計算一掃描成本並估計將索引搜尋期間存取的分頁數目時很有用。
資料庫選項數個資料庫選項會影響最佳化。[AUTO_CREATE_STATISTICS] 和 [AUTO_UPDATE_STATISTICS] 選項會影響是否查詢最佳化器會建立新的統計資料或已過期的更新統計資料。參數化 層級會影響參數方式輸入的查詢化之前輸入的查詢交給查詢最佳化器。參數化可以影響基數估計,並且也可以防止對索引檢視表與其他類型的最佳化比對。DATE_CORRELATION_OPTIMIZATION 設定會造成最佳化工具搜尋的資料行之間的相互關聯。此設定會影響基數及成本估計。

環境

摺疊此表格展開此表格
工作階段的 SET 選項ANSI_NULLS 是否設定會影響"NULL = NULL"的運算式評估為 True。外部聯結的基數估計可能會根據目前的設定變更。此外,模稜兩可的運算式也可能會變更。比方說"col = NULL"的運算式評估以不同方式根據設定。不過,"col IS NULL"永遠運算式評估相同的方式。
硬體資源排序和雜湊運算子的成本取決於相對的 SQL Server 可以使用的記憶體量。比方說如果資料的大小大於快取,查詢最佳化器知道多工緩衝處理的資料必須永遠完到磁碟。不過,如果資料的大小會比快取小很多,作業很可能在記憶體中完成。如果伺服器有一個以上的處理器,而且平行處理原則尚未使用 MAXDOP 」 提示] 或 [最大平行度] 組態選項來停用,SQL Server 也會視為不同的最佳化。
SQL Server 內建保持單元 (SKU)在特定版本的 SQL Server 2005 或的 SQL Server 2008 上只啟用某些功能。比方說符合對索引檢視表查詢只發生在 SQL Server 2005 企業版。同樣地,符合對計劃輔助線是限制為 SQL Server 2000 標準版和 SQL Server 2005 企業版。

屬性

文章編號: 914288 - 上次校閱: 2009年4月7日 - 版次: 3.0
這篇文章中的資訊適用於:
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL Server 2005 Enterprise Edition
  • Microsoft SQL Server 2005 Enterprise X64 Edition
  • Microsoft SQL Server 2005 Enterprise Edition for Itanium Based Systems
  • Microsoft SQL Server 2005 Standard Edition
  • Microsoft SQL Server 2005 Standard X64 Edition
  • Microsoft SQL Server 2005 Standard Edition for Itanium Based Systems
  • Microsoft SQL Server 2008 Developer
  • Microsoft SQL Server 2008 Enterprise
  • Microsoft SQL Server 2008 Standard
  • Microsoft SQL Server 2008 Web
  • Microsoft SQL Server 2008 Workgroup
關鍵字:?
kbmt kbexpertiseinter kbexpertiseadvanced kbsql2005engine kbhowto kbinfo KB914288 KbMtzh
機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:914288
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。

提供意見

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com