在 Ubuntu 上运行 Microsoft SQL Server(mssql-server) 时,优化主要可以从 系统层、SQL Server 配置层、数据库设计、查询层面 四个方向来做。下面给你一套比较实用的优化清单。
SQL Server 对内存非常敏感。
# 查看内存
free -h
建议:
sudo swapoff -a
并在 /etc/fstab 中注释 swap 行
sudo mkfs.xfs /dev/sdX
挂载参数:
defaults,noatime,nodiratime
编辑 /etc/sysctl.conf:
vm.swappiness=1
vm.dirty_ratio=10
vm.dirty_background_ratio=5
应用:
sudo sysctl -p
SQL Server 默认会吃光内存。
EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;
EXEC sp_configure 'max server memory (MB)', 4096; -- 根据机器调整
RECONFIGURE;
SELECT * FROM sys.configurations;
EXEC sp_configure 'max degree of parallelism', 4;
EXEC sp_configure 'cost threshold for parallelism', 50;
RECONFIGURE;
Ubuntu 上建议:
ALTER DATABASE tempdb
MODIFY FILE (NAME = tempdev, SIZE = 512MB);
-- 查看缺失索引
SELECT * FROM sys.dm_db_missing_index_details;
CREATE INDEX IX_xxx ON Table(col1, col2);
UPDATE STATISTICS TableName;
SELECT *SELECT TOP 10
total_elapsed_time/execution_count AS avg_time,
execution_count,
text
FROM sys.dm_exec_query_stats
CROSS APPLY sys.dm_exec_sql_text(sql_handle)
ORDER BY avg_time DESC;
SET STATISTICS IO ON;
SET STATISTICS TIME ON;
Ubuntu 支持:
查看:
sqlcmd -S localhost -U SA -Q "SELECT @@VERSION"
SQL Server 对磁盘延迟敏感:
iostat -x 1
建议:
# CPU
top
# 磁盘
iostat -x 1
# SQL Server 状态
systemctl status mssql-server
如果你愿意,可以告诉我:
我可以直接给你 一份针对性的优化配置方案。