优化Linux上SQL Server性能的关键策略
scsi_mod.use_blk_mq=y和dm_mod.use_blk_mq=y内核启动选项,减少设备映射器层的锁定开销;调整网络参数,如增大net.core.rmem_max(接收缓冲区最大值)和net.core.wmem_max(发送缓冲区最大值)(默认值分别为4MB和1MB),提升网络吞吐量。ethtool -L eth0 combined X(X为合并后的队列数,如8)设置网卡队列合并,减少中断次数;使用set_irq_affinity_bynode.sh工具将网卡IRQ绑定到对应NUMA节点,降低跨节点访问延迟。ALTER SYSTEM VIEW SERVER CONFIGURATION SET MEMORY_LIMIT_MB=X(X为SQL Server可使用内存上限,如80%物理内存)调整内存限制,避免占用过多系统内存;设置PROCESS AFFINITY(如ALTER SERVER CONFIGURATION SET PROCESS AFFINITY CPU=0 TO 7),将SQL Server进程绑定到特定CPU核心,减少上下文切换开销。dm_mod.use_blk_mq=y),提升存储IO的并发性能和可靠性。/data,日志文件放在/logs,tempdb放在/tempdb)。performance CPU频率调控器(通过cpupower frequency-set -g performance命令);确保内存充足(建议至少8GB,大型数据库建议32GB以上),避免内存瓶颈。UPDATE STATISTICS更新统计信息,帮助查询优化器生成更优的执行计划;避免过度索引(每个额外索引会增加写操作的开销)。SELECT *,只查询需要的列;使用EXPLAIN分析查询执行计划,识别慢查询(如全表扫描、排序操作);优化JOIN操作(如小表驱动大表),减少不必要的计算。MEMORY_OPTIMIZED=ON)和本机编译存储过程(WITH NATIVE_COMPILATION),将数据和查询计划存储在内存中,大幅提升访问速度(适用于高频访问的表,如购物车、会话数据);使用列存储索引(CREATE NONCLUSTERED COLUMNSTORE INDEX)优化OLAP场景的批量查询性能(如数据汇总、分析)。sys.dm_os_wait_stats(查看等待类型,如WRITELOG表示日志写入延迟)、sys.dm_io_virtual_file_stats(查看文件IO统计信息);启用查询存储(ALTER DATABASE AdventureWorks SET QUERY_STORE = ON),收集查询执行历史,识别性能退化的问题查询。ALTER INDEX ... REBUILD或ALTER INDEX ... REORGANIZE),减少IO次数;更新统计信息(UPDATE STATISTICS table_name),确保查询优化器的决策准确;备份和压缩数据库(使用BACKUP DATABASE ... WITH COMPRESSION),减少存储空间占用并提升备份速度。