在 SQL Server 中保留默认的最大内存 2147483647 MB​​ 值,这是一种不好的做法吗?

Ray*_*and 6 performance sql-server memory sql-server-2012

基于该 msdn 页面: 服务器内存设置,最好保留 SQL-Servers min 和 max memory 的默认值以使其保持动态...

根据我通过教程学到的知识,您应该始终定义一个最大值,关于最小值,我没有听说过太多。我正在使用简单的旧 perfmon 监视我的页面文件,我意识到很少发生磁盘交换,一旦它几乎导致服务器崩溃。

这可能与 SQL Server 中的默认最大内存设置有关吗?数据库大约为 150 GB,内存为 48 GB,该机器上没有其他应用程序在运行。

另外,为什么你应该有一个最小值?我知道太低的值会阻止 SQL-Server 启动,我知道 SQL-Server 将内容保存在内存中,因此不会尝试释放它的缓存。

我正在使用 SQL-Server 2012,在此先感谢您!

Sha*_*nky 5

一些细节来解决问题

基于该 msdn 页面:服务器内存设置,保持 SQL-Servers min 和 max memory 的默认值以保持动态是一个好习惯

不,它没有写它是good practice它说它是recommended,我确信在线 MS 书籍不能把它写得那么好,这是因为环境各不相同,对一个环境有益的东西可能不适合其他环境。它的大部分好事,有东西被严重消耗,虽然有效的管理限制。我认为在系统上定义最大服务器内存是一个很好的做法,因为它会限制缓冲池并告诉 SQL Server 缓冲池可以增长多少最大尽管 SQL Server 可以在缓冲池/最大服务器内存设置之外消耗内存,如果它大量使用第三方 DLL 的扩展存储过程和链接服务器。

Windows 使用页面文件来保存临时数据,这些数据在物理内存中换入和换出,以提供更大的虚拟内存集。页面文件很大程度上取决于操作系统提交的内存量,并根据设置的最小值和最大值进行相应更改。如果你想监控页面文件,你必须依赖 perfmon 计数器。请阅读此MSDN 博客

Memory: Committed Bytes -- 已提交的虚拟内存的字节数。这不一定代表页面文件使用情况 - 它代表如果进程完全非驻留时将使用的页面文件空间量

内存:提交限制——无需扩展分页文件即可提交的虚拟内存字节数。

分页文件:% Usage -- 提交的分页文件的百分比

分页文件:% Usage Peak -- 提交的分页文件的最高百分比

另外,为什么你应该有一个最小值?我知道太低的值会阻止 SQL-Server 启动,我知道 SQL-Server 将内容保存在内存中,因此不会尝试释放它的缓存。

Min Server memory 是 SQL Server 内存管理器可用于 SQL Server 实例的最小内存量。当 Windows 面临内存压力时,这将进入活动画面,在这种情况下,它会引发低内存通知标志。SQLOS 将响应它,它会要求 SQL Server 削减其内存消耗并释放其缓存,然后 SQL Server 将非抢先削减直到其最小服务器内存值。如果压力太大,SQL Server 可能无法快速反应,然后 SQL Server 进程将被调出。请记住,最小服务器内存并没有说当 SQL Server 启动时,如果不需要,它至少会占用这么多内存,SQL Server 启动时消耗的内存比最小服务器内存少得多。

Min server memory 的其他用途是如果您不希望 SQL Server 由于某些行为不当的 OS/第三方驱动程序而被调出到磁盘。您将 max server 和 min server memory 设置为几乎相同的值,并赋予 SQL Server 服务帐户内存特权中的锁定页面,在这种情况下,即使操作系统面临内存紧缩,SQL Server 也将最大缩减至 min server,并且如果操作系统内存紧缩仍然存在操作系统进程将被调出并变得极其缓慢。但这是一件坏事,我不推荐