一、系统级基础优化
sudo apt update && sudo apt upgrade更新所有软件包至最新版本,获取性能补丁与安全修复;禁用不必要的启动服务(如sudo systemctl disable <service_name>),仅保留网络、数据库等关键服务,减少系统资源占用。二、SQL Server配置调优
mssql-conf工具预配置内存限制(如sudo /opt/mssql/bin/mssql-conf set memory.memorylimitmb 4096设置4GB内存),确保数据库有足够缓存空间提升查询速度。max degree of parallelism (maxdop)——OLTP系统(高并发小事务)建议设置为CPU核心数的1/2或更低(如4核CPU设为2),OLAP系统(复杂分析查询)可设置为CPU核心数或更高,平衡并发性能与资源争用。mssql-conf设置:sudo /opt/mssql/bin/mssql-conf set sqlagent.traceflags "1118,3982",重启SQL Server生效。三、内核与系统内核参数优化
/usr/lib/tuned/mssql/tuned.conf文件,添加以下关键设置:[main]
summary=Optimize for Microsoft SQL Server
include=throughput-performance
[cpu]
force_latency=5
[sysctl]
vm.swappiness = 1 # 减少交换分区使用,避免频繁换页
vm.dirty_background_ratio = 3 # 脏页刷新阈值(后台)
vm.dirty_ratio = 80 # 脏页刷新阈值(强制)
vm.dirty_expire_centisecs = 500 # 脏页存活时间(5秒)
vm.dirty_writeback_centisecs = 100 # 刷新间隔(1秒)
vm.transparent_hugepages = always # 启用大页,提升内存访问效率
vm.max_map_count = 1600000 # 增加内存映射区域数量,支持大型数据库
net.core.rmem_default = 262144 # 接收缓冲区默认大小
net.core.wmem_default = 262144 # 发送缓冲区默认大小
应用配置:sudo tuned-adm profile mssql。四、索引与查询优化
SET SHOWPLAN_ALL ON;分析查询执行计划,为WHERE子句、JOIN条件、ORDER BY中的高频列创建索引;避免过度索引(每个额外索引会增加INSERT/UPDATE/DELETE的开销),定期使用UPDATE STATISTICS更新统计信息,确保查询优化器生成高效执行计划。SELECT *(仅选择所需列),减少数据传输量;用UNION ALL替代OR条件(提升OR查询性能);用EXISTS替代子查询中的IN(减少嵌套查询开销);模糊匹配时优先使用前缀匹配(如LIKE 'abc%',可以利用索引)。五、磁盘I/O与文件布局优化
/data、/logs、/tempdb),减少I/O争用;日志文件需放在低延迟存储(如SSD)上,确保事务提交性能。六、性能监控与维护
top、htop监控CPU使用率,vmstat 1监控磁盘I/O,free -m监控内存使用;使用SQL Server自带的性能监视器(sys.dm_os_performance_counters)、Profiler抓取慢查询,Database Engine Optimization Advisor分析查询计划并提供优化建议。ALTER INDEX ALL ON <table_name> REBUILD)或重组(ALTER INDEX ALL ON <table_name> REORGANIZE,针对碎片率低的索引),每月更新统计信息(UPDATE STATISTICS <table_name>),清理过期数据,保持数据库高效运行。