1. 为什么需要设置最佳内存?
在使用Microsoft SQL Server(以下简称MSSQL)时,合理地设置内存大小将会对数据库的性能有很大的影响。MSSQL Server 数据库使用内存的方式是先将数据页读入内存缓存中,然后在缓存中执行增删改查等操作,所以内存的大小直接影响了数据库的响应速度和性能表现。如果内存设置不当,可能会导致MSSQL Server性能下降,随之而来的会是硬盘、CPU和网络等资源的浪费,这样不仅让我们的服务器性能变低,而且还会浪费硬件资源。
1.1 内存设置不当可能会遇到的问题
对于那些没有设置 MSQL 内存或设置不当的管理员来说,MSSQL 服务器可能会出现以下问题:
SQL Server 访问性能下降,即使搭建了高配置的服务器,数据库也表现出了低负载情况,影响了响应速度。
操作系统和 SQL Server 内存各自独立管理,造成了硬件资源的浪费。
系统和应用程序的其它部分性能设定不均导致MSSQL 响应不及时。
2. 如何设置最佳内存大小?
下面就是MSSQL优化中最重要的一步:如何为MSSQL设定其他内存:分配内存主要取决于环境和配置的设置,因此,你需要先了解你的系统配置和要求,同时,如果你的服务器上同时运行多个MSSQL实例,则现在应关注避免实例之间的竞争。
2.1 确定适当的内存大小
对于大多数普通工作负载来说,MSSQL Server 可以占用服务器的大约 75% 的内存,但不要在存在内存压力或系统受限的情况下将其设置为此值。您的环境和负载将决定您应该为 MSSQL Server 分配多少内存。如果服务器上运行的是多个实例,而且每个实例都会使用内存,则必须考虑详细的初始内存配置以避免实例的竞争。
2.2 禁止其他进程和服务访问SQL Server内存
为了避免 SQL Server 的缓存被淹没、误用或错误竞争,可以禁止其他进程和服务的访问SQL Server 内存,以确保 SQL Server 能够尽可能地缓存和利用可用的内存。可以使用以下方法之一来防止冲突:
在 SQL Server 计算机上运行 SQL Server 的所有实例时,可以使用精细的内存配置(即“最大服务器内存”选项,我们马上有描述),方法是在所有 SQL Server 实例上都设置一个最大内存值,使它们共享内存,并在每个实例上设置“最低舍入内存值”以确保每个实例都有一个最小工作集。
可以使用硬件 NUMA 在单个计算机上运行多个实例,以使每个实例都分配硬件内存,并且可以在操作系统中配置以授予这些实例独有的硬件资源。所以 NUMA + 内存隔离可以实现多实例间内存不互相抢占的竞争,从根本解决 Bug 引入,实现真正稳定。
3. 如何在SQL Server中配置内存
通常有两种方法可以在SQL Server中配置内存:
使用 SSMS 进行设置(图形化工具)。
使用 T-SQL 语句进行设置。
3.1 使用 SSMS 进行内存配置
我们可以使用 SQL Server Management Studio(SSMS)进行内存配置。具体步骤如下:
打开 SSMS 工具,连接 SQL Server 实例。
右键单击【服务器】,然后单击 【属性】按钮。“【服务器属性】”对话框打开。
在对话框的左侧选择 “【内存】”。您可以在右侧的下拉列表中查看或设置最大内存值。然后,您可以单击“确定”按钮以保存修改。
以下是使用 SSMS 进行的内存配置的示例代码:
-- 通过“最大服务器内存”选项
执行以下 T-SQL 语句允许在 SQL Server 数据库引擎上配置最大服务器内存 (MB):
exec sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
exec sp_configure 'max server memory (MB)', 14000;
GO
RECONFIGURE WITH OVERRIDE;
GO
-- 通过 max server memory 高端范围
exec sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
exec sp_configure 'max server memory', '14000 MB';
GO
RECONFIGURE WITH OVERRIDE;
GO
-- 通过缩小 buffer pool 的工作区大小
exec sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
EXEC sp_configure 'min server memory (MB)', 64;
RECONFIGURE;
GO
EXEC sp_configure 'max server memory (MB)', 14000;
GO
RECONFIGURE WITH OVERRIDE;
3.2 使用 T-SQL 配置内存
我们也可以使用 T-SQL 语句进行内存的配置。具体实现方法可以渠道NS的博客学习,附带有详细实例操作可以参照。
4. 内存配置的注意事项
避免将最大内存设置得过高。如果遇到低内存或内存压力的情况时,SQL Server会尝试通过换出缓存页并将数据写回磁盘来释放内存。这可能会导致性能下降,因此,我们必须设置最佳的内存大小,以保证SQL Server不会因资源竞争而出现错误。
避免将最小内存设置得过低。 SQL Server最小工作集的大小决定了缓存大小的起始点,当服务器上的 SQL Server 实例启动时,它将设置其最小工作集,然后动态将其扩展到最大服务器内存设置中指定的大小。设置最小工作集时必须要进行谨慎处理,因为设置太小可能会导致 SQL Server 在重建缓存时花费大量时间,从而影响 SQL Server 性能。
结论:
在使用 SQL Server 时正确的内存配置和分配是非常重要的,并可以优化数据库的性能,避免资源竞争导致的稳定性问题。使用上述几种方法都可以确保我们 SQL Server 的最佳性能,但必须仔细评估我们的场景以及如何配置内存。
通过优化内存配置,我们可以显著提高 SQL Server 的性能,使其能够更高效地访问数据,并提供更快的响应时间。因此,合理地设置 SQL Server 运行内存将有助于提高数据库的响应能力,缩短应用程序等待时间,为您的业务带来更好的用户体验。