更新日期: 2006 年 4 月 14 日
使用 min server memory 和 max server memory 这两个服务器内存选项可以重新配置 Microsoft SQL Server 实例所使用的缓冲池的内存量 (MB)。
默认情况下,SQL Server 的内存要求会根据可用系统资源的情况动态地变化。min server memory 的默认设置为 0,max server memory 的默认设置为 2147483647。可以为 max server memory 指定的最小内存量为 16 MB。
注意: |
---|
如果将 max server memory 设置为最小值,则可能会严重降低 SQL Server 的性能,甚至使其无法启动。如果在更改此选项之后无法启动 SQL Server,则请使用 –f startup 选项进行启动,并将 max server memory 重置为以前的值。有关详细信息,请参阅使用 SQL Server 服务启动选项。 |
当 SQL Server 动态使用内存时,它会定期查询系统以确定可用物理内存量。在 Microsoft Windows 2000 中,SQL Server 根据服务器的活动来增大或收缩缓冲区高速缓存,以使可用物理内存保持在 4 MB 到 10 MB 之间。保持此可用内存可避免 Windows 2000 分页。如果可用内存较少,则 SQL Server 将内存释放给 Windows 2000。如果可用内存较多,则 SQL Server 将内存分配给缓冲池。SQL Server 仅在其工作负荷需要较多内存时才向缓冲池增加内存;处于休眠状态的服务器不会增大其缓冲池的大小。
在 Windows Server 2003 中,SQL Server 使用内存通知 API QueryMemoryResourceNotification 确定缓冲池何时可以分配内存及释放内存。
建议允许 SQL Server 动态使用内存;但可以手动设置内存选项并限制 SQL Server 可以访问的内存量。在设置 SQL Server 使用的内存量之前,应确定适当的内存设置,方法是从总物理内存中减去 Windows 2000 或 Windows Server 2003 以及 SQL Server 的所有其他实例所需内存(以及当计算机不是专门用来运行 SQL Server 的计算机时,其他系统使用的内存)。这个差值就是可以分配给 SQL Server 使用的最大内存量。
手动设置 SQL Server 内存选项有两种主要方法:
- 第一种方法,将 min server memory 和 max server memory 设置为同一值。此值与达到该值后分配给 SQL Server 缓冲池的固定内存量相对应。
- 第二种方法,将 min server memory 和 max server memory 设置成一个内存范围。这种方法在系统或数据库管理员希望配置 SQL Server 实例,同时又要考虑在同一台计算机上运行的其他应用程序的内存需求时很有用。
min server memory 保证了 SQL Server 实例的缓冲池可用的最小内存量。SQL Server 不会在启动时立即分配 min server memory 指定的内存量。不过,除非降低 min server memory 的值,否则当内存使用量由于客户端负荷而达到该值后,SQL Server 不能从已分配的缓冲池中释放内存。
注意: |
---|
SQL Server 并不一定分配 min server memory 指定的内存量。如果服务器上的负荷从不需要分配 min server memory 指定的内存量,则 SQL Server 将以较少的内存运行。 |
max server memory 避免了 SQL Server 缓冲池使用的内存量多于指定的内存量,这样剩余的可用内存可以用来快速启动其他应用程序。SQL Server 不会在启动时立即分配 max server memory 指定的内存量。内存使用量会随着 SQL Server 的需要增加,直到达到 max server memory 指定的值。除非提高 max server memory 的值,否则 SQL Server 不能超过此内存使用量。
在减小 max server memory 值之前,请在加载时使用性能监视器来检查 SQLServer:Buffer Manager 性能对象,并注意 Stolen pages 和 Reserved pages 计数器的当前值。这些计数器将内存报告为 8K 页的数目。应将 max server memory 设置为大于这两个值的和,以免出现内存不足错误。对于合理的最低 max server memory 设置 (MB),近似值为 ([Stolen pages] + [Reserved pages])/ 100。若要减小 max server memory,可能需要重新启动 SQL Server 以释放内存。
更多细节可参考:http://technet.microsoft.com/zh-cn/library/ms180797.aspx
最大化网络应用程序的数据吞吐量
如果选择了“最大化网络应用程序的数据吞吐量”网络连接选项,操作系统通过在文件系统缓存中缓存应用程序(执行缓冲 I/O 操作)的 I/O 页来为这些应用程序提供优先权。此选项可能会限制可用于 SQL Server 正常操作的内存。
检查操作系统的当前设置-
单击“开始”,再单击“控制面板”,然后双击“网络连接”,再双击“本地连接”。
-
在“常规”选项卡上,单击“属性”,选择“Microsoft 网络的文件和打印机共享”,再单击“属性”。
-
如果选中了“最大化网络应用程序数据吞吐量”,请任选一个相应的其他选项,单击“确定”,再关闭其余对话框。
在 Windows Server 2003 中,SQL Server 2005 可以使用地址窗口化扩展插件 (AWE) 内存进一步协助对其自身内存要求与操作系统的内存要求进行负荷平衡。SQL Server 和操作系统之间的这种平衡受 min server memory 和 max server memory 选项的限制。如果服务器硬件支持热添加内存,可以根据需要向该服务器添加其他物理内存,而无需重新启动。有关 awe enabled 配置选项的详细信息,请参阅awe enabled 选项。有关详细信息,请参阅热添加内存。
注意: | ||
---|---|---|
在 Windows Server 2003 中,物理内存低于配置的虚拟内存的服务器可以启用动态 AWE 内存。而 Windows 2000 要求可用物理内存大于虚拟内存才能启用 AWE 内存。
|
理想情况下,在不引起系统交换页面到磁盘的前提下,应尽可能多地分配内存给 SQL Server。该阈值因系统而异。例如,在 SQL Server 专用的 32 GB 系统上,30-31 GB 可能就是 SQL Server 的适当的最大阈值;在 64 GB 系统上,60-62 GB 可能是适当的阈值。
注意: |
---|
当增大 SQL Server 内存量时,应确保有足够的磁盘空间来扩展操作系统的虚拟内存支持文件 (Pagefile.sys) 以容纳更多内存。有关虚拟内存支持文件的详细信息,请参阅 Windows 2000 或 Windows Server 2003 文档。 |
必要时,可以使用 Windows 系统监视器中的统计信息帮助您调整内存值。应该仅在添加或减少内存时或者改变系统使用方式时改变该值。
在 32 位操作系统(例如 Windows 2000 和 Windows Server 2003)中,可以访问 4 GB 虚拟地址空间。较低的 2 GB 虚拟内存用于用户进程,由应用程序使用。较高的 2 GB 由操作系统保留使用。所有操作系统版本(Microsoft Windows XP Professional 及更高版本,包括 Windows Server 2003)都包含 boot.ini 开关,这个开关可以为应用程序提供访问 3 GB 虚拟内存的权限,从而将操作系统使用的内存限制为 1 GB。有关使用 /3GB 开关内存配置的详细信息,请参阅您的 Windows 文档。
注意: |
---|
在 Windows Server 2003 中,如果服务器使用热添加内存设备,则 PAE 将自动启用。在这种情况下,您不必在配置为使用热添加内存设备的系统中使用 /PAE 开关。而在其他任何情况下,都必须在 Boot.ini 文件中使用 /PAE 开关才能利用超过 4 GB 的内存。 |
4 GB 的地址空间由 Windows 虚拟内存管理器 (VMM) 映射到可用的物理内存。自 Windows Server 2003 操作系统后,支持的物理内存量已有所增加。因此,AWE 可以访问的物理内存取决于您所使用的操作系统:
- Windows Server 2003 Standard Edition 最高支持 4 GB 的物理内存。
- Windows Server 2003 Enterprise Edition 最高支持 32 GB 的物理内存。
- Windows Server 2003 Datacenter Edition 最高支持 64 GB 的物理内存。
Win32 应用程序(例如 SQL Server)只识别虚拟(或逻辑)地址,而不识别物理地址。在特定时间某个应用程序使用的物理内存量(工作集)由可用的物理内存和 VMM 决定。应用程序不能直接控制物理内存。
通过使用 Intel 物理地址扩展 (PAE),Windows 2000 Advanced Server、Windows 2000 Datacenter Server 以及 Windows Server 2003 Enterprise Edition 和 Windows Server 2003 Datacenter Edition 32 位版本的物理内存都可以超过 4 GB。使用 Windows boot.ini 配置文件中的 /PAE 开关使物理内存超过 4 GB。这是访问 4 GB 以上 AWE 内存所必需的。有关在 Windows 2000 和 Windows Server 2003 中使用这种内存配置的详细信息,请参阅 Windows 文档。
Windows 2000 或 Windows Server 2003 这样的虚拟地址系统使用的虚拟内存可以超过物理内存,这样,虚拟内存和物理内存的比率可以大于 1:1。因此,可以在配置有各种不同物理内存的计算机上运行较大的程序。但是,使用比所有进程的平均组合工作集大得多的虚拟内存可能导致性能较差。
min server memory 和 max server memory 选项都是高级选项。如果使用 sp_configure 系统存储过程来更改这些配置,则只有在 show advanced options 设置为 1 时才能进行更改。更改后的设置将立即生效,而不需要重新启动服务器。
当运行多个数据库引擎实例时,可以使用三种方法来管理内存:
- 使用 max server memory 控制内存使用量。为每个实例建立最大设置,注意总的允许设置值不能大于计算机上的物理总内存。可能需要为每个实例提供与预期的工作负荷或数据库大小成正比的内存。这种方法的优势体现在:当启动新的进程或实例时,可以立即为这些进程或实例提供可用内存。这种方法的缺点为:如果没有运行所有实例,则所有运行中的实例都无法使用剩余的可用内存。
- 使用 min server memory 控制内存使用量。为每个实例建立最小设置,以使这些最小值的和比计算机上总的物理内存小 1-2 GB。此外,可能需要建立与该实例的预期负荷成正比的最小值。这种方法的优势体现在:如果没有同时运行所有实例,则运行中的实例可以使用剩余的可用内存。当计算机上存在其他占用大量内存的进程时,这种方法也十分有用,因为它可确保 SQL Server 至少获取合理的内存量。这种方法的缺点为:当启动新的进程(或任何其他进程)时,它可能会花费一些时间运行实例以释放内存,如果实例必须将修改后的页写回到数据库中来释放内存,则花费的时间可能会更长。还可能需要显著增大分页文件的大小。
- 不执行任何操作(不推荐)。带有工作负荷的第一个实例通常分配所有的内存。稍后启动的空闲实例最终可能会只使用最少的可用内存量运行。SQL Server 2005 不会尝试均衡分配各个实例的内存使用量。但是,所有实例都将响应 Windows 内存通知信号以调整其缓冲池的大小。自 Windows 2003 Server SP1 开始,Windows 便不再使用内存通知 API 来均衡分配各个应用程序的内存。它只提供有关系统内存可用性的全局反馈。
您可以在不重新启动实例的情况下更改这些设置,以便可以轻松地进行尝试以找到适用于您使用模式的最佳设置。
其他更多的内存方面的信息可以参考:内存体系结构