在 Ubuntu 上运行 SQL Server(SQL Server on Linux) 时,优化思路和 Windows 版基本一致,但有一些 Linux 特有的注意点。下面从 系统层 → SQL Server 配置 → 数据库/查询层 三个维度说明。
SQL Server 对内存敏感,Linux 下容易因 OOM 被杀。
/etc/sqlserver/mssql.conf:[memory]
memorylimitmb = 6144 # 限制 SQL Server 使用内存(如 6GB)
sudo sysctl -w vm.swappiness=1
/var/opt/mssql/data → 高性能 SSD挂载示例:
sudo mkfs.xfs /dev/sdb
sudo mount /dev/sdb /var/opt/mssql/data
sudo sysctl -w kernel.shmmax=2147483648
sudo sysctl -w kernel.shmmni=4096
sudo systemctl disable snapd
sudo systemctl disable bluetooth
SELECT * FROM sys.configurations;
-- 最大并行度(OLTP 建议 = CPU 核数或 4)
sp_configure 'max degree of parallelism', 4;
RECONFIGURE;
-- 最小/最大服务器内存
sp_configure 'min server memory', 2048;
sp_configure 'max server memory', 6144;
RECONFIGURE;
ALTER DATABASE tempdb
ADD FILE (NAME = tempdev2, FILENAME = '/var/opt/mssql/data/tempdb2.ndf', SIZE = 512MB);
SELECT * FROM sys.dm_db_missing_index_details;
常见操作:
SELECT * FROM sys.dm_db_index_usage_stats;
SELECT *SET SHOWPLAN_XML ON;
UPDATE STATISTICS tablename;
htop
iostat -x 1
SELECT * FROM sys.dm_exec_requests;
SELECT * FROM sys.dm_os_wait_stats;
/var/opt/mssql/log/errorlog
| 问题 | 可能原因 | 解决方法 |
|---|---|---|
| CPU 高 | 缺索引 | 建索引 |
| 内存不足 | 未限制内存 | 设置 memorylimitmb |
| 磁盘 IO 高 | 日志数据混放 | 分离磁盘 |
| 查询慢 | 执行计划差 | 重写 SQL |
如果你愿意,可以告诉我:
我可以给你 更具体的优化方案或 SQL 示例。