建体彩网|中彩网双色球连号|
?
快捷搜索:  as  test  1111  test aNd 8=8  test++aNd+8=8  as++aNd+8=8  as aNd 8=8

和記娛樂在線官網:《Microsoft Sql server 2008 Internals》讀書筆記第九章Plan Caching and Recompilation(5)

?

上文我們懂得編譯工具和重編譯的原由之一:Correctness-Based Recompiles(基于更正的重編譯),現在我們繼承懂得重編譯的另一個原由:Optimality-based Recompiles(基于優化的重編譯)

■Optimality-based Recompiles (基于優化的重編譯)

假如SQL Server有來由猜證已經存在的計劃已經不再優化,也可能選擇重編譯一個計劃。猜證一個非優化的計劃的重要緣故原由是敷衍根基數據(underlying data)的變更。假如天生查詢計劃的任何一個統計量自計劃被創建時被更新,或者任何一個統計量被覺得是Stale(過時的),SQL Server從新編譯查詢計劃。

1、已更新的統計量

統計量可妙手動或自動被更新。手動更新在有人運行sp_updatestats或update statitics敕令時發生。自動更新在SQL Server抉擇已經存在的統計量是逾期的(out of date)或過時的(stale)。但這些更新只有在數據庫選項AUTO_UPDATE_STATISTICS或 AUTO_UPDATE_STATISTICS_ASYNC為ON時才發生。假如另一個批處置懲罰試圖應用當前計劃的表或視圖,SQL Server偵察到統計已顛末期,于是初始化UPDATE STATISTICS操作。

2、過時的統計量

SQL Server在第一次編譯(在緩存中沒有查詢計劃的)批處置懲罰時偵察過時的統計量,也偵察在已有計劃的過時統計量。下圖展示了查找一個已存在的計劃并反省是否必要重編譯時調用步驟的流程圖:

假如數據庫的AUTO_UPDATE_STATISTICS_ASYNC選項為ON,則SQL Server不必等待統計量的更新完成,它直接基于過時的統計重編譯。

假如足足數量的改動發生在支持統計的列時,統計會被覺得是過時的(stale)。每個表有一個重編譯閾(Recompile threshold,RT),用來抉擇若干變更發生時該表的任何統計被標志為stale。針對批處置懲罰中的所有表的該RT值,被存儲在批處置懲罰的查詢計劃中。

該RT值依附于表的類型,即持久表照樣臨時表,還有本次計劃被編譯時表的行數。精準的抉擇RT值的算法隨SQL Server的每個Service Package而變更。以下只針對付SQL Server 2008的RTM版:

1、無論持久表照樣臨時表,假如N

2、對付臨時表,算法是相同的,只有一個例外,假如表異常小或空表(N創建臨時表的歷程,插入6行到表后,只要臨時表被造訪,表將不得不重編譯。

小技術:你可以應用KEEP PLAN查詢提示(Query Hint)來創建臨時表,以避開頻繁重編譯的批處置懲罰。可以應用下列語句比較查看對系統機能的改進:

SELECTfrom dbo.PermTable A Inner join #TempTalbe B On B.col1=A.col2 whereOption

3、對付表變量,沒有RT值。也便是說,在表變量中不會由于行數的變更而引起重編譯。

■ 改動計數器

RT值著實便是SQL Server識別統計是否過時所必要的變更數量。在SQL Server 2005曩昔的版本中,sysindexes系統表中和記娛樂在線官網的列rowmodctr維持跟蹤實際發生的變更數量。這個計數器跟蹤表或索引的任何行的變更,即就是一個沒有被任何索引或有用的統計應用的列發生變更。而SQL Server 2008應用一組列改動計數器或colmodctr。這些計數器長短事務的,即假如事務開始,插入數千行到表中,此是事務回滾,改動計數器的變更卻不回滾。不像sysindexes中的rowmodctr,colmodctr值用戶弗成見,它只能被查詢優化器應用。

■應用colmodctr值跟蹤表和索引視圖的變更

下表給出影響內部colmodctr值變更的身分:

語句

colmodctr值的變更

insert

每個行被插入后所有colmodctr值加1

delete

每個行被插入后所有colmodctr值加1

update

假如更新到一個非鍵值列,每行被更新時所有colmodctr值加1

假如更新到一個鍵值列,對表中的每個列,每行被更新時所有colmodctr值加2

bluk insert

看作N insert操作。N行被插入時,所有colmodctr增添N

truncate table

看作N d和記娛樂在線官網elete操作。N行被插入時,所有colmodctr增添N

■跳過重編譯步驟

以下幾種環境下,SQL Server會由和記娛樂在線官網于優化斟酌跳過編譯一個計劃:

1、 當一個計劃是一個微小的(trivial)計劃。一個trivial計劃是基于查詢用到和記娛樂在線官網的表,和這些表上的索引(或缺少索引),卻沒有替代計劃。此時,只有一種要領處置懲罰查詢,無論是否統計發生改變,任何編譯都是揮霍資本。

2、假如一個查詢包孕是選項提示Keepfixed plan,SQL Server將不會因為優化相關的緣故原由而重編譯計劃。

3、假如針對索引的統計自動更新,并且定義在表或索引視圖上的統計被禁用,那么所有這些索引和統計引起的優化相關的重編譯的計劃將竣事。

留意:關閉自動更新內容平日不是一個好的選擇,由于這樣查詢優化器將不再對工具中的數據變更敏感,而子優化查詢將不再隨意馬虎地獲得結果。你可以斟酌應用這個技術,僅僅在著末用完所有其他替代措施以避免重編譯時作為一個告急(resort)。

4、假如查詢中引用的表是只讀的,SQL Server將不從新編譯計劃。

在SQL Server 2000中,當一個批處置懲罰被重編譯時,批處置懲罰中的所有語句都將被重編譯,并不限于初始化重編譯的那個。SQL Server供給語句級其余重編譯。這意味著SQL Server在重編譯歷程中應用更小的CPU光陰和內存。

下文將關注若何從緩存中移除計劃和計劃緩存內部操作。

轉自:http://www.c和記娛樂在線官網nblogs.com/downmoon/archive/2010/07/06/1771616.html

免責聲明:以上內容源自網絡,版權歸原作者所有,如有侵犯您的原創版權請告知,我們將盡快刪除相關內容。

您可能還會對下面的文章感興趣:

建体彩网
青海十一选五 山东时时彩 天蝎和处女座谁更会赚钱 北京11选5 预测 足球混合过关计算方法 vr彩票是黑平台 贵州快三开奖结果今天 贵州11选5投注思维 足彩任选9场的玩法 快乐时时彩