本篇文章给大家分享的是有关MSSQL内存架构及管理是怎样的,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
1. MSSQL内存架构
相比较Oracle,MSSQL的内存区域并没那么清晰,但和Oracle类似,MSSQL内存区域大体也可以分为三个部分:buffer pool,query/workspace memory,其他cache/memory。下面,我们分别对这三个内存区域做简要介绍:
1) Bufferpool:
,case database_id
else db_name(database_id)
,count(*)*8/1024 as 'cached size (MB)'
group by db_name(database_id),database_id
2) Query/workspacememory:
类似Oracle的PGA,MSSQL中,query memoy(也称为workspace memory)用于存储查询执行时哈希和排序期间的临时结果。虽然大家都知道Oracle的PGA,但MSSQL的query memory也许并没有太多文档可读,因此,也并没有太多人清楚和知道,包括MSSQL的background process,memory components等内部的一些细节和内容,都是这种现状,这也许和多方面因素相关,这里不做太多的探讨。但是,当你仔细的查看MSSQL中SQL语句的查询计划时,你会清楚的看到hash和sort等操作相关的query memory内容。
Query memory空间可以占到buffer pool大小的25%和75%之间,但是,当buffer pool不存在内存压力时,query memory也可以进一步增长。对于所有代价低于3和query memory需求低于5M的小查询,其query memory可以为之保留整个query memory5%的空间。单个查询最多能占到整个query memory的20%以保证其他查询的正常执行,这点来说,与Oracle的PGA非常类似。可以通过以下SQL语句来获取查询语句的query memory及相关授权情况:
select session_id,sql_handle,grant_time,requested_memory_kb
from sys.dm_exec_query_memory_grants
,sum(isnull(granted_memory_kb,0))granted_memory_kb
from sys.dm_exec_query_memory_grants
3) 其他cache/memory:
MSSQL内存区域,除了上面讲述的buffer pool和query/workspace memory外,剩下的那就是其他cache/memory部分,该部分内存用于MSSQL中所有不能放于前述两个内存区域的内存组件。这部分虽然不像Oracle中定义的那么清晰,但基本相当于Oracle中的SGA中除去buffer pool外的其他组件,这其中,主要是shared pool。该部分区域,虽然占据的内存不多,但包含众多的内存组件,也很重要。我们可以通过以下SQL语句来查询其相关信息:
select [name],[type],pages_kb,entries_count
select name,value,value_in_use,[description]
where namelike'%server memory%'
page_fault_count,memory_utilization_percentage,
process_virtual_memory_low
以上就是MSSQL内存架构及管理是怎样的,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注亿速云行业资讯频道。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。