温馨提示×

ubuntu sqlserver怎样优化

小樊
49
2026-09-18 23:39:10
栏目: 云计算

在 Ubuntu 上运行 SQL Server(SQL Server on Linux) 时,优化通常分为 系统层、SQL Server 配置层、数据库设计层、查询层 四个方面。下面给你一套实用优化清单。


一、系统层优化(Ubuntu)

1. 内存配置(最重要)

SQL Server 对内存非常敏感。

  • 服务器内存建议 ≥ 4GB(官方最低 2GB,生产不建议)
  • 限制 SQL Server 最大内存,避免 OS 被挤死:
sudo /opt/mssql/bin/mssql-conf set memory.memorylimitmb 4096
sudo systemctl restart mssql-server

一般留 20–25% 内存给系统


2. 文件系统与磁盘

  • 使用 XFS 或 EXT4
  • 数据盘与日志盘 分离
    • /var/opt/mssql/data → 数据盘
    • /var/opt/mssql/log → 日志盘

挂载建议:

mount -o noatime,nodiratime /dev/sdb1 /var/opt/mssql/data

3. 内核参数优化

sudo sysctl -w vm.swappiness=1
sudo sysctl -w fs.aio-max-nr=1048576

写入 /etc/sysctl.conf 持久化。


4. 禁用透明大页(THP)

echo never | sudo tee /sys/kernel/mm/transparent_hugepage/enabled

二、SQL Server 配置优化

1. 查看当前配置

SELECT * FROM sys.configurations;

2. 关键参数建议

EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;

EXEC sp_configure 'max degree of parallelism', 4;
EXEC sp_configure 'cost threshold for parallelism', 30;
RECONFIGURE;
  • MAXDOP:CPU 核数 ≤ 8 时设为核数,>8 建议 4–8
  • cost threshold:避免小查询并行

3. TempDB 优化(非常重要)

在 Linux 上 TempDB 默认 1 个文件。

ALTER DATABASE tempdb
ADD FILE (NAME = tempdev2, FILENAME = '/var/opt/mssql/data/tempdb2.ndf', SIZE = 512MB);

一般:

  • TempDB 文件数 = CPU 核数(最多 8)

三、数据库设计优化

1. 索引优化

  • 聚簇索引必须有
  • 避免过多索引(影响写入)
  • 定期维护:
ALTER INDEX ALL ON 表名 REBUILD;

或:

UPDATE STATISTICS 表名;

2. 数据类型

  • 用 INT 不用 BIGINT
  • 用 DATETIME2 替代 DATETIME
  • 字符串用 NVARCHAR 仅当必须

四、SQL 查询优化

1. 避免常见坑

❌ 不建议:

SELECT *
LIKE '%abc%'
WHERE YEAR(时间) = 2024

✅ 建议:

SELECT col1, col2
WHERE 时间 >= '2024-01-01'

2. 执行计划分析

SET STATISTICS IO ON;
SET STATISTICS TIME ON;

或用:

SELECT * FROM sys.dm_exec_query_stats;

五、监控与排查

1. Linux 层

top
iostat -x 1
free -m

2. SQL Server 层

SELECT * FROM sys.dm_os_wait_stats
ORDER BY wait_time_ms DESC;

常见瓶颈:

  • PAGEIOLATCH → 磁盘慢
  • SOS_SCHEDULER_YIELD → CPU 不够
  • WRITELOG → 日志盘慢

六、版本建议

  • 生产环境使用 SQL Server 2019 / 2022
  • 及时打补丁

七、常见性能问题快速对照表

问题 原因 解决办法
查询慢 缺索引 建索引
CPU 高 并行过多 调 MAXDOP
磁盘 IO 高 TempDB 单文件 加文件
内存爆 未限制 设置 memorylimit
写入慢 日志盘慢 分离日志盘

如果你愿意,可以告诉我:

  • SQL Server 版本
  • 数据量 / 并发量
  • 主要慢在查询还是写入

我可以给你 更针对性的优化方案。

0 踩