茄子在线看片免费人成视频,午夜福利精品a在线观看,国产高清自产拍在线观看,久久综合久久狠狠综合

    <s id="ddbnn"></s>
  • <sub id="ddbnn"><ol id="ddbnn"></ol></sub>

  • <legend id="ddbnn"></legend><s id="ddbnn"></s>

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

    概述

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

    基礎(chǔ)概念

    SQL Server 有一個(gè)用于存儲執(zhí)行計(jì)劃和數(shù)據(jù)緩沖區(qū)的內(nèi)存池。池內(nèi)分配給執(zhí)行計(jì)劃或數(shù)據(jù)緩沖區(qū)的百分比隨系統(tǒng)狀態(tài)動態(tài)波動。內(nèi)存池中用于存儲執(zhí)行計(jì)劃的部分稱為過程緩存。

    SQL Server 執(zhí)行計(jì)劃包含下列主要組件:

    查詢計(jì)劃

    執(zhí)行計(jì)劃的主體是一個(gè)重入的只讀數(shù)據(jù)結(jié)構(gòu),可由任意數(shù)量的用戶使用。這稱為查詢計(jì)劃。查詢計(jì)劃中不存儲用戶上下文。內(nèi)存中查詢計(jì)劃副本永遠(yuǎn)不超過兩個(gè):一個(gè)副本用于所有的串行執(zhí)行,另一個(gè)用于所有的并行執(zhí)行。并行副本覆蓋所有的并行執(zhí)行,與并行執(zhí)行的并行度無關(guān)。

    執(zhí)行上下文

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

    怎樣緩存執(zhí)行計(jì)劃

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

    SQL Server自動刪除執(zhí)行計(jì)劃

    什么情況下會刪除執(zhí)行計(jì)劃

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

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

    怎樣判斷需要刪除的執(zhí)行計(jì)劃

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

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

    重新編譯執(zhí)行計(jì)劃

    根據(jù)數(shù)據(jù)庫新狀態(tài)的不同,數(shù)據(jù)庫中的某些更改可能導(dǎo)致執(zhí)行計(jì)劃效率降低或無效。SQL Server 將檢測到使執(zhí)行計(jì)劃無效的更改,并將計(jì)劃標(biāo)記為無效。此后,必須為執(zhí)行查詢的下一個(gè)連接重新編譯新的計(jì)劃。導(dǎo)致計(jì)劃無效的情況包括:

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

    對執(zhí)行計(jì)劃所使用的任何索引進(jìn)行更改。

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

    刪除執(zhí)行計(jì)劃所使用的索引。

    顯式調(diào)用 sp_recompile。

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

    對于帶觸發(fā)器的表,插入的或刪除的表內(nèi)的行數(shù)顯著增長。

    使用 WITH RECOMPILE 選項(xiàng)執(zhí)行存儲過程。

    測試

    --1.緩存的每一個(gè)對象返回一行,包括緩存計(jì)劃的類型、緩存引用的對象、緩存計(jì)劃占用的空間、被使用次數(shù)、以及創(chuàng)建時(shí)間等

    SELECT * FROM sys.syscacheobjects;

    --2.緩存的每個(gè)查詢計(jì)劃返回一行,包括執(zhí)行計(jì)劃被使用的次數(shù)、執(zhí)行計(jì)劃的大小、內(nèi)存地址、執(zhí)行計(jì)劃的類型、語句等

    SELECT * FROM sys.dm_exec_cached_plans;

    GO

    ---3.返回由指定的 sql_handle 標(biāo)識的 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 格式返回計(jì)劃句柄指定的批查詢的顯示計(jì)劃,主要接受來自sys.dm_exec_cached_plans的plan_handle句柄

    SELECT * FROM sys.dm_exec_query_plan(plan_handle);

    GO

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

    SELECT * FROM sys.dm_exec_plan_attributes(plan_handle);

    GO

    --6.針對每個(gè) Transact-SQL 執(zhí)行計(jì)劃、公共語言運(yùn)行時(shí) (CLR) 執(zhí)行計(jì)劃和與計(jì)劃關(guān)聯(lián)的游標(biāo)返回一行,,主要接受來自sys.dm_exec_cached_plans的plan_handle句柄

    SELECT * FROM sys.dm_exec_cached_plan_dependent_objects(plan_handle);

    --7.返回緩存查詢計(jì)劃的聚合性能統(tǒng)計(jì)信息。緩存計(jì)劃中的每個(gè)查詢語句在該視圖中對應(yīng)一行,并且行的生存期與計(jì)劃本身相關(guān)聯(lián)。在從緩存刪除計(jì)劃時(shí),也將從該視圖中刪除對應(yīng)行。*/

    --該系統(tǒng)視圖針對每一個(gè)緩存中的執(zhí)行計(jì)劃統(tǒng)計(jì)其執(zhí)行時(shí)間、物理、邏輯操作等信息

    SELECT * FROM sys.dm_exec_query_stats

    手動清空緩存執(zhí)行計(jì)劃

    ---清空制定數(shù)據(jù)庫執(zhí)行計(jì)劃

    DECLARE @DBID INT

    SET @DBID=DB_ID()

    DBCC FLUSHPROCINDB(@DBID);

    GO

    ---創(chuàng)建測試數(shù)據(jù)庫

    CREATE TABLE TPlan

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

    Name NVARCHAR(20) NOT NULL,

    Istate INT NOT NULL,

    Idate DATETIME DEFAULT(GETDATE())

    )

    GO

    ---創(chuàng)建索引

    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監(jiān)控

    使用SQL:StmtRecompile監(jiān)控,如果是監(jiān)控存儲過程則使用:SP:Recompile

    名單

    名單

    更多信息請查看IT技術(shù)專欄

    更多信息請查看數(shù)據(jù)庫
    易賢網(wǎng)手機(jī)網(wǎng)站地址:SQL Server 執(zhí)行計(jì)劃緩存(1)
    由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請考生以權(quán)威部門公布的正式信息和咨詢?yōu)闇?zhǔn)!

    2026國考·省考課程試聽報(bào)名

    • 報(bào)班類型
    • 姓名
    • 手機(jī)號
    • 驗(yàn)證碼
    關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機(jī)站點(diǎn) | 投訴建議
    工業(yè)和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網(wǎng)安備53010202001879號 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號
    云南網(wǎng)警備案專用圖標(biāo)
    聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關(guān)注公眾號:hfpxwx
    咨詢QQ:1093837350(9:00—18:00)版權(quán)所有:易賢網(wǎng)
    云南網(wǎng)警報(bào)警專用圖標(biāo)