温馨提示×

ubuntu如何优化sqlserver性能

小樊
48
2026-09-22 00:57:15
栏目: 云计算

在 Ubuntu 上运行 SQL Server(Microsoft SQL Server on Linux) 时,性能优化可以从 系统层、SQL Server 配置、数据库设计、查询优化 四个层面来做。下面给你一套实用清单。


一、系统层优化(Ubuntu)

1. 内存配置

SQL Server 对内存非常敏感。

  • 物理内存建议 ≥ 8GB(生产环境)
  • 修改 /etc/sqlserver/launches 或用 mssql-conf:
sudo /opt/mssql/bin/mssql-conf set memory.memorylimitmb 6144

(例如限制为 6GB,避免 OS 被挤死)

重启:

sudo systemctl restart mssql-server

2. 文件系统与磁盘

  • 使用 XFS(官方推荐)
  • 数据盘与日志盘 分离
  • 避免 NFS

挂载示例(XFS):

mkfs.xfs /dev/sdb
mount -o noatime /dev/sdb /var/opt/mssql

3. 内核参数

编辑 /etc/sysctl.conf:

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

应用:

sysctl -p

4. CPU 调度

  • 关闭节能模式
  • 使用 performance 调度器
sudo apt install linux-tools-common
sudo cpupower frequency-set -g performance

二、SQL Server 配置优化

1. 最大并行度(MAXDOP)

EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;
EXEC sp_configure 'max degree of parallelism', 4;
RECONFIGURE;

(一般 = CPU 核数的一半,不超过 8)


2. 成本阈值

EXEC sp_configure 'cost threshold for parallelism', 50;
RECONFIGURE;

3. Tempdb 优化

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

三、数据库与表设计优化

1. 索引优化

  • 聚簇索引必须有
  • 避免过多索引(写性能下降)
  • 定期重建:
ALTER INDEX ALL ON dbo.TableName REBUILD;

2. 统计信息

UPDATE STATISTICS dbo.TableName;

或自动开启(默认开启)


3. 分区表(大表)

如日志、订单表:

  • 按时间分区
  • 提升查询与维护效率

四、查询与执行优化

1. 避免 SELECT *

SELECT col1, col2 FROM Table;

2. 使用执行计划

SET STATISTICS IO ON;
SET STATISTICS TIME ON;

3. 避免隐式转换

WHERE CAST(col AS VARCHAR) = '123'  -- 不好
WHERE col = 123                     -- 好

五、监控与诊断

1. 系统监控

htop
iostat -x 1

2. SQL Server 动态视图

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

3. 慢查询

SELECT TOP 10 *
FROM sys.dm_exec_query_stats
ORDER BY total_elapsed_time DESC;

六、常见性能问题速查

问题 原因 解决
CPU 高 缺索引 建索引
IO 高 日志盘慢 分离日志
内存爆 MAXDOP 高 调低
死锁 事务长 缩短事务

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

  • SQL Server 版本
  • Ubuntu 版本
  • 数据量 / 并发量
  • 具体慢的 SQL 或现象

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

0 踩