温馨提示×

ubuntu上sqlserver怎样优化

小樊
43
2026-09-25 02:44:40
栏目: 云计算

在 Ubuntu 上运行 SQL Server(SQL Server on Linux) 时,优化思路和 Windows 版基本一致,但有一些 Linux 特有的注意点。下面从 系统层 → SQL Server 配置 → 数据库/查询层 三个维度说明。


一、Ubuntu 系统层优化

1. 内存配置(非常重要)

SQL Server 对内存敏感,Linux 下容易因 OOM 被杀。

  • 建议内存 ≥ 4GB(生产至少 8GB+)
  • 修改 /etc/sqlserver/mssql.conf:
[memory]
memorylimitmb = 6144   # 限制 SQL Server 使用内存(如 6GB)
  • 防止 OOM:
sudo sysctl -w vm.swappiness=1

2. 文件系统与磁盘

  • 使用 XFS 或 ext4
  • 数据盘建议:
    • /var/opt/mssql/data → 高性能 SSD
    • 日志与数据文件分离

挂载示例:

sudo mkfs.xfs /dev/sdb
sudo mount /dev/sdb /var/opt/mssql/data

3. 内核参数优化

sudo sysctl -w kernel.shmmax=2147483648
sudo sysctl -w kernel.shmmni=4096

4. 关闭不必要的服务

sudo systemctl disable snapd
sudo systemctl disable bluetooth

二、SQL Server 配置优化

1. 查看当前配置

SELECT * FROM sys.configurations;

2. 关键配置建议

-- 最大并行度(OLTP 建议 = CPU 核数或 4)
sp_configure 'max degree of parallelism', 4;
RECONFIGURE;

-- 最小/最大服务器内存
sp_configure 'min server memory', 2048;
sp_configure 'max server memory', 6144;
RECONFIGURE;

3. Tempdb 优化(Linux 同样重要)

  • 创建多个 tempdb 文件
ALTER DATABASE tempdb
ADD FILE (NAME = tempdev2, FILENAME = '/var/opt/mssql/data/tempdb2.ndf', SIZE = 512MB);

三、数据库与查询层优化

1. 索引优化

SELECT * FROM sys.dm_db_missing_index_details;

常见操作:

  • 建立覆盖索引
  • 删除重复/未使用索引
SELECT * FROM sys.dm_db_index_usage_stats;

2. 查询优化

  • 避免 SELECT *
  • 使用参数化查询
  • 查看执行计划:
SET SHOWPLAN_XML ON;

3. 统计信息

UPDATE STATISTICS tablename;

四、监控与诊断(Ubuntu 上常用)

1. 系统监控

htop
iostat -x 1

2. SQL Server 动态视图

SELECT * FROM sys.dm_exec_requests;
SELECT * FROM sys.dm_os_wait_stats;

3. 日志位置

/var/opt/mssql/log/errorlog

五、常见性能问题对照表

问题 可能原因 解决方法
CPU 高 缺索引 建索引
内存不足 未限制内存 设置 memorylimitmb
磁盘 IO 高 日志数据混放 分离磁盘
查询慢 执行计划差 重写 SQL

六、推荐组合(生产环境)

  • Ubuntu 22.04 LTS
  • SQL Server 2022
  • SSD + XFS
  • 内存 16GB+
  • tempdb 4–8 文件

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

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

我可以给你 更具体的优化方案或 SQL 示例。

0 踩