温馨提示×

ubuntu怎样优化sqlserver

小樊
48
2026-09-09 20:14:05
栏目: 云计算

在 Ubuntu 上运行 Microsoft SQL Server(通常是 SQL Server on Linux),优化可以从 系统层、SQL Server 配置、数据库设计、查询和监控 几个方面入手。下面是一套比较实用、可落地的优化思路。


一、系统层优化(Ubuntu)

1. 内存与 Swap

SQL Server 对内存非常敏感。

free -h
swapon --show

建议:

  • 物理内存 ≥ 4GB(生产建议 8GB+)
  • 禁用或减小 swap
sudo swapoff -a

(永久关闭需编辑 /etc/fstab)


2. 文件系统与磁盘

  • 使用 ext4 或 XFS
  • 数据盘与日志盘分离(强烈建议)

示例挂载:

/mnt/sql-data   -> DATA
/mnt/sql-log    -> LOG

优化挂载参数:

defaults,noatime,nodiratime

3. 内核参数优化

编辑 /etc/sysctl.conf:

vm.swappiness=1
vm.dirty_ratio=10
vm.dirty_background_ratio=5

应用:

sudo sysctl -p

4. 关闭不必要的服务

systemctl list-unit-files --type=service

关闭如 cups, bluetooth 等无用服务。


二、SQL Server 配置优化(Linux 版)

1. 查看 SQL Server 状态

systemctl status mssql-server

2. 修改内存限制(非常重要)

默认 SQL Server 会尽量吃内存。

EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;
EXEC sp_configure 'max server memory (MB)', 6144; -- 示例 6GB
RECONFIGURE;

3. Tempdb 优化

Linux 上 Tempdb 默认只有 1 个文件。

建议:

  • Tempdb 文件数 = CPU 核数(最多 8)
ALTER DATABASE tempdb
ADD FILE (NAME = temp2, FILENAME = '/var/opt/mssql/data/tempdb2.ndf', SIZE = 256MB);

4. 并行度设置

EXEC sp_configure 'max degree of parallelism', 4;
RECONFIGURE;

三、数据库与表设计优化

1. 索引优化

  • 避免全表扫描
  • 定期重建索引
SELECT *
FROM sys.dm_db_index_physical_stats(NULL,NULL,NULL,NULL,'DETAILED');

重建:

ALTER INDEX ALL ON 表名 REBUILD;

2. 统计信息

UPDATE STATISTICS 表名;

3. 合理的数据类型

  • 不用 NVARCHAR(MAX) 存短文本
  • 时间用 DATETIME2

四、查询优化

1. 使用执行计划

SET STATISTICS IO ON;
SET STATISTICS TIME ON;

2. 避免

  • SELECT *
  • 在 WHERE 中对字段使用函数
  • 隐式类型转换

五、监控与诊断

1. 内置 DMV

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

2. 慢查询

SELECT TOP 10
    total_elapsed_time/execution_count AS avg_time,
    text
FROM sys.dm_exec_query_stats
CROSS APPLY sys.dm_exec_sql_text(sql_handle)
ORDER BY avg_time DESC;

3. Ubuntu 资源监控

top
htop
iotop

六、常见性能问题速查

问题 可能原因
CPU 高 缺索引 / 并行度过高
内存高 max server memory 未限制
磁盘 IO 高 日志和数据同盘
查询慢 统计信息过期

七、推荐生产配置示例(8G 内存)

  • max server memory:6GB
  • Tempdb:4 文件
  • 数据盘 / 日志盘分离
  • 关闭 swap

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

  • SQL Server 版本(SELECT @@VERSION)
  • Ubuntu 版本
  • 主要用途(Web / ERP / 报表)
  • 当前瓶颈(CPU / IO / 慢查询)

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

0 踩