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

和記娛棒h88285:《Microsoft Sql server 2008 Internals》讀書筆記第九章Plan Caching and Recompilation(8)

?

上文主要先容了已編譯計劃、履行高低文和計劃緩存元數據相關的幾個常用的系統函數,并先容了幾個葵花寶典級的調優語句。本文將繼承關注緩存大年夜小治理、緩存項的資源(Costing of Cache entries)

■緩存大年夜小治理

我們已經懂得計劃重用和SQL Serve和記娛棒h88285r若何在緩存中查找一個計劃。現在,我們看看SQL Server若何治理計劃緩存的大年夜小以及它若何抉擇在緩存中沒有空間時某個計劃被移除。前面已經先容的部分,全局操作類如DBCC FREEPROCCACHE會從緩存中清除所有計劃,而alter procrdure時會從緩存中清除所有與這個存儲歷程相關的計劃。此外,在大年夜多半其他環境下,僅僅當SQL Server面臨內存壓力時才會從緩存中移除計劃。SQL Server用于抉擇何時和計劃若何應該被從緩存中移除的算法稱為“收受接收策略”(eviction policy)。每個緩存歷程都有自己的eviction policy,我們僅僅評論爭論工具計劃歷程和SQL計劃歷程。

抉擇哪個計劃被收受接收是基于計劃的資源,后文評論爭論。收受接收在SQL Server偵察到內存壓力和記娛棒h88285時開始,首先是零資源的計劃被移除,其他計劃的資源減半。兩種內存壓力為:本地內存壓力和全局內存壓力。

評論爭論內存壓力時,我們不得不提到一個詞,可見內存(visible memory),可見內存是在SQL Server緩沖池中可以直接地址化的可用物理內存。

在一個32位SQL Server實例中,可見內存的最大年夜值為2-3GB,這取決于你在boot.ini文件中是否設置/3GB標志開關。大年夜于這個數字的帶有地址的內存僅僅經由過程AWE-mapped-memory間接實現。

而一個64位SQL Server實例中,所有內存整個可以直接地址化,整個是可見內存。 你可以經由過程一個名為sys.dm_os_sys_info的DMV的一個列bpool_visible來查看這個值,這是一個8KB的buffer值。

別的,請留意,SQL 2005的不合版本及不合的SP對應的計劃緩存壓力限制值均不一樣,即SP!與SP2對應的值不一樣。SQL Server2008也是如斯。 32位與64位更是不合。

SQL Server版本

Cache Pressure Limit

SQL Server 2005 RTM&SP1

75%的可見目標內存0-8GB

+50%的可見目標內存8GB-64GB

+25%的可見目標內存>64GB

SQL Server 2005 SP2&SP3

SQL Server 2008 RTM

75%的可見目標內存0-4GB

+10%的可見目標內存4GB-64GB和記娛棒h88285

+5%的可見目標內存>64GB

SQL Server 2000

4GB upper cap on the plan cache

例如,一個64位SQL Server 2008 RTM實例,28GB目標內存。那么這個上限(Limit)將是75%*4GB+10%*(28-4)GB=3+2.4=5.4GB

◆局部內存變量

假如單個緩存存儲增長太大年夜,它標示局部內存壓力,SQL Server開始僅僅從該存儲中移除項,這種行徑防止一個存儲占用太多的總系統內存。

在單個頁分配時,假如緩存達到計劃緩存壓力上限和記娛棒h88285的75%,如上表所示,或多個分配頁時達到計劃緩存壓力限制的50%和記娛棒h88285,內部內存壓力被觸發,計劃開始從緩存中移除。如上例中,假如緩存存儲達到75%*5.4GB=4.05GB,此時某些計劃開始按指定資源順序移除,假如剛好有一些計劃添加到緩存,這一進一出,將會引起新計劃的相應光陰增添。

除了內存數量達到壓力上限外,SQL Server在一個存儲上鉤劃數量達到該存儲中哈希表大年夜小的四倍時,也會觸發內存壓力上限。如上文所示。哈希表中大年夜約10000-40000wh Bucket,也就意味著SQL存儲或工具存儲跨越40000-160000項。下面的查詢分手返回哈希表中的buckets數量和每個存儲中薦的數量:

SELECT type as 'plan cache store', buckets_count

FROM sys.dm_os_memory_cache_hash_tables

WHERE type IN ('CACHESTORE_OBJCP', 'CACHESTORE_SQLCP');

GO

SELECT type, count(*) total_entries

FROM sys.dm_os_memory_cache_entries

WHERE type IN ('CACHESTORE_SQLCP', 'CACHESTORE_OBJCP')

GROUP BY type;

GO

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

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

建体彩网
190足球即时指数手机版 时时彩平台 手机捕鱼通用作弊器 一只股票分析全面分析举例 新浪nba比分 足球比分网即时比分捷报比分 北京赛车pk人工计划 贵州十一选五开奖下载 江苏时时彩开奖规则 台湾麻将规则及游戏简介