基于那个msdn页面: 服务器内存设置保持SQL-Servers min和max memory的默认值以保持动态是一个很好的做法......
根据我通过教程学到的知识,您应该始终定义一个最大值,大约是最小值,我没听过太多。我正在使用简单的旧 perfmon 监视我的页面文件,我意识到很少发生磁盘交换,一旦它几乎导致服务器崩溃。
这可能与 SQL Server 中的默认最大内存设置有关吗?数据库大约 150 GB,内存为 48 GB,该机器上没有运行其他应用程序。
另外,为什么你应该有一个最小值?我知道太低的值会阻止 SQL-Server 启动,并且我知道 SQL-Server 将内容保存在内存中,因此不会尝试释放它的缓存。
我正在使用 SQL-Server 2012,提前谢谢你!
一些细节来澄清事情
不,它不是写的,
good practice
它说的是它recommended
,我确信在线 MS 书籍不能写得那么好,这是因为环境各不相同,对一种环境有益的东西可能不适合其他环境。尽管管理有效,但对大量消耗的东西进行限制是最好的。我认为在系统上定义最大服务器内存是一个很好的做法,因为它将限制缓冲池并告诉 SQL Server 缓冲池可以增长多少最大值,尽管 SQL Server 可以在缓冲池/最大服务器内存设置之外消耗内存,如果它大量使用第三方 DLL 的扩展存储过程和链接服务器。Windows 使用页面文件来保存在物理内存中交换进出的临时数据,以提供更大的虚拟内存集。页面文件很大程度上取决于操作系统提交的内存量,并根据设置的最小值和最大值进行相应的更改。如果要监视页面文件,则必须依赖 perfmon 计数器。请阅读此MSDN 博客
Memory: Committed Bytes -- 已提交的虚拟内存的字节数。这不一定代表页面文件的使用 - 它代表如果进程完全非驻留将使用的页面文件空间量
内存:提交限制——无需扩展页面文件即可提交的虚拟内存字节数。
分页文件:% Usage -- 提交的分页文件的百分比
分页文件:% Usage Peak -- 提交的分页文件的最高百分比
Min Server memory 是 SQL Server 内存管理器可用于 SQL Server 实例的最小内存量。当窗口面临内存压力时,这将进入活动画面,在这种情况下,它将引发低内存通知标志。SQLOS 将响应它,它会要求 SQL Server 削减其内存消耗并释放其缓存,然后 SQL Server 不会抢先削减直到其最小服务器内存值。如果压力太大,SQL Server 可能无法快速做出反应,然后 SQL Server 进程将被调出。请记住 min server memory 并不是说当 SQL Server 启动时,如果不需要,它会最少占用这么多内存,SQL Server 启动时消耗的内存将比 min server memory 少得多。
Min server memory 的其他用途是如果您不希望 SQL Server 由于某些行为不端的操作系统/第三方驱动程序而被分页到磁盘。您将 max server 和 min server memory 设置为几乎相同的值,并为 SQL Server 服务帐户 Locked pages in memory 特权,在这种情况下,即使操作系统面临内存紧缩,SQL Server 也会最大程度降低到 min server 并且如果操作系统内存紧缩仍然存在操作系统进程将被调出并且会变得非常缓慢。但这是一件坏事,我不推荐
当您的服务器具有多个实例时,MIN 值很有用。您可以使用它来确定每个实例的内存使用优先级。但主要是为了保证 SQL 至少有那么多内存可以使用。这可以阻止人们在服务器上运行某些东西并窃取所有内存。
默认设置基本上将内存分配留给 SQL Server,但最佳做法是设置一个静态值,这样就不会出现 SQL 从其他进程或操作系统占用内存的问题。如果您在同一服务器上运行 SSIS、SSAS、SSRS 或任何其他服务器/应用程序,这是必须的。v因此,您的设置需要为服务器上运行的操作系统 + 服务 + 应用程序留出足够的内存。