SP2019本地部署数据库‘internal资源池内存不足’问题求助
解决SQL Server 'internal'资源池内存不足问题的步骤
1. 检查并调整Internal资源池的内存限制
SQL Server的internal资源池负责系统级操作,默认无硬内存限制,但配置异常会触发内存不足错误:
- 执行查询查看当前配置:
SELECT name, min_memory_percent, max_memory_percent, min_cpu_percent, max_cpu_percent FROM sys.resource_governor_resource_pools WHERE name = 'internal'; - 若
max_memory_percent设置过低,或min_memory_percent过高抢占其他池资源,执行以下语句调整(建议max_memory_percent设为90-95,确保internal池有足够内存预留):ALTER RESOURCE POOL internal WITH (max_memory_percent = 95); GO ALTER RESOURCE GOVERNOR RECONFIGURE; GO
2. 验证SQL Server实例内存配置合理性
虽已分配120GB给SQL Server,仍需确认配置是否存在冲突:
- 检查
max server memory和min server memory设置:
注意:120GB对应122880MB,确保SELECT name, value, value_in_use, description FROM sys.configurations WHERE name IN ('max server memory (MB)', 'min server memory (MB)');max server memory数值准确;min server memory建议设为总内存的10-20%(如12GB即12288MB),避免系统内存不足导致SQL无法动态调整。 - 系统预留内存需充足:128GB总内存给SQL分配120GB后剩余8GB,若服务器还运行监控、备份等工具,建议将SQL的
max server memory下调至112-116GB,给系统预留10-16GB内存。
3. 排查SharePoint默认服务的数据库负载
User Profiles等SharePoint默认服务初始化或同步时,可能触发大量查询导致内存压力突增:
- 执行以下查询定位高内存消耗的查询,确认是否来自SharePoint默认服务:
SELECT TOP 20 SUBSTRING(qt.text, (qs.statement_start_offset/2)+1, ((CASE qs.statement_end_offset WHEN -1 THEN DATALENGTH(qt.text) ELSE qs.statement_end_offset END - qs.statement_start_offset)/2)+1) AS query_text, qs.total_worker_time, qs.total_logical_reads, qs.total_logical_writes, qs.total_elapsed_time/1000000 AS total_elapsed_time_sec FROM sys.dm_exec_query_stats qs CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) qt ORDER BY qs.total_logical_reads DESC; - 若确认是User Profiles服务的全量同步导致,可暂时暂停服务,待内存压力缓解后改为增量同步,再重新启动服务。
4. 分析已收集的内存与日志数据
结合已执行的sys.dm_os_process_memory和sp_readerrorlog,重点关注:
sys.dm_os_process_memory中的physical_memory_in_use_kb、locked_page_allocations_kb、page_fault_count指标,确认SQL实际使用内存是否接近max server memory,是否存在大量页面错误。- 错误日志中是否重复出现内存不足警告、低内存通知,以此判断是临时负载过高还是内存泄漏问题。
5. 启用锁定页内存选项(可选)
若服务器为物理机或已在Hypervisor中启用内存锁定,可开启此选项减少页面交换带来的内存压力:
- 通过本地安全策略,给SQL Server服务账户分配
锁定内存页权限(路径:本地策略>用户权限分配>锁定内存页)。 - 启用SQL Server的
locked pages in memory配置:
注:此操作需重启SQL Server服务生效。sp_configure 'show advanced options', 1; GO RECONFIGURE; GO sp_configure 'locked pages in memory', 1; GO RECONFIGURE; GO
内容的提问来源于stack exchange,提问作者Mohammed Abed
相关产品推荐
相关产品推荐

