CentOS 上 SQL Server 内存管理实践
一 核心概念与总体原则
二 设置 SQL Server 内存上限与下限
通过 T‑SQL(推荐,立即生效,无需重启实例):
-- 启用高级选项
EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;
-- 设置最大内存为 8GB(示例)
EXEC sp_configure 'max server memory (MB)', 8192;
-- 设置最小内存为 1GB(示例)
EXEC sp_configure 'min server memory (MB)', 1024;
RECONFIGURE;
提示:max server memory 仅限制缓冲池等内存组件,SQL Server 仍会为其他组件保留一定未计入该上限的内存,因此需为 OS 与其他进程预留余量。
通过 mssql‑conf(部分版本/环境可能不生效,建议优先使用 T‑SQL):
# 设置最大内存为 3500MB(示例)
sudo /opt/mssql/bin/mssql-conf set memory.memorylimitmb 3500
# 重启实例
sudo systemctl restart mssql-server
注意:有案例显示仅修改 mssql‑conf 后,SSMS 中 max server memory 未变化,改用 T‑SQL 设置后生效,属于已知现象。
三 监控内存使用
free -htopcat /proc/meminfoSELECT
total_physical_memory_kb/1024 AS Total_Memory_MB,
available_physical_memory_kb/1024 AS Available_Memory_MB,
total_virtual_memory_kb/1024 AS Total_Virtual_Memory_MB,
available_virtual_memory_kb/1024 AS Available_Virtual_Memory_MB,
process_physical_memory_low AS Physical_Memory_Low,
process_virtual_memory_low AS Virtual_Memory_Low
FROM sys.dm_os_sys_memory;
SELECT
d.name AS Database_Name,
SUM(a.total_pages) * 8 / 1024 AS Memory_Usage_MB
FROM sys.dm_os_memory_clerks a
JOIN sys.databases d ON a.database_id = d.database_id
GROUP BY d.name
ORDER BY Memory_Usage_MB DESC;
四 关键注意事项与常见误区