在Ubuntu上进行SQL Server性能调优的完整指南
mssql-server、mssql-tools、unixodbc-dev),确保系统为最新版本以获取安全补丁和性能改进。配置mssql-conf工具设置SA密码、选择版本(如Enterprise/Standard),并通过systemctl status mssql-server验证服务状态。开启TCP端口1433(sudo ufw allow 1433)以允许远程连接。/etc/security/limits.d/mssql-server.conf文件,增加文件描述符和进程数限制(如mssql soft nofile 1048576、mssql hard nofile 1048576、mssql soft nproc 131072、mssql hard nproc 131072),防止因资源不足导致查询中断。tuned工具创建自定义配置文件(如/usr/lib/tuned/mssql/tuned.conf),调整内存管理(如vm.swappiness=10减少交换分区依赖)、I/O调度(如vm.dirty_background_ratio=5优化脏页写入),选择“throughput-performance”或“latency-performance” profile优化系统性能。mssql-conf命令设置内存目标(如sudo /opt/mssql/bin/mssql-conf set memory.target 4G),根据服务器内存大小合理分配(建议为物理内存的70%-80%,保留足够内存给系统和其他应用)。对于大型数据库,可调整max server memory参数避免内存耗尽。ALTER DATABASE dbname SET RECOVERY SIMPLE WITH NO_WAIT;切换至简单恢复模式,减少事务日志文件的占用空间,提升写入性能。SELECT *,只查询所需列(如SELECT column1, column2 FROM table),减少数据传输量;JOIN代替子查询(如SELECT t1.col1, t2.col2 FROM table1 t1 JOIN table2 t2 ON t1.id = t2.id),避免临时表创建;WHERE子句,避免使用!=、<>、OR连接条件(如用BETWEEN代替IN),防止全表扫描;LIKE 'abc%'),避免通配符%开头(无法利用索引)。WHERE、JOIN、ORDER BY的列创建索引(如CREATE INDEX idx_column ON table(column));CREATE INDEX idx_covered ON Employees(DepartmentID) INCLUDE (FirstName, LastName)),包含查询所需的所有列,避免回表操作;UPDATE STATISTICS dbname.table更新统计信息,使用ALTER INDEX ALL ON table REBUILD或REORGANIZE重建/重组碎片化索引(碎片率>30%时重建,10%-30%时重组);top/htop实时查看SQL Server进程的CPU、内存占用;vmstat 1监控系统级资源(CPU、内存、I/O);iostat -x 1查看磁盘I/O负载(关注await、%util指标);netstat -an | grep mssql检查网络连接状态。BACKUP DATABASE dbname TO DISK = '/path/backup.bak');sys.dm_db_index_physical_stats视图);DBCC SHRINKFILE (dbname_log, 1),谨慎使用,避免频繁收缩)、清理无用数据(如旧日志表)。ALTER DATABASE dbname SET ALLOW_SNAPSHOT_ISOLATION ON;、ALTER DATABASE dbname SET READ_COMMITTED_SNAPSHOT ON;),减少锁争用,提高并发性能。