亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > SQL Server > 正文

sql server 編譯與重編譯詳解

2024-08-31 01:04:11
字體:
來源:轉載
供稿:網友

SQLSERVER編譯與重編譯

編譯的含義

當SQLSERVER收到任何一個指令,包括查詢(query)、批處理(batch)、存儲過程、觸發器(trigger)

、預編譯指令(prepared statement)和動態SQL語句(dynamic SQL Statement)要完成語法解釋、語句解釋,

然后再進行“編譯(compile)”,生成能夠運行的“執行計劃(execution plan)”。在編譯的過程中,

SQLSERVER會根據所涉及的對象的架構(schema)、統計信息以及指令的具體內容,估算可能的執行計劃,

以及他們的成本(cost),最后選擇一個SQLSERVER認為成本最低的執行計劃來執行。執行計劃生成之后,

SQLSERVER通常會把他們緩存在內存里,術語統稱他們叫“plan cache”以后同樣的語句執行,SQLSERVER就可以使用同樣的執行計劃,而無須再做一次編譯。

這種行為叫“重用(reuse)或者叫重用執行計劃”。但是有時候,哪怕是一模一樣的語句,SQL下次執行還是要再做一次編譯。

這種行為叫“重編譯(recompile)”。執行計劃的編譯和重編譯都是要消耗資源的。

如果執行計劃能夠重用,那么SQLSERVER就不需要再執行上面的過程,加快執行指令的速度,很多語句調優的文章里提到數據庫重用執行計劃就是指這個意思

執行計劃重用的利弊

執行計劃的好壞當然決定了語句最終的執行速度。對于同樣的一條語句,使用好的執行計劃可能會比差的要快幾百倍,甚至上千倍。

所以從這一個角度來講,每運行一條語句,都把他先編譯一遍當然是最好的。他能夠保證使用的執行計劃是SQLSERVER能找到的最優的。

但是SQLSERVER每秒鐘可能會運行成百上千的指令。如果每個都編譯一遍,是資源的一種浪費。所以SQLSERVER在這里也試圖尋找一個平衡點,

使用有限的compile/recompile,得到最好的整體性能

運行下面的指令,就能夠看到SQLSERVER當前緩存的執行計劃有哪些(請別在生產服務器上直接運行因為上面往往有龐大的緩存)

1 SELECT * FROM sys.[syscacheobjects]

重編譯的發生場景

但是有些時候,SQLSERVER為了確保返回正確的值,或者有性能上的顧慮,有意不重用緩存在內存里的執行計劃,而現場編譯一份。

這種行為,被稱為重編譯(recompile)。下面是比較常見的會發生重編譯的情形:

1、當指令或者批處理所涉及的任何一個對象(表格或者視圖)發生了架構(schema)變化

例如,在表或者視圖上添加或刪除了一個字段,添加或者刪除了一個索引,在表上添加或者刪除了一個約束條件(constraints)等。

定義發生了變化,原來的執行計劃就不一定正確了,當然要重編譯

2、運行過sp_recompile

當用戶在某個存儲過程或者觸發器上運行過sp_recompile后,下一次運行他們就會發生一次重編譯。

如果用戶在某個表或者視圖上運行了sp_recompile,那么所有引用到這張表(或者視圖)的存儲過程在下一次運行前,都要做重編譯

3、有些動作會清除內存里的所有執行計劃,迫使大家都要做重編譯

例如,下列動作會清除整個SQLSERVER服務器緩存的所有執行計劃:

(1)Detach一個數據庫

(2)對數據庫做了升級,在新的服務器上,會發生執行計劃清空

(3)運行了DBCC freeproccache

(4)運行了reconfigure語句

(5)運行了alter database..collate語句修改了某個數據庫的字符集(collation)

下列動作會清除SQLSERVER服務器緩存的某個數據庫的執行計劃:

DBCC FLUSHPROCINDB

清除SQL Server 2000服務器內存中的某個數據庫的存儲過程緩存內容

1 DECLARE @a INT
2 SELECT @a=DB_ID('gposdb')
3 DBCC flushprocindb(@a)

ALTER DATABASE ...MODIFY NAME語句

ALTER DATABASE ...SET ONLINE語句

ALTER DATABASE...SET OFFLINE語句

ALTER DATABASE...SET EMERGENCY語句

DROP DATABASE 語句

當一個數據庫自動關閉時

DBCC CHECKDB語句結束時

4、當下面這些SET 開關值變化后,先前的那些執行計劃都不能重用

ansi_null_dflt_off,

ansi_null_dflt_on,

ansi_nulls,

_ansi_padding

ansi_warnings,

arithabort,

concat_null_yields_null,

datefirst,dateformat,

forceplan,

language,

no_browsetable,

numeric_roundabort,

quoted_identifier

這是因為這些SET開關會影響語句的執行的行為,甚至帶來不同的結果。他們發生變化了,SQLSERVER就要根據新的設置重做執行計劃

5、當表格或者視圖上的統計信息發生變化后

當統計信息被手動更新后,或者SQLSERVER發現某個統計信息需要自動更新時,SQLSERVER會對所涉及的語句都做重編譯 

需要說明的是,在SQLSERVER里,執行計劃重用并不一定是一件好事,而編譯/重編譯也不一定是一件壞事。

計劃重用可以幫助SQLSERVER節省編譯時間,對降低CPU使用率和減少阻塞都有好處,但是缺點是每次重用的計劃并不一定是最合適的計劃。參數嗅探parameter sniffing就是典型的計劃重用帶來的負效應。編譯和重編譯當然能給當前運行的語句帶來盡可能準確執行計劃,但是對于經常運行的語句,尤其是一些執行速度比較快的語句,可能其編譯時間占最后總時間的相當大比例。這對資源來講是一個很大的浪費

一般來說,SQLSERVER能夠很好地在編譯與重編譯之間做平衡,大部分情況下沒什么問題的。

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!


注:相關教程知識閱讀請移步到MSSQL教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品夜间视频香蕉| 久久精品91久久久久久再现| 成人a级免费视频| 国产成人精品一区| 精品夜色国产国偷在线| 欧美性生交xxxxx久久久| 精品福利在线视频| 欧美高清videos高潮hd| 欧美精品www在线观看| 亚洲成年人在线| 亚洲新声在线观看| 亚洲一区二区三区视频播放| 亚洲2020天天堂在线观看| 欧美在线视频一二三| 欧美精品videossex性护士| 欧美成人激情图片网| 欧美在线播放视频| 97国产精品视频人人做人人爱| 亚洲电影免费观看高清| 一色桃子一区二区| 97色在线视频| 国产欧美韩国高清| 欧美日韩国产在线| 色婷婷综合成人| 国产精品久久久久久久久久新婚| 国产精品99蜜臀久久不卡二区| 免费91麻豆精品国产自产在线观看| 国内精品久久久久| 精品久久久久久国产91| 欧美成人四级hd版| 国产成人一区二区三区小说| 日韩亚洲欧美中文高清在线| 欧美日韩免费区域视频在线观看| 日韩精品中文字幕在线| 国产一区二区三区日韩欧美| 性欧美视频videos6一9| 国模精品系列视频| 日韩高清电影好看的电视剧电影| 国产成人综合一区二区三区| 91探花福利精品国产自产在线| 亚洲国产成人精品久久| 国产精品亚洲一区二区三区| 亚洲国语精品自产拍在线观看| 国产激情视频一区| 日本高清视频一区| 国产精品爽爽爽| 国产精品99一区| 欧美精品制服第一页| 亚洲丝袜av一区| 国产婷婷成人久久av免费高清| 亚洲高清久久网| 日日噜噜噜夜夜爽亚洲精品| 日韩在线免费视频| 亚洲最新视频在线| 米奇精品一区二区三区在线观看| 欧美性极品xxxx做受| 久久久久久久97| 国产在线拍揄自揄视频不卡99| 91国产精品91| 久久天天躁狠狠躁老女人| 亚洲国产欧美一区| 亚洲成人黄色在线观看| 欧美另类69精品久久久久9999| 8090理伦午夜在线电影| 成人亚洲综合色就1024| 日韩亚洲精品视频| 欧美区二区三区| 精品国内亚洲在观看18黄| 91成人国产在线观看| 久久天天躁夜夜躁狠狠躁2022| 欧洲亚洲在线视频| 成人国产精品av| 欧美精品在线极品| 国产精品草莓在线免费观看| 亚洲在线免费视频| 秋霞av国产精品一区| 亚洲美女福利视频网站| 欧美极品少妇与黑人| 久久精品电影一区二区| 国产亚洲欧美一区| 精品国产1区2区| 久久影院资源站| 欧美激情国产日韩精品一区18| 欧美国产亚洲精品久久久8v| 色妞久久福利网| 97在线视频免费看| 亚洲理论片在线观看| 日本精品视频在线播放| 久久乐国产精品| 国产精品96久久久久久又黄又硬| 欧美激情极品视频| 国产日韩在线看| 国产精品日韩精品| 国产激情久久久久| 精品一区二区亚洲| 亚洲乱码国产乱码精品精| 秋霞午夜一区二区| 久久久噜噜噜久久久| 91精品国产高清久久久久久| 日本高清+成人网在线观看| 欧美日韩国产页| 国产精品视频永久免费播放| 中文字幕久久久| 日韩精品福利在线| 亚洲国产精品人久久电影| 国内免费久久久久久久久久久| 成人激情在线观看| 青青久久av北条麻妃黑人| 欧美肥老太性生活视频| 久久久电影免费观看完整版| 欧美日韩国产精品一区二区不卡中文| 91在线免费观看网站| 68精品国产免费久久久久久婷婷| 日本a级片电影一区二区| 日韩欧美亚洲国产一区| 午夜精品一区二区三区在线视频| 国产欧美一区二区三区久久人妖| 久久精品视频导航| 国产一区视频在线播放| 国产精品免费电影| 欧美性做爰毛片| 精品一区二区三区四区| 日韩精品久久久久久福利| 97av视频在线| 亚洲欧美日韩天堂一区二区| 91系列在线观看| 九九热这里只有精品免费看| 91国内免费在线视频| 欧美日韩高清区| 久久视频在线免费观看| 亚洲国产精品va在看黑人| 日本国产精品视频| 亚洲人成自拍网站| 色777狠狠综合秋免鲁丝| 亚洲精品久久视频| 亚洲精品国产福利| 欧美一级bbbbb性bbbb喷潮片| 国产精品自产拍在线观| 亚洲国产成人在线视频| 欧美亚洲国产日韩2020| 日韩电影免费在线观看中文字幕| 日韩在线观看网站| 久久精品久久久久| 国产成人91久久精品| 中文字幕国产精品| 精品视频www| 久久亚洲综合国产精品99麻豆精品福利| 欧美性猛交xxxx久久久| 欧美日韩国产在线播放| 久久的精品视频| 成人在线播放av| 成人国产精品日本在线| 91网站在线免费观看| 欧美国产精品va在线观看| www.亚洲一二| 国产视频亚洲视频| 国产精品精品一区二区三区午夜版| 精品国产乱码久久久久酒店| 亚洲国产一区二区三区在线观看| 日韩高清免费在线| 欧美日韩在线免费| 欧美性色19p| 中文日韩电影网站| 国产精品av电影|