sql server内存(sqlserver 内存数据库)

发布时间:2024-06-15
本文主要介绍sql server内存(sqlserver内存数据库),下面一起看看sql server内存(sqlserver内存数据库)相关资讯。
了解sql server的内存管理是sql server问题处理和性能调优的基本问题。介绍了sql server内存管理的原理。二级存储(secondary storage)计算机的存储系统是分等级的,离cpu越近越高兴,但容量越小(如图1)。比如传统的计算机存储架构是:寄存器缓存在cpu的第一级,两级缓存,内存,硬盘依次缓存,但同时远离cpu,存储系统会比之前的存储系统多一个数量级,比如硬盘通常同时多一个数量级。图一。计算机存储系统因此,sql server,内存分配通过正常的生产系统可以 通常不会加载所有的数据,所以会涉及到两级存储,也就是磁盘。磁盘存储组件机械最后的现代计算机需要移动磁头磁盘来读取数据(具体原理可以在我之前写的一篇文章中找到),因为access数据库中的数据是随机分布在磁盘的各个位置的,所以如果需要经常移动磁头,就需要经常读取磁盘。表演会很精彩。计算机存储系统可以知道计算机在硬盘操作中需要先读取内存中的所有数据,所以充分利用缓冲内存,减少磁盘的io访问是提高服务器sql性能的关键问题之一,这也是本文的出发点。一个自调整引擎由于sql server一直面向中小型企业,所以sql server存储引擎被设计成一个不需要太多配置就可以使用的产品,从而降低部署成本。不过这种配置也被很多人诟病对微软过于开放,几乎没有直接分配sql server使用的内存空间。唯一开放的配置是是否使用awe以及实例占用的最大或最小内存,如图2所示。图二。sql server控制的内存控制具体的sql server,如何使用内存,比如给执行计划缓存分配多少,给数据分配多少缓冲区,这些都是不可控的。这也是为什么很多其他使用微软技术的技术开发人员会有一种优越感,但是在我看来,虽然sql server提供的可配置的地方很少,而且很多地方都是间接配置的,但是你知道原理的同时也需要知道windows的一些原理。sql server中如何使用内存sql server存储引擎本身就是windows下的一个进程,所以sql server使用的内存和其他windows程序一样,需要windows申请内存。在存储了来自windows的应用程序后,sql server可以用粗略的内存划分为两个部分:缓冲池内存(数据页和页面,无缓冲区的free)内存(行、dll和链接)服务器等。).缓冲池的内存占用了sql server的大部分内存使用量,缓冲池占用的内存也设置了图2中的最大值和最小值,所以内存占用sqlservr.exe可能大于图2中的最大值。还有一点就是sql server使用了内存特性:它使用了多少以后不会公布(除非通知它windows的内存压力)。例如,我们公司 的开发服务器,如图3所示,在几乎没有负载的情况下查看内存使用情况。图3.sql server进程内存使用情况您可以看到,当cpu为0负载时,内存占用了13 g..这实际上是未发布的应用程序从sql server到windows的结果。特定sql server可以使用多少内存由以下因素决定:1 .物理内存的大小2。所安装windows版本的内存限制(如windows server 2008标准的限制,最大内存只有32 gb) 3。sql server是32位或64位4。配置sql server使用的内存量,如图2所示。对于5.sql server版本(例如,express版本只能使用1g内存),sql server操作系统的三层内存分配分为三个级别的内存分配,如图4所示。图4。sql server操作系统内存的相关存储节点第一个底层是存储节点,存储节点的作用是从windows sql server操作系统中分配内存。每个sql server实例通常只有一个存储节点,存储节点的数量仅取决于numa架构的硬件配置。我们可以通过dbcc memorystatus看到一些关于内存的节点信息,如图5所示。图5。查看内存节点信息,我们可以看到,按照应用内存大小的分类,可以分为两部分。1。将8kb或更小的存储单元应用于缓存。(分页分配图5) 2。应用的内存超过一个8kb的单元,这被称为多页面(或memtoleave)(页面分配器图5)。为什么叫memtoleave?它被称为memtoleave,因为sql server用于大部分缓存,但它仍然需要一些连续内存sql clr、链接服务器和备份缓冲区。sql 32服务器将保留一部分虚拟地址来启动实例(vas)多页分配器。具体预留多少可以用下面的公式计算:预留地址=((cpu核数-4) 256)* 0.5mb 256mb,通常是384mb。记忆让 让我们来看看内存职员,即分配内存的内存管理员,并用它来分配已分配的内存。我们可以简单地做出如下声明,如图6所示。图6。按内存管理员的类别分类注:如图4所示,内存管理员只是内存分配的一部分,另一部分是数据缓存(缓冲池)。缓冲池在开始讲缓冲池之前,首先需要讨论的是虚拟内存。在windows中,每个进程都有一个虚拟内存(虚拟地址空间vas)。32位系统是2的32种幂,即4g。4g是一个窗口分为两部分,一部分是windows和其他应用。虚拟内存并不是实际的物理内存,而是物理内存的映射,当物理内存中不存在的虚拟内存的内容,产生了内存的一部分页错替换,然后需要读入内存和硬盘的部分可以从我之前写的一篇文章中读到:操作系统的内存管理。所以缓冲池的作用是通过数据页进行缓冲,从而减少以后读取数据时对磁盘的访问。缓冲池的这一部分是图2中最大和最小服务器内存所占用的空间。这个最小值并不意味着sqlserver启动时占用大量内存,但是一旦超过这个值,sql server缓冲池的使用就不会被释放。在dbcc内存状态的一部分,我们可以看到缓冲池的信息,如图7所示。图7缓冲池相关信息从sql server实例开始。vas地址空间缓冲池的保留取决于很多因素,包括:物理内存和sql server 32或64(32的限制是4g,指定一半windows减去memtoleave换空间)和实际sql server的物理内存,可以用下面的语句表示,如图8所示。图8。查看缓冲池使用的物理内存。缓冲池将继续按需应用内存。如果需要,缓冲池将继续消耗内存。除非windows通知sql server内存太低,否则缓冲池将能够释放内存,否则缓冲池将占用内存而不释放内存。另外,缓冲池和sql server操作系统分配的页面大小是一样的,都是8192字节。当sql server等部分需要借用内存缓冲池时,这部分的内存在物理内存中是不连续的,听起来像是缓冲池内存管理系统。sql server占用的内存可以用这个公式估算:通过缓冲池借用的页面缓冲池的内存和缓冲池占用的非内存multipageallocator占用的内存,如图9所示。图9。可以估算出sql server占用的内存。内存对象本质上是一堆,由页面分配器分配。可以通过sys.dm_os_memory_objects dmv认为,dmv可以看到list的page_allocator_address列,是内存的五线谱,内存对象的标识,是分配内存的五线谱。32位sql server内存瓶颈前面的基本原理可以看作是一个32位sql server使用vas地址分配,所以地址空间限制在4gb,4gb会有半个窗口,这样缓冲池只能使用2g内存,这就使得32位sql server即使有额外的物理内存也没有用。解决方案之一是通过将windows的2g默认内存降低到1g,将sql server的默认内存降低到3g。通过键入bcdedit/在windows server 2003中,我们需要添加/3gb启动参数作为boot.ini另一种方法是使用awe(地址窗口扩展)来分配内存. awe加4位。通过计算机物理地址扩展(physical address extension pae),将32位cpu的地址范围提高到2的36倍,即64gb,基本解决了寻址范围不足的问题。allocateuserphysicalpages virtualalloc和allocateuserphysicalpages virtualalloc以及sql server用于申请内存窗口的方法。默认情况下,所有内存,sql server需要使用virtualalloc windows内存。这个应用是操作系统级的,也就是虚拟内存直接与之对应。这就导致了在virtualalloc中所有内存分配都可以在虚拟内存中的情况下,windows所面临的内存压力置换问题。这将导致木卫一生涯。需要allocateuserphysicalpages内存来直接匹配底部页面的页表。所以内存需要的内存不会被这种方法替代。在sql server 32中,通过在缓冲池中打开awe内存分配,数据缓存将使用该函数,内存缓冲池的其他部分和memtoleave部分(主要是计划缓存的实现)将通过virtualalloc分配内存。因此,在通过awe打开内存之前,sql server首先需要相应的权限,否则会在日志中报错,如图10所示。图10。打开awe而不打开相应的权限。我们可以在组策略中设置一个帐户使sql server拥有此权限,例如如图11所示。图11。64位sql server锁定内存页面(内存中锁定的页面)问题64 windows存在内存问题,但还是要注意,默认情况下,64位sql server还是使用virtualalloc来分配内存,也就是说windows中所有的内存分配都会有压力。当页面被替换时,这可能会导致抖动(缓冲池丢失,这是sql)。服务器上的页面缓冲池被换到了硬盘上,造成了大量的io占用(查看sys . dm _ exec _ query _ memory _ grants dmv的查询,所以要等待内存)64页面allocateuserphysicalpages上的sql server缓冲池的内存分配日期可以避免这个问题。对于32位sql server,64位sql server不支持。;不需要在awe中打开,只需打开如图11所示页面的内存锁。但这也暴露了另一个问题,因为sql server锁定了内存页。当windows出现紧急情况时,sql server将无法处理紧急情况下的windows内存(当然,池中的一些非数据缓存和memtoleave buffer仍然是可以的,但往往不够用,因为这部分的内存消耗与数据缓存相比是非常小的),因为sql server的特点是内存多少,这可能导致windows无法响应windows内存不足时的不稳定甚至崩溃。在内存中锁定页面后,sql server缓冲池被打开,使用的内存受到限制。正如在图2中已经提到的,我在这里不再赘述。有一个问题。当通过allocateuserphysicalpages分配缓冲池时,我们可以在任务管理器中看到,我们的sqlservr.exe内存只包含未缓存的数据缓冲池和memtoleave部分,不包含数据缓存,因此可能会导致sqlservr.exe占用数百兆内存和内存使用量。这时,我们需要看到的sql server:在perfmon.exe找到的内存管理服务器的总内存计数器。摘要:本文介绍了sql server内存管理的基本原理和sql server的部分内存使用。对于sql server性能调优,这是了解内存使用情况的一个关键部分。许多io问题可能是由内存引起的。单击此处下载本文的pdf版本。
了解更多sql server内存(sqlserver内存数据库)相关内容请关注本站点。
上一个:洱海环湖自驾游最佳路线图
下一个:旋进漩涡与涡街的异曲同工之处

固态硬盘贵还是移动硬盘贵,移动硬盘和固态硬盘哪个好
儿子可以与父母断绝关系吗
茉莉花家庭养殖方法 怎么养茉莉花
五匹大金空调故障代码E6(五匹大金空调故障代码E0)
特斯拉产业链梳理及锂离子电池材料全解
11(808980工控配件来自norgren品牌满足汽车等行业需求)
做假烟四百万判几年
老公有义务养老婆吗
粉体综合特性分析仪/振实/松装密度/休止角/崩溃角测试仪
认识tridelta品牌(高质量传感器氧气传输器等工控配件)