Heim >Datenbank >MySQL-Tutorial >Analysis Memory In Sqlserver

Analysis Memory In Sqlserver

WBOY
WBOYOriginal
2016-06-07 15:19:541120Durchsuche

数据库内存浅析 内存是数据库一个非常大的主题,可是说是影响数据库性能的关键因素之一, 这几天研究了下,不是很深,与大家分享下。 初识数据库内存 内存存在的意义在于协调高速的CPU和低速的磁盘之间的读写差距,对数据库而言, 内存中的数据越多意味着读

数据库内存浅析

内存是数据库一个非常大的主题,可是说是影响数据库性能的关键因素之一,

这几天研究了下,不是很深,与大家分享下。

初识数据库内存

内存存在的意义在于协调高速的CPU和低速的磁盘之间的读写差距,对数据库而言,

内存中的数据越多意味着读写更快、性能更好。当然,在服务器上不可能给你无限制的内存,

这就需要我们合理配置数据库内存,以达到最佳性能。

在SQL Server数据库中,通过数据库的SSMS管理界面可以看到数据库有个内存设置选项,如图:

Analysis Memory In Sqlserver

下面将详细分析数据库的内存:

最小内存

上图可以看到数据库有个最小内存选项,默认是0,当然也可以设置成其他值,

当设置成某个具体值时,比如2G,,每次数据库引擎启动时并不会马上达到数据库的最小内存,

如果没有负载,可能永远达不到,如果没有任何负载,sqlserver 2008 r2的内存占用100M不到。如下图:

Analysis Memory In Sqlserver

既然这样,那设置最小内存是不是没有意义了呢,

其实不然,一旦数据库负载达到最低内存后,就不会再低于这个值,就算操作系统向其索要也不会释放(重启除外)。

我们试想没有这个机制,当没有业务时数据库的内存非常低,一旦负载起来,数据库就向操作系统申请内存,这种情况会反复出现,

对性能有影响,更重要的是,当数据库申请时不见得操作系统有多余的内存分配给数据库,这时数据库就只能歇菜了。

因此合理设置数据库的最低内存也是十分重要的。下图是微软建议的最小内存值,应该是服务器总内存减去1-2G。

Analysis Memory In Sqlserver

引用于:http://msdn.microsoft.com/en-us/library/ms178067.aspx

最大内存

如果没有设置最大内存,数据库采用自动分配内存的方式,当负荷加重时,会不断向操作系统申请可用内存,

直到操作系统为自身保留内存的最小内存为止,

需要注意的是:在32位的环境中,操作系统能直接寻址的内存只有4G,

默认情况下操作系统将预留2G,剩下2G分配给应用程序。

也就是说,即使设置了最大内存,数据库也无法使用超过2G的内存。

这种方式肯定无法在很多生产环境中使用,于是微软为32位系统提供了临时解决方案,

也就是通过启用3G开关(在启动文件中设置),这样可以值给操作系统预留1G内存,使得应用程序使用3G的内存。

但这也不是长久之计。这对一个数据库而言肯定不够,一般数据库使用的内存在4G、8G甚至更大,

那如何能让操作系统支持大于4G的内存呢,如何又使得数据库支持更大的内存呢?

如果要实现数据库支持大于2G的内存甚至达到4G、8G更大内存时,从上文的分析中也可以看到,需要解决两个问题:

1)、在32位系统如何支持大于4G的内存

2)、如何使得数据库使用大于4G的内存

对于第一个问题,微软为企业版的操作系统提供了一个类似/3G开关的机制,也就是/PAE(也是在启动文件中设置)

这种方式可以使得32位企业版的操作系统支持到64G的内存,

需要注意的是这没有改变只能直接寻址4G内存的事实,只是将现有的4G内存分区,

将一部分空间指向到大于4G的内存区域,类似C语言的指针机制。

这样第一个问题解决了,那第二个问题呢,如何使得32位的数据库使用大于4G的内存?

如下图:

Analysis Memory In Sqlserver

勾选AWE(地址窗口扩展),这就运行数据库使用大于2G的内存了。

需要注意的是:当同时开启/pae和数据库awe时,操作系统只能识别到16G的最大内存。

上文讨论了32位系统,那64位系统怎么办呢,

很显然,64位系统根本就不需要考虑这个问题,因为64已经可以支持直接寻址2T的内存,

当然,64位的SQL Server也完全没有开启AWE(你可以开启,数据库会忽略该选项)

那么是不是64位系统就不需要做任何设置了呢?

其实不然,为了保证数据库能够使用windows特性来将数据保持在物理内存中:需要将数据库启动的用户锁定内存页面,

从而防止操作系统将数据分页到磁盘上的虚拟内存中。通常建议在64位的环境启用该策略。

如下图:

Analysis Memory In Sqlserver

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn