物理内存和虚拟内存

事实上,本节涉及的内容已经超出了数据库范畴,但因为 SQL Server运行在
Windows上,如果不清楚 Windows
是如何管理及使用物理内存和虚拟内存,在深入研究的过程中就会出现瓶颈。下面主要介绍
Windows 管理内存和应用系统的运行情况。

物理地址空间是处理器用来访问位于总线上的所有部件的集合。
在32位处理器上,地址总线为32位,寻址空间为4GB。
在使用PAE的32位服务器上,地址总线为36位,寻址空间为64GB。
在64位的处理器上生产商将地址总线限制为44位,寻址空间为2TB。
在32位系统上,系统中运行的每个进程有共计4GB的虚拟地址空间(VAS),用来存放应用程序所使用的程序代码和数据。4GB的VAS由内核模式和用户模式共享,用户模式地址空间和内核模式地址空间各占2GB,如果激活/3GB或者/USERUA选项后,用户模式地址空间占3GB。
在X64系统上,系统为进程分配8TB的VAS
在IA64系统上,系统为进程分配7TB的VAS
不同的操作系统版本,所支持的最大物理内存不一样。
虚拟地址空间只是虚拟内存,不是物理内存,而且它只是空间,不是实际内存。
虚拟内存管理器(Virtual Memory Manager
VMM)负责所有的物理内存,将物理内存在所有需要内存的进程间共享,当进程请求内存或者需要加载数据是,OS接受请求,将进程中一块虚拟内存空间和实际物理内存相互关联起来。
虚拟内存管理器可以将内存中数据取走并存放到页面文件中,直到进程试图访问该段数据时重新将数据从页面中加载到物理内存中并完成虚拟内存和物理内存之间的映射。
如果进程再次使用数据而数据需要从页面文件中重新载入,该操作被称为Hard
page Fault(硬页面错误)
当物理内存缺乏而多个进程争用有限内存时,会导致数据频繁地从物理内存中换入和换出,从而导致系统响应速度变慢,性能下降。
通过修改Boot.ini文件来打开/3GB选项或/UserVA选项。
/UserVA选项是Windows Server 2003中新增加的。
当/3GB选项被打开时,操作系统会受限于最多使用16GB的物理内存,故如果服务器拥有16GB或更多内存时,不要使用3GB选项

 

1.物理内存

PAE–physical Address Extensions
PAE是Intel引入一种突破32位地址总线的方式,将地址总线物理扩展到36位,从而允许32位操作系统最多使用64GB内存。
在Datacentrt版本的OS中,如果硬件允许热内存交换,即使不在Boot.ini文件中激活PAE,仍然会运行PAE内核

Windows Server 2003 Enterprise Edition(企业版):

在 Windows
中,通过任务管理器可以看到有多少物理内存,而任务管理器也是通常用于查看当前资源情况的第一个工具。内存,实际上指的是
RAM,但是也包含系统页文件。 RAM 也叫主存或者系统内存,它能直接被 CPU
访问。 RAM
是能用于存储的最快的资源,但是易丢失,重启计算机之后其中的信息将会丢失。另外,内存的高价格也意味着不能滥用它。

在拥有多于4GB的服务器上,则激活PAE选项。

 

内存的性能指标主要是 GB/s 和
ns,前者是吞吐量,后者是响应时间。磁盘的性能指标是 MB/s 和
μs。两者的差距是千倍。

AWE–Address Windowing Extensions
AWE是一位Windows
API,允许32位进程映射其虚拟地址空间以外的内存,使得进程可以使用物理内存来存储数据,但是在使用数据时,必须将它映射到进程中的VAS中。AWE的思想类似于Windows中的页面文件,由于AWE中的数据存放在内存中,内存到内存的数据传递更快。

* 支持8节点集群、NUMA;支持8路SMP

2.虚拟内存

Enable AWE option for SQL SERVER
1.Use sp_configure to set the value as 1 for the option ‘awe enabled’
2.Grant the right of ‘Lock Page in Memory’ to the service account.

* 内存支持: (i386)32位版支持32GB内存

如果所有的应用都运行在物理内存中,那么物理内存将会很容易变成瓶颈,因为所有的进程都必须共享相同的地址范围。另外物理内存不能随便增加,所以需要高效使用资源。

To enable AWE
exec sp_configure ‘show advanced options’, 1 
RECONFIGURE 
澳门新葡萄京官网首页 ,exec sp_configure ‘awe enabled’, 1 
RECONFIGURE

(X64) 64位版支持64GB内存

Windows 会授予每个进程一个虚拟地址空间,通过
VAS建立起应用程序和物理内存之间的桥梁。两个进程可以使用相同的 VAS, VAS
的大小取决于 CPU 的架构, 64 位系统可以使用 0~ 16EB
的空间,不过厂商通常会限制到 16TB。其中 8TB 为内核模式, 8TB
为用户模式。换句话来说, SQLServer 可以访问 8TB 的 VAS。近年来, 32
位系统已经逐渐退出市场,所以本书主要关注 64位系统。顺便说一下, 32
位系统仅支持 4GB 的 VAS,它分为 2GB 的内核模式和 2GB 的用户模式。

To enable the lock pages in memory option
1.On the Start menu, click Run. In the Open box, type gpedit.msc. The
Group Policy dialog box opens.
2.On the Group Policy console, expand Computer Configuration, and then
expand Windows Settings.
3.Expand Security Settings, and then expand Local Policies.
4.Select the User Rights Assignment folder.
The policies will be displayed in the details pane.
5.In the pane, double-click Lock pages in memory.
6.In the Local Security Policy Setting dialog box, click Add.
7.In the Select Users or Groups dialog box, add an account with
privileges to run sqlservr.exe.

 

3.虚拟内存管理器

User could not set AWE option on 64-Bit SQL Server, but if the service
account have the right of ‘Lock Pages in Memory’, SQL Server will use
AWE to access buffer pool memory automaticlly.
即使在64位系统上,SQL SERVER依然可以通过AWE来提升性能。
 

windows 2003 默认只支持小内存模式(最大3G)大于3G需要编辑Boot.ini加/pae
参数开启大内存模式才能支持3G以上内存,按以上操作编辑Boot.ini重新启动仍有问题就是你内存兼容有问题.下面给出一个2003
boot.ini 的例子:

虚拟内存管理器,是 Windows
的一部分,负责管理所有物理内存,并在系统中所有需要内存的进程之间共享。
VMM 的工作就是在进程需要操作内存时,提供 VAS。 VMM
通过管理每个进程的虚拟内存来实现该项工作。

 

为了实现管理, VMM 会在必要时从 VAS
中回收物理内存。将驻留在内存中的数据存储到页面文件中,这样保证数据不会丢失。当进程再次需要内存时,
VMM
会从页面文件中查找数据,并在一块空闲内存中写入这部分数据,然后将新页面映射到需要操作的
VAS中。如果这个过程发生延时或中断,就会成为页面错误,可以通过监控 SQL
Server 实例的Process: Page Faults/sec
计数器来查看是否存在过度的页面切换。

[boot loader]

如果系统有足够的 RAM, VMM
只需要传输内存并在进程结束后清理内存;如果没有足够的 RAM, VMM
就需要使用页面文件来存储数据了,这会带来一定的额外开销。

timeout=0

4.定义页面文件大小

default=multi(0)disk(0)rdisk(0)partition(1)WINDOWS

页面文件是磁盘文件。计算机使用页面文件来增加虚拟内存的物理存储地址。也就是说,当正在运行的进程使用的内存超过了可用的
RAM,操作系统会使用一个或多个
VAS把数据移动到物理磁盘的页面文件中,从而释放内存,用于其他用途。前面曾提到过,页面文件有一定的性能问题,所以应尽可能地保证
SQL Server 只使用物理内存。在默认情况下, Windows 会维护相当于 RAM1.5
倍大小的页面文件。这个页面文件的主要目的是提高数据从磁盘移到内存中的效率。如果担心过大的页面文件会影响性能,可以考虑把页面文件设为可用
RAM 的 50% 。

[operating systems]

另外,有时候 SQL Server
和操作系统可能没有很好地共享可用物理内存,这时可能会看到有关虚拟内存不足的系统警告。对于这种情况,最佳方法是增加
RAM、重新配置 SQLServer 的内存,或者增加页面文件的大小。

multi(0)disk(0)rdisk(0)partition(1)WINDOWS=”Windows Server 2003,
Enterprise” /fastdetect /usepmtimer /NoExecute=OptIn /PAE

5. NUMA

 

NUMA 指的是非一致性内存访问,另外一种系统体系结构是
SMP,两者的主要区别是将内存连到哪里以及如何在系统总线上排列处理器。在
SMP 中,内存通过一条共享总线对称地连接到所有处理器;而在 NUMA
中,每组处理器有自己的“本地”内存池。这个优点是只要所需的数据存在于本地内存池中,每个处理器就不需要访问太远的内存,但是如果数据不在本地,则开销会略高于
SMP。所以在使用 NUMA 时,应该尽量保证数据存放在本地内存中。

 

如果 CPU 插槽比较充足,可以使用每 4 个插槽一组,作为一个 NUMA
节点。这个数量是可以调整的,但是随着节点数增多,数据存放在本地内存的几率就会减小,而且管理节点的开销也会随之增大。
SQL Server 会在启动时创建自己的内部节点,用于映射 NUMA节点。

 

 

 

Windows Server 2003
Web版:为快速开发、部署Web服务与应用程序,提供Web托管与服务平台。支持2路SMP(对称多处理)系统、2GB内存。

Windows Server
2003标准版:面向中小型企业和部门级应用。支持4路SMP、4GB内存。

Windows Server
2003企业版:适合中心与大型组织使用,有32位和64位两个版本。支持8节点集群、NUMA;支持8路SMP,其中32位版支持32GB内存,64位版支持64GB内存。

Windows Server
2003数据中心版:面向要求强伸缩性和高可用性的企业,有32位和64位两个版本。32位版支持32路SMP、64GB内存;64位版支持64路SMP、512GB内存;两个版本均支持8节点集群、NUMA

要启用Windows 2003 支持大于4GB的物理内存,必须将参数/pae 添加到boot.ini
文件中。

 

 

 

 

 

服务器刚刚购回来时就发觉这个问题,为什么好好的4G内存主板剧只识别成3G呢,三返四次修改BIOS也只能让主板识别成3.3G及3.5G左右,真烦人。。。

原来是有的服务器都有内存空洞,所以3.3G-3.8G都是正常的,这部分空洞的内存作为硬件的消耗了,差的太多就要升级主板的BIOS和阵列卡的firmware就可以了。

如果是XP或2003系列的话还要在BOOS.INI里加上/PAE参数才能正常访问扩展内存。超过1G的话还要加上/USERVA=3030参数才能最优化配置虚似内存。

 

由win2003
SP1中一个重要的安全功能-“数据执行保护功能(简称:DEP)”产生的。

你可以在“控制面板→系统→高级→设置→数据执行保护”中找到它。

当你在这两项中进行切换时,“/NoExecute=OptIn”也会变成“/NoExecute=Optout”。

注意:此功能需要硬件支持:包括AMD Athlon 64、AMD
Opteron、Intel的安腾和安腾2,据说nVIDIA、VIA、全美达等公司也计划在其芯片中加入该技术。建议普通用户不要去修改它,否则会引起系统运行不稳定。

 

/NoExecute=alwaysoff 就是关闭数据执行保护功能

/NoExecute=OptIn 表示选择的是第一项,就是“只为……”那项

/NoExecute=Optout 表示选择的是第二项

 

 

/noexecute=AlwaysOff时,相当于关闭了DEP和EVP功能,凡是被其阻止的程序都能正常运行

 

/NoExecute=OptOut –DEP被打开,且一切服务都使用dep

 

 

v如果你的服务器内存大于3G以上,系统是Win2003不支持3G以上时可以看看此文

 

概要

本文介绍物理地址扩展(PAE) 和地址窗口化扩展(AWE)
并解释它们如何协同工作。本文还将讨论超出32 位操作系统所固有的4 GB
范围的内存使用限制。

更多信息

PAE 提高了IA32 处理器处理大于4 GB 的物理内存的能力。Microsoft Windows
2000 Advanced Server、Microsoft Windows 2000 Datacenter
Server、Microsoft Windows Server 2003 Enterprise Edition 和Microsoft
Windows Server 2003 Datacenter Edition 可以使用PAE 来利用超出4GB
的物理内存。若要启用PAE,需要在Boot.ini 文件中使用/PAE 参数。

 

注意:只有在服务器使用热添加内存设备时,Windows Server 2003 Enterprise
Edition 和Windows Server 2003 Datacenter Edition
才自动启用PAE。在这种情况下,不需要在配置为使用热添加内存设备的系统上使用/PAE
开关。在其他情况下,必须在Boot.ini 文件中使用/PAE 开关来利用大于4GB
的内存。

 

典型情况是,在Windows 2000 或Windows Server 2003
下运行的进程最多可以访问2 GB 的内存地址空间(假设未使用/3GB
参数),其中一些内存是物理内存,另一些是虚拟内存。运行的程序越多(因而进程也越多),占用的内存地址空间也就越接近2
GB 这一最大值。

 

当出现这种情况时,分页进程将显著增加并且会对性能产生负面影响。Windows
2000 和Windows Server 2003 内存管理器使用PAE
向程序提供更多的物理内存。这会降低对交换页面文件内存的需要,从而提高了性能。程序本身并不知道实际的内存大小。所有的内存管理和PAE
内存分配都由内存管理器处理,与运行的程序无关。

 

当使用/3GB 参数时,上述信息对于运行的程序有效。要求3 GB
内存的程序更有可能让其所需的内存有更多部分在物理内存中,而不是在分页的虚拟内存中。这将增强那些能够使用/3GB
参数的程序的性能。但例外情况是当/3GB 参数与/PAE
参数一起使用时。在这种情况下,操作系统将不使用任何超过16 GB
的内存。此行为是由内核虚拟内存空间考虑导致的。因此,如果系统使用Boot.ini
文件中的/3GB 项重新启动,并且系统的物理内存超过16
GB,则操作系统不使用额外的物理随机存取内存(RAM)。重新启动计算机时如果不使用/3GB
开关,将能够使用所有的物理内存。

 

AWE
是内存管理器功能的一套应用程序编程接口(API),它使程序能够寻址更多内存 —
超过标准32 位寻址的4 GB 内存空间。AWE
使程序能够将物理内存保留为非分页内存,然后将非分页内存部分动态映射到程序的内存工作集。此过程使内存密集型程序(如大型数据库系统)能够为数据保留大量的物理内存,而不必交换分页文件以供使用。相反,数据在工作集中进行交换,并且保留的内存超过4
GB 范围。此外,超出4 GB 的内存范围对内存管理器是公开的,并且AWE 通过PAE
发挥作用。没有PAE,AWE 就无法保留超出4 GB 的内存。

 

以下是一个Boot.ini 文件的示例,其中已添加了PAE 开关:

[boot loader]

timeout=30

default=multi(0)disk(0)rdisk(0)partition(2)WINDOWS

[operating systems]

multi(0)disk(0)rdisk(0)partition(2)WINDOWS=”Windows Server 2003,
Enterprise” /fastdetect /PAE

 

 

警告:Boot.ini 文件的内容根据您的配置而异。
有关更多信息,请单击下面的文章编号,以查看Microsoft 知识库中相应的文章:

317526 () 如何在Windows Server
2003 中编辑Boot.ini 文件

总之,PAE 是Windows 2000 和Windows Server 2003
内存管理器的一项功能,它为请求内存的程序提供了更多物理内存。程序并不知道它正使用的内存中有些在大于4
GB 的范围内,正如程序不知道它请求的内存实际上是在页面文件中一样。

 

AWE 是一个API
集,它使程序能够保留大内存块。保留的内存是非分页的,并且只可以由该程序来使用。
有关AWE 和PAE 的更多信息,请单击下面的文章编号,以查看Microsoft
知识库中相应的文章:

268363 () Windows 2000 中的Intel
物理地址扩展(PAE)

 

 

如果向系统添加更多内存,BIOS
可能会认出安装在服务器中的全部物理RAM,而Windows
将只能认出部分RAM。如果服务器具有启用的冗余内存功能或内存镜像功能,则全部剩余内存可能对Windows
都不可见。冗余内存在某个内存块故障时为系统提供一个故障转移的内存块。内存镜像将内存块拆分为一个镜像集。两种功能都在BIOS
中启用或禁用,而无法通过Windows
访问。要修改这些功能的设置,您可能必须参考系统用户手册或OEM
网站。另外,您可能必须联系硬件供应商。

 

例如,如果正在运行的系统安装了4GB 的RAM,随后又添加了另外4GB
的RAM,Windows 可能只识别出4GB 或6GB
的物理内存,而不是全部的8GB。冗余内存功能或内存镜像功能可能在您未知的情况下就在新内存块上启用。这些症状类似于未将/PAE
开关添加到Boot.ini 文件时的症状

Server 2003 Enterprise Edition(企业版):
* 支持8节点集群、NUMA;支持8路SMP * 内存支持: (i386)32位版支持32GB内存
(X64) 64位版支持64GB内存 window…

发表评论

电子邮件地址不会被公开。 必填项已用*标注