用户 'mrdenny' 写道,在您设置 SQL Server 最大内存后...
现在,这不会将 SQL Server 的所有方面都限制为该内存量。这仅控制缓冲池和执行计划缓存。CLR、全文、SQL Server exe 文件使用的实际内存、SQL 代理、扩展存储过程等不受此设置控制。
我的问题是我的服务器正在超过 12 GB 的内存,如果 CLR、全文和服务器 exe 文件占用了额外的内存。
如何配置 SQL Server,使其不超过设置的最大限制?
有人告诉我有一种方法可以做到,但是在 Google 上搜索后我找不到解决方案。
我的问题是我的服务器正在超过设置的 12GB 内存,如果像 CLR/全文/服务器 exe 文件这样的东西占用了额外的内存。
Denny Cherry 所写的内容适用于2005 to 2008 r2
. 从 SQL Server 2012 开始,SQL Server 内存分配发生了相当大的变化。SQLCLR 的内存是从 SQL Server 2012 中的最大服务器内存设置分配的,而不是在它之外。BOL 表示从 SQL Server 2012 开始
最大服务器内存控制 SQL Server 内存分配,包括缓冲池、编译内存、所有缓存、qe 内存授予、锁管理器内存和 CLR 内存(基本上是 dm_os_memory_clerks 中的任何“clerk”)。线程堆栈、内存堆、除 SQL Server 之外的链接服务器提供程序的内存或由“非 SQL Server”DLL 分配的任何内存不受最大服务器内存控制。
在 SQL 2012 之前,缓冲池既是“托管”内存,也是数据库页面内存的消费者。它的内存管理意味着它为计划缓存等其他消费者分配了 8Kb 的内存页面。前滚到 2012+,缓冲池是来自 SQLOS 的纯粹内存消费者,它管理所有内存。
请告诉我如何配置 SQL Server,使其不会超过设置的最大限制。
这是不可能的。在 SQL Server 2012 中,如果您没有使用第三方链接服务器提供程序,或者如果任何非 Microsoft 提供的 DLL 未加载到 SQL Server 地址空间中,则 SQL Server 消耗超出最大服务器内存设置的内存的可能性较小。但事实是您无法控制SQL Server 不使用缓冲池外的内存。这就是它的设计方式。
没有确切的方法可以做到这一点。您应用于 max server memory 的设置仅管理SQL Server 的一些内存,它仍将使用其他分配,具体取决于您在做什么。为了限制这种情况,您可以最大限度地减少使用外部内存的东西(CLR、全文等),但您无法消除所有这些。您可以使用最大服务器内存来找到合适的平衡点,但同样,无法准确预测结果如何,并且可能需要多次迭代才能正确。假设从 9 GB 开始(尽管您可能可以通过从 ( 12 - (current memory usage - 12)
)开始获得更具体的信息- 因此,如果当前内存使用量为 16 GB,请尝试从 8 GB 开始。
归档时间: |
|
查看次数: |
2526 次 |
最近记录: |