温馨提示×

centos里sqlserver内存管理

小樊
45
2025-11-16 05:15:52
栏目: 云计算

CentOS 上 SQL Server 内存管理实践

一 核心概念与总体原则

  • SQL Server 在 Linux/CentOS 上由内存管理器按需动态分配内存,建议通过 min server memorymax server memory 设定合理上下限,避免与其他进程争用。将两者设为相同值会固定内存,通常不利于性能。Linux 上的内存管理以缓冲池为主,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 设置后生效,属于已知现象。

三 监控内存使用

  • 系统层面(Linux 命令):
    • 查看总体内存与缓存:free -h
    • 动态观察进程与内存:top
    • 详细内存信息:cat /proc/meminfo
  • SQL Server 层面(DMV):
    • 系统内存概况:
      SELECT 
        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;
      
    建议将系统命令与 DMV 结合,观察长期趋势与峰值,避免仅凭瞬时值判断。

四 关键注意事项与常见误区

  • 不要将 minmax 设为相同值,避免失去动态伸缩带来的性能优势。
  • 为操作系统、监控代理、备份软件等预留内存;同机有其他大内存应用时,务必下调 max server memory,避免系统整体内存紧张。
  • 不建议使用修改二进制或所谓“破解 2GB 内存限制”等非官方手段,存在稳定性与合规风险,且在新版本上往往已不适用。
  • 不建议依赖 Linux 的 cgroups MemoryMax 等机制限制 SQL Server 内存,这可能干扰缓冲池与查询执行,导致不稳定或性能劣化;优先使用 SQL Server 自身的 max server memory 进行上限控制。

0