一区二区国产高清视频在线_真人性做爰A片免费_强伦人妻BD在线电影_亚洲熟妇无码AV_免费人成视频在线观看网站_亚洲欧美精品午睡沙发_在线观看无码的免费网站_中文字幕无码A片久久_日韩欧美国产一区精品_久久精品女人天堂av

重慶醫(yī)科大學(xué)論壇

標(biāo)題: 輕松掌握執(zhí)行計(jì)劃的高速緩存和重新使用 [打印本頁]

作者: liwei58    時(shí)間: 2007-11-26 10:03
標(biāo)題: 輕松掌握執(zhí)行計(jì)劃的高速緩存和重新使用
Microsoft® SQL Server™ 2000 有用于存儲(chǔ)執(zhí)行計(jì)劃和數(shù)據(jù)緩沖區(qū)的內(nèi)存池。池內(nèi)分配給執(zhí)行計(jì)劃或數(shù)據(jù)緩沖區(qū)的百分比隨系統(tǒng)狀態(tài)動(dòng)態(tài)波動(dòng)。內(nèi)存池中用于存儲(chǔ)執(zhí)行計(jì)劃的部分稱為過程高速緩存。 SQL Server 2000 執(zhí)行計(jì)劃包含下面兩個(gè)主要組件: ◆查詢計(jì)劃 執(zhí)行計(jì)劃的主體是一個(gè)重入的只讀數(shù)據(jù)結(jié)構(gòu),可由任意數(shù)量的用戶使用。這稱為查詢計(jì)劃。查詢計(jì)劃中不存儲(chǔ)用戶環(huán)境。查詢計(jì)劃在內(nèi)存中永遠(yuǎn)不會(huì)有一個(gè)或兩個(gè)以上的復(fù)本:一個(gè)復(fù)本用于所有串行執(zhí)行,一個(gè)復(fù)本用于所有并行執(zhí)行。并行復(fù)本覆蓋所有的并行執(zhí)行,與并行執(zhí)行的并行度無關(guān)。 ◆執(zhí)行環(huán)境 每個(gè)正在執(zhí)行查詢的用戶都有一個(gè)包含其執(zhí)行專用數(shù)據(jù)(如參數(shù)值)的數(shù)據(jù)結(jié)構(gòu)。該數(shù)據(jù)結(jié)構(gòu)稱為執(zhí)行環(huán)境。執(zhí)行環(huán)境數(shù)據(jù)結(jié)構(gòu)可以重新使用。如果用戶執(zhí)行查詢而其中的一個(gè)結(jié)構(gòu)未使用,將會(huì)用新用戶的環(huán)境重新初始化該結(jié)構(gòu)。 在 SQL Server 2000 中執(zhí)行任何 SQL 語句時(shí),關(guān)系引擎將首先查看過程高速緩存中是否有用于同一 SQL 語句的現(xiàn)有執(zhí)行計(jì)劃。SQL Server 2000 重新使用所找到的任何現(xiàn)有計(jì)劃以節(jié)省重新編譯 SQL 語句的開銷。如果沒有現(xiàn)有執(zhí)行計(jì)劃,則 SQL Server 2000 將為查詢生成新的執(zhí)行計(jì)劃。 SQL Server 2000 有一個(gè)高效的算法,可查找用于任何特定 SQL 語句的現(xiàn)有執(zhí)行計(jì)劃。在大多數(shù)系統(tǒng)中,這種掃描所使用的最小資源比通過重新使用現(xiàn)有計(jì)劃而不是編譯每個(gè) SQL 語句所節(jié)省的資源要少。 該算法將新的 SQL 語句與高速緩存內(nèi)現(xiàn)有的未用執(zhí)行計(jì)劃相匹配,并要求所有的對象引用完全合法。例如,這兩個(gè) SELECT 語句中的第一個(gè)語句與現(xiàn)有計(jì)劃不匹配,而第二個(gè)語句則匹配:
SELECT * FROM EmployeesSELECT * FROM Northwind.dbo.Employees
在 SQL Server 2000 實(shí)例中,個(gè)別執(zhí)行計(jì)劃重新使用的概率比在 SQL Server 6.5 或更早版本中高。 執(zhí)行計(jì)劃的老化 執(zhí)行計(jì)劃生成后便駐留在過程高速緩存中。只有當(dāng)需要空間時(shí),SQL Server 2000 才使舊的未用計(jì)劃從高速緩存老化掉。每個(gè)查詢計(jì)劃和執(zhí)行環(huán)境都有相關(guān)的成本因子,可表明編譯結(jié)構(gòu)所需的費(fèi)用。這些數(shù)據(jù)結(jié)構(gòu)還有一個(gè)年齡字段。對象每由連接引用一次,其年齡字段便按編譯成本因子遞增。例如,如果一個(gè)查詢計(jì)劃的成本因子是 8 且被引用了兩次,它的年齡將變?yōu)?16。惰性寫入器進(jìn)程定期掃描過程高速緩存內(nèi)的對象列表。惰性寫入器減少每個(gè)對象的年齡字段,每掃描一次減少 1。在本例中,查詢計(jì)劃的年齡經(jīng)過 16 次過程高速緩存掃描后減為 0,除非其他用戶引用了該計(jì)劃。如果滿足下面三個(gè)條件,惰性寫入器進(jìn)程將釋放對象: 內(nèi)存管理器需要內(nèi)存且所有可用內(nèi)存都正在使用。 對象的年齡字段是 0。 對象在當(dāng)前沒有被連接引用。 因?yàn)槊看我脤ο髸r(shí)其年齡字段都會(huì)增加,所以經(jīng)常被引用的對象的年齡字段不會(huì)減為 0,也不會(huì)從高速緩存老化掉。不經(jīng)常被引用的對象將很快滿足釋放條件,但是不會(huì)真被釋放,除非其它對象有內(nèi)存需求。

重新編譯執(zhí)行計(jì)劃 由于數(shù)據(jù)庫的新狀態(tài),數(shù)據(jù)庫內(nèi)的某些更改可能會(huì)導(dǎo)致執(zhí)行計(jì)劃效率低下或不再有效。SQL Server 檢測這些使執(zhí)行計(jì)劃無效的更改,并將計(jì)劃標(biāo)記為無效。此后,必須為執(zhí)行查詢的下一個(gè)連接重新編譯新的計(jì)劃。導(dǎo)致計(jì)劃無效的情況包括: 對查詢所引用的表或視圖進(jìn)行任何結(jié)構(gòu)更改(ALTER TABLE 和 ALTER VIEW)。 通過語句(如 UPDATE STATISTICS)顯式生成或者自動(dòng)生成新的分發(fā)內(nèi)容統(tǒng)計(jì)。 除去執(zhí)行計(jì)劃所使用的索引。 顯式調(diào)用 sp_recompile。 對鍵的大量更改(其他用戶對由查詢引用的表使用 INSERT 或 DELETE 語句所產(chǎn)生的修改)。 對于帶觸發(fā)器的表,inserted 或 deleted 表內(nèi)的行數(shù)顯著增長。
來原:www




歡迎光臨 重慶醫(yī)科大學(xué)論壇 (http://www.espacio12.com/) Powered by Discuz! X3.4