Microsoft 的二进制文件编辑器 (Editbin.exe) 可用于调整 SQL Server 大内存配置允许在具有 2 GB 或更多的物理 RAM 的计算机上的 SQL Server 线程的堆栈大小。
一个 32 位操作系统为 Windows NT 可以解决最大为 4 GB 的虚拟内存。Windows NT 可将此虚拟地址范围划分为 2 GB 用于用户进程和系统的另一个 2 GB。因此,SQL Server 可以解决最大 2 GB 的虚拟内存 (或物理内存),如果 2 GB 或更大系统上存在。
如果您正试图最大化的 2 GB 或更多的物理内存的系统上分配给 SQL Server 内存数量,您可能会发现您将不能将按照您预期的那样为高 SQLServer 内存参数设置。例如对于设置 900,000 页 (大约 1.8 GB) 的参数可能会导致下面的任一 SQL Server 的内存:
· 启动服务器时出现错误:initdata: 对缓冲区页的子分配失败 (x 所请求的字节为单位)。
-或者-
· 试图将用户连接时出现错误: 没有足够的内存用于 pss 分配。
这两个错误写入Windows NT 事件日志和 $ SQL Server 错误日志。
在最初的分析上似乎合理您应该能够将 1.8 GB 分配给 SQL Server 并将 Windows NT 系统的其余部分。但是,默认,SQL Server 由创建的每个线程由 Windows NT 指派 1 MB 的虚拟堆栈空间,这不占 SQL Server 内存配置参数值中的虚拟内存。如果 SQL Server 被配置为使用多个几百个辅助线程,大量的虚拟内存可以专用于线程的堆栈空间并且因此不能用于服务器启动时或在必要时用户连接的动态内存分配。例如对于 200 工作线程将占用大约 200 MB 的虚拟内存的单独的堆栈空间。实际,SQL
Server 线程是永远不会使用保留的虚拟内存地址的大容量。但是,WindowsNT 它们时默认情况下分配 SQL Server 创建线程。
在情况下其中有 2 GB 或更多的物理内存在的系统上,您正试图为 SQL Server (以及 SQL Server 数据高速缓存的) 尽可能使用尽可能多的内存就可以减少默认线程虚拟堆栈大小要有效地使用这些内存地址。在中增加分配给 SQL Server,(通过增加 SQL Server 内存配置参数,或通过只能够将多个用户连接不内存不足的情况下) 的内存数量,可以看到降低堆栈大小的效果。
若要修改 SQL Server 线程堆栈大小,您必须使用 Microsoft Visual c + + 开发环境中包含Microsoft 二进制文件编辑器 (Editbin.exe)。从 Windows NT 的命令提示符处运行的 Editbin 实用程序用于修改对象文件、 可执行文件的文件和动态链接库 (dll)。Editbin 实用程序的详细信息,请参阅 Microsoft Visual c + + 文档。
若要减小专用于 SQL Server 所使用的每个 Windows NT 线程虚拟地址范围,运行以下命令:
EDITBIN /STACK:reservesqlservr.exe
此选项设置堆栈的大小以字节为单位),保留参数中的每个线程的虚拟内存指定总堆栈分配的位置。Editbin舍入到最接近的 4 个字节指定的值。 请注意可选提交参数时,不需要调整的 SQL Server 的线程的堆栈大小。例如对于要为 SQL Server 的线程的堆栈大小设置成 64k,可使用以下命令在该 Mssql\Binn 目录:
EDITBIN /STACK:65536sqlservr.exe
请务必考虑对 Sqlservr.exe 运行此命令之前采取以下几点:
· 除非您的系统具有 2GB 或更多的物理内存,请不要运行此命令。
· 运行此命令之前,您应该进行Sqlservr.exe 文件的备份副本。
· 您应该全面测试您的应用程序和 SQLServer 与它交互,观察到生产环境中 Sqlservr.exe 在更改之前的任何的性能差异。
请记住,线程的堆栈空间量取决于应用程序中。如果您指定一个太低,为您的应用程序的堆栈大小,SQL Server 将报告堆栈溢出错误。 遗憾的是,没有估计所需的堆栈空间的简便方法。因此,建议不 16k 下面设置的堆栈空间。测试表明该金额应适合大多数应用程序。
若要检查当前线程堆栈大小,使用可以 Dumpbin.exe 实用程序 (包括 Microsoft Visual c + + 中) 看一看"的堆栈保留大小"值。
下面的命令 (在Windows NT 命令提示符下运行) 提供了一个示例:
DUMPBIN /headerssqlservr.exe
此命令显示了可选 HEADER VALUES 标题下的"大小的堆栈保留"为 Sqlservr.exe 6.5 服务Pack1 (英特尔) 的以下:
堆栈保留的100000 大小
值显示以十六进制格式 (100,000= 1,048,576 字节,或 1 MB)。
有关 Dumpbin 的详细信息,请参阅 Microsoft Visual c + + 文档。