本文是关于MSSQL内存架构和管理的。边肖觉得很实用,所以分享给大家学习。希望你看完这篇文章能有所收获。我们就不多说了。让我们和边肖一起看看。
1.MSSQL内存体系结构
与Oracle相比,MSSQL的内存区域没有那么清晰,但与Oracle类似,MSSQL的内存区域大致可以分为三个部分:缓冲池、查询/工作区内存和其他缓存/内存。下面,我们分别简单介绍这三个记忆区:
1)缓冲池:
,案例数据库_id
else db_name(数据库_id)
,计数(*)*8/1024为“缓存大小(MB)”
按db_name(数据库_id)、数据库_id分组
2)查询/工作空间内存:
与Oracle的PGA类似,在MSSQL中,查询memoy(也称为工作区内存)用于在哈希过程中存储临时结果,并在查询执行过程中进行排序。虽然大家都知道Oracle的PGA,但是MSSQL的查询内存中可能没有太多可读的文档,所以没有多少人清楚和意识到,包括MSSQL后台进程和内存组件的一些内部细节和内容,这些都是现状。这可能和很多因素有关,这里就不多讨论了。但是,当您仔细查看MSSQL中SQL语句的查询计划时,您会清楚地看到与哈希和排序等操作相关的查询内存内容。
查询内存空间可以占据缓冲池大小的25%到75%,但是当缓冲池中没有内存压力时,查询内存可以进一步增长。对于所有开销小于3、查询内存需求小于5M的小查询,查询内存可以为其预留整个查询内存空间的5%。单个查询最多可以占整个查询内存的20%,以保证其他查询的正常执行,这与Oracle的PGA非常相似。您可以通过以下SQL语句获得查询语句的查询内存和相关授权:
选择会话标识、sql句柄、授权时间、请求内存kb
fromsys . DM _ exec _ query _ memory _ grants
,sum(isnull(granted_memory_kb,0))granted_memory_kb
fromsys . DM _ exec _ query _ memory _ grants
3)其他缓存/内存:
在MSSQL内存区,除了上面提到的缓冲池和查询/工作区内存,其余都是其他缓存/内存部分,用于MSSQL中所有不能放在上面两个内存区的内存组件。虽然这部分没有Oracle中定义的那么清晰,但基本等同于Oracle中除了SGA的缓冲池之外的其他组件,其中以共享池为主。这部分区域虽然没有占用太多内存,但是包含了很多内存组件,这也是非常重要的。我们可以通过以下SQL语句查询其相关信息:
选择[名称]、[类型]、pages_kb、entries_count
选择名称、值、使用中的值、[描述]
类似于' %服务器内存% '的位置
page_fault_count,memory _利用率_百分比,
进程_虚拟_内存_低
以上就是MSSQL内存架构和管理的样子。边肖认为,一些知识点可能会在我们的日常工作中看到或使用。我希望你能通过这篇文章学到更多的知识。更多详情请关注行业信息渠道。
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/124813.html