文章編號: 195565 - 上次校閱: 2007年11月2日 - 版次: 7.6 在 SQL Server 的統計的維護功能 (autostats)
在此頁中結論新引入統計的維護功能 AutoStat,可能會產生不必要的額外負荷生產系統上藉由執行下列動作之一:
在 SQL Server 2000 autostats 有關請參閱下列 MSDN 網站上的"由查詢最佳化器在 Microsoft SQL Server 2000 的統計資料用於 」: http://msdn2.microsoft.com/en-us/library/aa902688(SQL.80).aspx
(http://msdn2.microsoft.com/en-us/library/aa902688(SQL.80).aspx)
附註如果您使用的 Microsoft SQL Server 2005,請參閱下列 Microsoft 白皮書,如需有關如何統計資料由查詢最佳化器在 SQL Server 2005 中資訊: http://technet.microsoft.com/en-us/library/cc966419.aspx
(http://technet.microsoft.com/en-us/library/cc966419.aspx)
其他相關資訊一般資訊SQL Server 會利用成本型最佳化器可以是非常機密統計資料表和索引上所提供的資訊。不正確且最新統計資訊 SQL Server 可以挑戰來決定特定查詢最佳的執行計劃。在 SQL Server,成本為基礎的決策,讓包含協助您最佳化器中的每個資料表上維護的統計資料:
若要維護盡可能為最新的方式統計資訊,SQL Server 會介紹 AutoStat,透過 SQL Server 監視的資料表修改即能達到特定的變更閾值時,自動更新資料表的統計資料。 此外,SQL Server 會介紹自動-建立-的統計資料讓伺服器自動產生所需的特定查詢的準確最佳化的所有統計資料。 決定當 AutoStat 產生時將要如上所述,AutoStat 就會自動更新特定資料表的統計資料變更閾值到達時。sysindexes.rowmodctr 欄會維護變動合計的資料表,經過一段時間,可能會造成不良的影響查詢處理器決策讓程序的所有修改。這個計數器會更新每次任何下列的事件發生時:
更新表格統計資料之後 rowmodctr 值重設為 0,而且更新資料表的統計資料的結構描述版本。 進一步的情況下的預存程序的執行計劃來自快取和該計劃是統計資料的機密,統計資料的結構描述版本會相較於目前的版本。如果沒有可用的新統計資料,將重新編譯預存程序計劃。 基本演算法的自動更新統計資料是:
注意: 除了基數,述詞的選擇性也會影響 AutoStats 層代。這表示該統計資料可能無法更新的 afer 每隔 500 修改基數好像 < 500 或變更的每隔 20%的基數好像 > 500。根據選擇性產生向上因數 (值的範圍從 1 到 4、 1 和 4 (含)) 的比例,而且這項因素和變更如取自演算法數乘積會 AutoStats 產生所需的修改實際數目。 上述的演算法可以 summarised 資料表的形式: _________________________________________________________________________________ Table Type | Empty Condition | Threshold When Empty |Threshold When Not Empty _________________________________________________________________________________ Permanent | < 500 rows | # of Changes >= 500 | # of Changes >= 500 + (20% of Cardinality) ___________________________________________________________________________ Temporary | < 6 rows | # of Changes >= 6 | # of Changes >= 500 + (20% of Cardinality) ___________________________________________________________________________ Table Variables | Change in cardinality does not affect AutoStats generation. ___________________________________________________________________________ 範例 1請考慮在 authors 資料表在 pubs 資料庫包含 23 個資料列,並有兩個索引。唯一叢集的索引,而 UPKCL_auidind,索引在一個資料行 au_id 上, 和複合的非叢集的索引,aunmind,已建立 au_lname 和 au_fname 資料行上。因為此資料表包含少於 500 的列,AutoStat 會開始後發生 500 變更資料表資料。所做的變更可以是 500 的其中一個或更多插入、 刪除、 變更為索引資料行例如 au_lname 或或是其他任何組合。因此,可以預測當更新統計資料將會被初設是藉由監視 sysindexes.rowmodctr 值,也會在每次更新時遞增。當它到達,或超過 500 可以預期要啟動的更新統計資料。 範例 2請考慮第二個資料表 t2 具有 1,000 的基數。對於具有大於 500 的列,SQL Server 將會更新統計資料時 (500 + 20%) 已經變更。數學,1,000 的 20%是 200,因此您可以預期看到 AutoStat 之後大約 700 修改已對資料表進行啟動。自動化 Autostats 判斷若要自動決定當您將會執行 AutoStat,可以輪詢 sysindexes 資料表,並識別當資料表的修改會到達起始點。下列是基本的演算法來執行這項作業:您可以稍後排程來執行下列工作:
控制是否在對資料表執行更新統計資料這個問題最明顯的解決方案時 AutoStat 已證明 Problematic,是停用自動統計資料產生藉此保留自由地在較不干擾式的時間排定更新統計資料的資料庫管理員。您可以這樣藉著使用更新統計資料的陳述式或 sp_autostats 預存程序。更新統計資料的陳述式的語法是:sp_autostats 預存程序的語法是: sp_autostats <table_name>,<stats_flag>,<index_name> 其中 <stats_flag> 是 「 開啟 」 或 「 關閉 」。 您也可以使用 sp_dboption 停用自動更新統計資料或每個資料庫層級的 CREATE 統計資料的發生: sp_dboption <dbname>,'自動更新統計' < 上 | 關閉 > -或者- sp_dboption <dbname>,'自動建立統計資料' < 上 | 關閉 > 控制並行更新統計資料處理程序數目目前,短為特定的資料表,停用 AutoStat,就不可能設定正在同時執行的自動更新統計資料陳述式數目 (為此,DCR 51539 已經被歸檔)。伺服器不會但是,限制到每個處理器的四個並行更新統計資料處理數目。判斷 Autostats 時正在執行您可以使用追蹤旗標 205 來報告統計資料相關的預存程序會被重新編譯 AutoStat 的結果時。此追蹤旗標會寫入錯誤記錄檔的下列訊息:發出 1998年-10-15 11:10:51.98 spid9 重新編譯: ProcName: sp_helpindex LineNo: 75 StmtNo: 29 1998-10-15 11:38:43.68 spid8 結構描述變更: 資料表 Dbid: 7 Objid: 133575514 RowModCnt: 60500 RowModLimit: 60499 另外,也可以啟用追蹤旗標 8721,它 AutoStat 執行時便會將傾印到錯誤記錄檔的資訊。以下是訊息的您可以預期看到類型的範例: 1998-10-14 16:22:13.21 spid13 AUTOSTATS: 更新的資料表: [作者] 資料列數: 23 mods: 501 繫結: 500 的工期: 47ms UpdCount: 2 您也可以使用 SQL Server 分析工具來識別更新統計資料的陳述式執行時。若要執行此動作執行下列步驟:
結構描述鎖定SQL Server 採用了兩種類型的結構描述鎖定時它會更新資料表的統計資料會採取的這兩種:Sch-S: Schema Stability Lock ---------------------------- This lock ensures that a schema element, such as a table or index, will not be dropped while any session holds a schema stability lock on the schema element. Sch-M-UPD-STATS: Schema Modification Lock ----------------------------------------- This is a non-blocking lock that is used by the system to ensure that only one automatic UPDATE STATISTICS process is run against a table at any given point in time. The sp_lock stored procedure will report this lock has having a type = TAB, resouce = UPD-STATS and mode = SCH-M. 這篇文章中的資訊適用於:
機器翻譯重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。 按一下這裡查看此文章的英文版本:195565?
(http://support.microsoft.com/kb/195565/en-us/
)
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。 | 其他資源 其他支援網站社群立即取得協助文章翻譯
|






Windows Live
Facebook
Twitter
Linkedin
Digg it
Yahoo
Delicious
StumbleUpon
Yammer
Reddit
Technorati
FriendFeed
Email


回此頁最上方
