系统配置与资源限制优化
sudo apt update && sudo apt upgrade确保系统和软件包为最新版本,获取性能优化补丁;使用sudo systemctl disable/disable service_name禁用不必要的启动服务(如打印服务、蓝牙等),减少系统资源占用。/etc/sysctl.conf文件优化网络与内存性能,例如启用高性能TCP拥塞控制算法(如net.ipv4.tcp_congestion_control=bbr)、调整vm.swappiness=10(减少系统对交换分区的依赖,优先使用物理内存);通过/etc/security/limits.d/mssql-server.conf增加SQL Server进程的资源限制(如mssql soft nofile 1048576、mssql hard nproc 131072),避免因文件描述符或进程数不足导致性能瓶颈。内存与CPU优化
sudo /opt/mssql/bin/mssql-conf setup或mssql-conf命令设置max server memory参数,限制SQL Server使用的最大内存(建议为服务器总内存的70%-80%,保留足够内存给系统和其他服务),避免内存耗尽导致系统崩溃。PROCESS AFFINITY命令将SQL Server进程与特定CPU节点/核心关联(如ALTER SERVER CONFIGURATION SET PROCESS AFFINITY CPU=0 TO 3;),减少CPU缓存失效和上下文切换,提升多核CPU的利用率;监控Processor/%Privileged Time(内核态时间)和Processor/%User Time(用户态时间),若数值持续过高,需增加CPU资源或优化查询。磁盘I/O优化
tuned工具创建自定义配置文件(如/usr/lib/tuned/mssql/tuned.conf),调整vm.dirty_background_ratio(脏页比例)和vm.dirty_ratio(脏页上限)等参数,优化磁盘写入性能。/var/opt/mssql/data用于数据,/var/opt/mssql/log用于日志),减少磁盘争用;对于高负载系统,可为TempDB(临时数据库)分配多个数据文件(数量等于CPU核心数),避免TempDB成为性能瓶颈。数据库设计与查询优化
SELECT *,只查询需要的列,减少数据传输量;用JOIN代替子查询(子查询会在内存中创建临时表,增加资源消耗);优化分页查询(如使用ROW_NUMBER()或基于游标的分页,替代LIMIT offset, size,避免大数据量时的性能下降);避免在WHERE子句中对字段进行函数操作(如WHERE YEAR(create_time) = 2025),这会导致索引失效。SQL Server特定配置优化
max worker threads参数(根据CPU核心数调整,默认值为0,表示自动配置,一般无需修改),优化线程管理;启用行版本控制(ALTER DATABASE database_name SET READ_COMMITTED_SNAPSHOT ON;),减少锁争用,提高并发性能;使用Database Engine Optimization Advisor(数据库引擎优化顾问)分析慢查询,获取索引、统计信息等方面的优化建议。UPDATE STATISTICS database_name;),帮助查询优化器生成更优的执行计划;重建或重组索引(ALTER INDEX ALL ON table_name REBUILD;或ALTER INDEX ALL ON table_name REORGANIZE;),减少索引碎片,提升查询速度;清理过期日志(如使用logrotate工具定期轮询SQL Server日志),释放磁盘空间。监控与持续优化
top、htop(实时查看CPU、内存使用情况)、sysdig(深入分析系统调用与资源使用)等工具监控系统资源;利用SQL Server自带的SQL Server Profiler(捕获SQL语句执行情况)、Dynamic Management Views (DMVs)(如sys.dm_exec_query_stats查看查询性能统计)持续监控数据库性能,及时发现并解决性能瓶颈。