1976年贪婪的嘴唇,韩国少妇激三级做爰2023电影,久久久久久精品国产三级涨奶,妖精漫画在线观看免费漫画下拉式

SQL Server 執行計劃緩存(1)
來源:易賢網 閱讀:1334 次 日期:2015-08-25 15:25:36
溫馨提示:易賢網小編為您整理了“SQL Server 執行計劃緩存(1)”,方便廣大網友查閱!

概述

了解執行計劃對數據庫性能分析很重要,其中涉及到了語句性能分析與存儲,這也是寫這篇文章的目的,在了解執行計劃之前先要了解一些基礎知識,所以文章前面會講一些概念,學起來會比較枯燥,但是這些基礎知識非常重要。

基礎概念

SQL Server 有一個用于存儲執行計劃和數據緩沖區的內存池。池內分配給執行計劃或數據緩沖區的百分比隨系統狀態動態波動。內存池中用于存儲執行計劃的部分稱為過程緩存。

SQL Server 執行計劃包含下列主要組件:

查詢計劃

執行計劃的主體是一個重入的只讀數據結構,可由任意數量的用戶使用。這稱為查詢計劃。查詢計劃中不存儲用戶上下文。內存中查詢計劃副本永遠不超過兩個:一個副本用于所有的串行執行,另一個用于所有的并行執行。并行副本覆蓋所有的并行執行,與并行執行的并行度無關。

執行上下文

每個正在執行查詢的用戶都有一個包含其執行專用數據(如參數值)的數據結構。此數據結構稱為執行上下文。執行上下文數據結構可以重新使用。如果用戶執行查詢而其中的一個結構未使用,將會用新用戶的上下文重新初始化該結構。

怎樣緩存執行計劃

SQL Server 有一個高效的算法,可查找用于任何特定 SQL 語句的現有執行計劃。在 SQL Server 中執行任何 SQL 語句時,關系引擎將首先查看過程緩存中是否有用于同一 SQL 語句的現有執行計劃。SQL Server 將重新使用找到的任何現有計劃,從而節省重新編譯 SQL 語句的開銷。如果沒有現有執行計劃,SQL Server 將為查詢生成新的執行計劃。

SQL Server自動刪除執行計劃

什么情況下會刪除執行計劃

在沒有人工手動清除緩存的情況下,如果出現內存不足的情況下SQL Server會自動清除一部分沒被利用到的緩存計劃。

所有緩存的最大大小取決于max server memory的大小。

怎樣判斷需要刪除的執行計劃

如果存在內存不足的情況,數據庫引擎將使用基于開銷的方法來確定從過程緩存中刪除哪些執行計劃。怎樣確定一個執行計劃的開銷呢,對于一個第一次執行的執行計劃SQL Server將它的開銷值設為0,被多次執行過的執行計劃SQL Server將它的開銷值設置為原始編譯開銷,所以數據庫引擎會重復檢查每個執行計劃的狀態并將刪除當前開銷為零的執行計劃。如果存在內存不足的情況,當前開銷為零的執行計劃不會自動被刪除,而只有在數據庫引擎檢查該執行計劃并發現其當前開銷為零時,才會刪除該計劃。當檢查執行計劃時,如果當前沒有查詢使用該計劃,則數據庫引擎將降低當前開銷以將其推向零。

數據庫引擎會重復檢查執行計劃,直至刪除了足夠多的執行計劃,以滿足內存需求為止。如果存在內存不足的情況,執行計劃可多次對其開銷進行增加或降低。如果內存不足的情況已經消失,數據庫引擎將不再降低未使用執行計劃的當前開銷,并且所有執行計劃都將保留在過程緩存中,即使其開銷為零也是如此。

重新編譯執行計劃

根據數據庫新狀態的不同,數據庫中的某些更改可能導致執行計劃效率降低或無效。SQL Server 將檢測到使執行計劃無效的更改,并將計劃標記為無效。此后,必須為執行查詢的下一個連接重新編譯新的計劃。導致計劃無效的情況包括:

對查詢所引用的表或視圖進行更改(ALTER TABLE 和 ALTER VIEW)。

對執行計劃所使用的任何索引進行更改。

對執行計劃所使用的統計信息進行更新,這些更新可能是從語句(如 UPDATE STATISTICS)中顯式生成,也可能是自動生成的。

刪除執行計劃所使用的索引。

顯式調用 sp_recompile。

對鍵的大量更改(其他用戶對由查詢引用的表使用 INSERT 或 DELETE 語句所產生的修改)。

對于帶觸發器的表,插入的或刪除的表內的行數顯著增長。

使用 WITH RECOMPILE 選項執行存儲過程。

測試

--1.緩存的每一個對象返回一行,包括緩存計劃的類型、緩存引用的對象、緩存計劃占用的空間、被使用次數、以及創建時間等

SELECT * FROM sys.syscacheobjects;

--2.緩存的每個查詢計劃返回一行,包括執行計劃被使用的次數、執行計劃的大小、內存地址、執行計劃的類型、語句等

SELECT * FROM sys.dm_exec_cached_plans;

GO

---3.返回由指定的 sql_handle 標識的 SQL 批處理的文本

/*其中sql_handle來自:

sys.dm_exec_query_stats

sys.dm_exec_requests

sys.dm_exec_cursors

sys.dm_exec_xml_handles

sys.dm_exec_query_memory_grants

sys.dm_exec_connections

plan_handle來自:sys.dm_exec_cached_plans

*/

SELECT * FROM sys.dm_exec_sql_text(sql_handle | plan_handle);

GO

--4.以 XML 格式返回計劃句柄指定的批查詢的顯示計劃,主要接受來自sys.dm_exec_cached_plans的plan_handle句柄

SELECT * FROM sys.dm_exec_query_plan(plan_handle);

GO

--5.每個計劃屬性返回一行,主要接受來自sys.dm_exec_cached_plans的plan_handle句柄

SELECT * FROM sys.dm_exec_plan_attributes(plan_handle);

GO

--6.針對每個 Transact-SQL 執行計劃、公共語言運行時 (CLR) 執行計劃和與計劃關聯的游標返回一行,,主要接受來自sys.dm_exec_cached_plans的plan_handle句柄

SELECT * FROM sys.dm_exec_cached_plan_dependent_objects(plan_handle);

--7.返回緩存查詢計劃的聚合性能統計信息。緩存計劃中的每個查詢語句在該視圖中對應一行,并且行的生存期與計劃本身相關聯。在從緩存刪除計劃時,也將從該視圖中刪除對應行。*/

--該系統視圖針對每一個緩存中的執行計劃統計其執行時間、物理、邏輯操作等信息

SELECT * FROM sys.dm_exec_query_stats

手動清空緩存執行計劃

---清空制定數據庫執行計劃

DECLARE @DBID INT

SET @DBID=DB_ID()

DBCC FLUSHPROCINDB(@DBID);

GO

---創建測試數據庫

CREATE TABLE TPlan

(ID INT PRIMARY KEY IDENTITY(1,1),

Name NVARCHAR(20) NOT NULL,

Istate INT NOT NULL,

Idate DATETIME DEFAULT(GETDATE())

)

GO

---創建索引

CREATE INDEX IX_TPlan_NAME ON TPlan

(Name

)

GO

INSERT INTO TPlan(Name,Istate)

VALUES('1',1),('2',2),('3',3)

GO

SELECT NAME FROM TPlan

GO

SELECT Cacheobjtype,objtype,dbid,objid,usecounts,pagesused,sql FROM sys.syscacheobjects

WHERE DBID=DB_ID()

使用Profiler監控

使用SQL:StmtRecompile監控,如果是監控存儲過程則使用:SP:Recompile

名單

名單

更多信息請查看IT技術專欄

更多信息請查看數據庫
易賢網手機網站地址:SQL Server 執行計劃緩存(1)
由于各方面情況的不斷調整與變化,易賢網提供的所有考試信息和咨詢回復僅供參考,敬請考生以權威部門公布的正式信息和咨詢為準!

2026國考·省考課程試聽報名

  • 報班類型
  • 姓名
  • 手機號
  • 驗證碼
關于我們 | 聯系我們 | 人才招聘 | 網站聲明 | 網站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點 | 投訴建議
工業和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網安備53010202001879號 人力資源服務許可證:(云)人服證字(2023)第0102001523號
云南網警備案專用圖標
聯系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關注公眾號:hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權所有:易賢網
云南網警報警專用圖標
主站蜘蛛池模板: 德昌县| 吴堡县| 红安县| 咸阳市| 仙居县| 稻城县| 嫩江县| 鲁山县| 涟源市| 勃利县| 繁昌县| 甘洛县| 长阳| 城市| 遂川县| 湘潭县| 汤阴县| 鸡东县| 乌兰察布市| 石屏县| 林周县| 临沧市| 喜德县| 永春县| 抚顺县| 山西省| 新竹市| 师宗县| 从化市| 方正县| 长白| 卢氏县| 文成县| 宁城县| 修文县| 平湖市| 遵义县| 穆棱市| 宜宾县| 古交市| 郯城县|