1. 系统级资源限制设置
通过修改/etc/security/limits.conf
文件,为SQL Server进程(通常为mssql
用户)设置进程级资源上限,避免单个进程过度占用系统资源。关键配置项包括:
mssql soft nofile 1048576; mssql hard nofile 1048576
(控制同时打开的文件数量);mssql soft nproc 131072; mssql hard nproc 131072
(限制进程能创建的线程/子进程数);mssql soft stack 32768; mssql hard stack 32768
(防止单个线程栈溢出)。systemd
服务配置结合(如LimitNOFILE
、LimitNPROC
),确保生效。2. 内核参数优化
使用tuned
工具调整内核参数,优化系统资源调度。创建自定义配置文件(如/usr/lib/tuned/mssql/tuned.conf
),内容如下:
[vm]
swappiness = 1 # 减少内存交换(swap),优先使用物理内存
dirty_background_ratio = 10 # 控制脏页(未写入磁盘的缓存)刷新阈值
启用该配置(tuned-adm profile mssql
),可提升SQL Server对内存和磁盘的访问效率。
3. SQL Server内存配置调整
通过mssql-conf
工具修改SQL Server内存使用策略,避免内存耗尽。关键命令示例:
/opt/mssql/bin/mssql-conf set memory.memorylimitmb 4096 # 设置SQL Server最大使用内存为4GB(根据服务器总内存调整,预留系统和其他应用空间)
/opt/mssql/bin/mssql-conf set memory.maxservermemory 3584 # 设置SQL Server缓冲池最大内存(建议为总内存的70%-80%)
调整后重启服务(systemctl restart mssql-server
)使配置生效。
4. 查询与索引优化
SELECT *
(只查询所需列),使用JOIN
代替子查询,用EXISTS
替代IN
(减少不必要的数据扫描);CREATE INDEX idx_column ON table_name(column_name)
),但避免过度索引(会增加写操作开销);OPTIMIZE TABLE
整理表碎片,更新统计信息(UPDATE STATISTICS table_name
),帮助优化器生成更高效的执行计划。5. 系统监控与瓶颈分析
使用工具实时监控资源占用,定位瓶颈:
top
/htop
(查看CPU、内存占用)、vmstat 1
(监控内存、I/O、CPU队列)、iostat -x 1
(查看磁盘I/O负载);SQL Server Profiler
(跟踪查询执行情况)、扩展事件(Extended Events
,低开销监控性能事件),分析慢查询和锁等待等问题。6. 资源隔离与负载均衡
--cpus="2"
)、内存(--memory="4g"
)资源,避免影响其他服务;