在 Ubuntu 上运行 SQL Server(通常是 SQL Server on Linux) 出现“慢”的原因很多,一般可以从系统层、数据库层、配置层、应用层四个方向排查。下面给你一个比较系统的清单。
SQL Server 对内存非常敏感。
free -h
top
available 很小,或开始使用 swap:swapon --show
✅ 建议:
nproc
lscpu
SQL Server 极度依赖磁盘。
检查磁盘类型:
lsblk
df -h
测试 IO:
fio --name=test --rw=randread --bs=4k --numjobs=4 --size=1G
✅ 建议:
SQL Server 默认可能吃光内存,导致系统卡死。
查看当前配置:
SELECT * FROM sys.dm_os_process_memory;
限制内存(示例 4GB):
EXEC sp_configure 'max server memory', 4096;
RECONFIGURE;
常见问题:
/var/lib/mssql(系统盘)✅ 建议:
/disk1/mssql/data
/disk2/mssql/log
Linux 上 TempDB 默认可能只有 1 个文件。
查看:
SELECT name FROM sys.master_files WHERE database_id = 2;
建议:
慢查询最常见原因。
查看慢查询:
SELECT TOP 10
total_elapsed_time/1000 AS ms,
execution_count,
text
FROM sys.dm_exec_query_stats
CROSS APPLY sys.dm_exec_sql_text(sql_handle)
ORDER BY total_elapsed_time DESC;
✅ 解决:
SELECT *UPDATE STATISTICS 表名;
或
EXEC sp_updatestats;
SELECT * FROM sys.dm_exec_requests
WHERE blocking_session_id <> 0;
常见原因:
✅ 推荐:
ext4XFS避免:
btrfsoverlaySQL Server 官方不建议开启 THP。
检查:
cat /sys/kernel/mm/transparent_hugepage/enabled
关闭:
echo never | sudo tee /sys/kernel/mm/transparent_hugepage/enabled
sysctl -a | grep vm.swappiness
建议:
vm.swappiness = 1
free -h → 内存iostat -x 1 → 磁盘 IOtop → CPU如果你愿意,可以告诉我:
我可以帮你做更精准的排查。