硬件基础优化
mssql-conf工具调整max server memory参数,避免内存溢出导致频繁磁盘交换)。lscpu命令确认CPU核心数,调整max degree of parallelism(最大并行度)参数以匹配CPU核心数。操作系统内核与文件系统调优
/etc/sysctl.conf文件优化网络与内存设置,例如:net.core.somaxconn = 65535(增加TCP连接队列长度,避免连接拒绝)、vm.swappiness = 1(降低内存交换概率,保留更多内存给SQL Server)、vm.dirty_background_ratio = 10(控制脏页刷新阈值,减少I/O波动);执行sysctl -p使配置生效。noatime选项(避免频繁更新文件访问时间,减少磁盘写入);通过tuned工具应用throughput-performance策略,进一步优化系统性能。SQL Server配置参数优化
mssql-conf工具设置max server memory(限制SQL Server最大内存使用,防止占用过多系统内存)与min server memory(保证SQL Server最低内存,避免频繁申请/释放内存);建议将max server memory设置为物理内存的70%-80%,预留内存给操作系统与其他进程。max degree of parallelism(控制并行查询的最大线程数,建议设置为CPU核心数的70%-80%)与cost threshold for parallelism(设置并行查询的成本阈值,默认5,可根据负载调整至25-50,避免低价值查询占用并行资源)。ALTER DATABASE [数据库名] SET RECOVERY SIMPLE),减少事务日志的增长与维护开销;若需要高可用性,则使用完整恢复模式并定期备份事务日志。数据库对象与查询优化
WHERE A=1 AND B=2的复合索引顺序应为(A,B));使用覆盖索引(包含查询所需的所有列,避免回表操作);定期执行ALTER INDEX ... REBUILD(重建碎片化严重的索引,建议碎片率超过30%时重建)或ALTER INDEX ... REORGANIZE(重组碎片率10%-30%的索引,减少停机时间);避免过度索引(每个额外索引会增加写操作的开销)。SELECT *(仅选择需要的列,减少数据传输量);用UNION ALL替代OR连接(OR可能导致全表扫描,UNION ALL可合并多个查询结果);使用参数化查询(避免SQL注入,同时让查询优化器重用执行计划);优化JOIN操作(确保JOIN列有索引,避免笛卡尔积)。UPDATE STATISTICS [表名](更新表的统计信息,帮助查询优化器生成更优的执行计划);对于频繁更新的表,可设置自动更新统计信息(默认开启,可通过sp_autostats查看)。日常维护与监控
BACKUP LOG [数据库名] TO DISK='路径'),每周备份完整数据库(BACKUP DATABASE [数据库名] TO DISK='路径');每月执行DBCC CHECKDB(检查数据库完整性,修复错误);每季度重建或重组索引(根据碎片率决定)。sys.dm_exec_query_stats(查看查询执行次数与耗时)、sys.dm_io_virtual_file_stats(查看磁盘I/O情况)、sys.dm_os_wait_stats(查看等待类型,识别资源瓶颈);使用SQL Server Profiler或扩展事件(轻量级监控工具,记录慢查询与事件)。