适用于: SQL Server 2025 (17.x) 预览版 - Linux
本文介绍如何在 SQL Server 2025 (17.x) 预览版中的 tmpfs 文件系统上启用和运行tempdb
数据库文件。
Linux 上的 SQL Server 和容器传统上支持 XFS 和 ext4 文件系统来部署 SQL Server 数据库文件和日志。 但是,对于临时数据库(例如 tempdb
,不需要将数据从一个运行时间周期保存到另一个时间段),使用利用内存(RAM)的 tmpfs 文件系统可以增强基于工作负荷的整体性能 tempdb
。
有关 tmpfs 文件系统的详细信息,请参阅 tmpfs - Linux 内核文档。
配置 | DESCRIPTION |
---|---|
支持的配置 |
tmpfs 非常适合用于存储不需要在重启时保存的非持久性数据。 目前,仅在tempdb 数据库文件位于tmpfs文件系统上时才支持基于容器和非容器的部署。 |
不支持的配置 | tmpfs 文件系统可用于 SQL 容器部署中的用户数据库,但仅用于开发目的。 但是,不支持此配置。 可以在 GitHub 上提供此方案的反馈。 |
物理或虚拟机部署
若要在物理或虚拟机上为 Linux 上的 SQL Server 启用 tmpfs 支持,需要正确装载 tmpfs 文件系统,这需要 sudo 访问。 设置装入点后,可以将tempdb
文件放置在这些装入点上,并使用tempdb
在tmpfs文件系统上挂载的文件启动 SQL Server。
启用 tempdb
的 tmpfs
创建
tempdb
目录。使用
mkdir
命令为tempdb
数据库创建目录。 确保它由mssql
用户和组拥有,以允许 SQL Server 访问:mkdir /var/opt/mssql/tempdb sudo chown mssql. /var/opt/mssql/tempdb
装载 tmpfs 文件系统。
使用以下命令装载 tmpfs 文件系统:
sudo mount -t tmpfs -o size=4G tmpfs /var/opt/mssql/tempdb/
该
-t
选项指定文件系统的类型,在本例中为tmpfs
。使用
-o
此选项可以指定装载选项。 在这里,size=4G
将 tmpfs 的最大大小设置为 4 GB,这意味着它可以使用高达 4 GB 的 RAM。此命令将 tmpfs 装载到 SQL Server
tempdb
数据库使用的目标目录。(可选)将其添加到
fstab
以在重启后保持装载:echo "tmpfs /var/opt/mssql/tempdb tmpfs defaults,size=4G 0 0" | sudo tee -a /etc/fstab
更新
tempdb
文件位置。确保 SQL Server 已启动并运行。 使用 SQL Server Management Studio(SSMS)连接到 SQL Server 实例,并运行以下 T-SQL 命令。
使用以下 T-SQL 脚本标识所有
tempdb
文件,然后运行以下命令ALTER DATABASE
以更新tempdb
文件位置:SELECT [name], physical_name FROM sys.master_files WHERE database_id = 2;
根据你看到
tempdb
的文件数,创建ALTER DATABASE
命令,如下所示:ALTER DATABASE tempdb MODIFY FILE (NAME = tempdev, FILENAME = '/var/opt/mssql/tempdb/tempdb.mdf'); ALTER DATABASE tempdb MODIFY FILE (NAME = tempdev2, FILENAME = '/var/opt/mssql/tempdb/tempdb2.mdf'); ALTER DATABASE tempdb MODIFY FILE (NAME = tempdev3, FILENAME = '/var/opt/mssql/tempdb/tempdb3.mdf'); ALTER DATABASE tempdb MODIFY FILE (NAME = tempdev4, FILENAME = '/var/opt/mssql/tempdb/tempdb4.mdf'); ALTER DATABASE tempdb MODIFY FILE (NAME = templog, FILENAME = '/var/opt/mssql/tempdb/templog.ldf');
重启 SQL Server 以应用更改。
sudo systemctl restart mssql-server
验证
tempdb
文件位置。SQL Server 启动并运行后,使用 SQL Server Management Studio(SSMS)等工具连接到 SQL Server,验证
tempdb
数据和日志文件现在是否位于新目录中。
SELECT [name], physical_name
FROM sys.master_files
WHERE database_id = 2;
现在应会看到新装载路径/var/opt/mssql/tempdb
上的所有tempdb
数据库文件。
tmpfs 挂载的热调整大小
如果tempdb
已满,可以热调整tmpfs装载的大小。 若要热重设大小,请运行以下命令,将 tmpfs 装载大小调整为 6 GB:
mount -o remount,size=6G /var/opt/mssql/tempdb
(可选)通过修改 fstab
条目,使新大小在重启时保持保留:
sudo sed -i 's|tmpfs /var/opt/mssql/tempdb tmpfs defaults,size=4G 0 0|tmpfs /var/opt/mssql/tempdb tmpfs defaults,size=6G 0 0|' /etc/fstab
容器部署
对于开发人员工作负载, tmpfs 可用于用户数据库。 tmpfs 文件系统可以显著加快容器中部署的用户数据库的测试用例。 由于 tmpfs 使用 RAM 而不是磁盘存储,因此它允许快速读取/写入作。 此配置在开发和测试环境中非常有用,需要快速迭代。
用户数据库不支持 tmpfs。 可以在 GitHub 上的 tmpfs 上提供与用户数据库相关的反馈。
仅在 tmpfs 文件系统上托管 tempdb
数据库
如果要部署 SQL Server 容器,并且想要确保容器使用 tmpfs 作为 tempdb
,可以运行以下命令:
docker run \
-e ACCEPT_EULA=Y \
-e MSSQL_SA_PASSWORD = <password>\
--tmpfs /var/opt/mssql/tempdb:uid=10001,gid=10001,size=4G \
-p 5433:1433 \
--name sql1 \
-h sql1 \
--d mcr.microsoft.com/mssql/server:2025-latest
该 --tmpfs
命令将大小设置为 4 GB,并将 uid
(用户 ID)和 gid
(组 ID)设置为 10001
,以确保正确设置所需的权限,使要创建的 tempdb
文件能够拥有正确的权限。
容器启动并运行后,使用 SSMS 连接到 SQL Server,并使用以下 T-SQL 命令将 tempdb
文件移动到新位置 /var/opt/mssql/tempdb
:
SELECT [name], physical_name
FROM sys.master_files
WHERE database_id = 2;
根据看到的文件数,修改以下命令。 在此示例中,有四 tempdb
个文件和一个日志文件。 使用以下命令将这些文件移动到其新位置:
ALTER DATABASE tempdb
MODIFY FILE (NAME = tempdev, FILENAME = '/var/opt/mssql/tempdb/tempdb.mdf');
GO
ALTER DATABASE tempdb
MODIFY FILE (NAME = tempdev2, FILENAME = '/var/opt/mssql/tempdb/tempdb2.mdf');
GO
ALTER DATABASE tempdb
MODIFY FILE (NAME = tempdev3, FILENAME = '/var/opt/mssql/tempdb/tempdb3.mdf');
GO
ALTER DATABASE tempdb
MODIFY FILE (NAME = tempdev4, FILENAME = '/var/opt/mssql/tempdb/tempdb4.mdf');
GO
ALTER DATABASE tempdb
MODIFY FILE (NAME = templog, FILENAME = '/var/opt/mssql/tempdb/templog.ldf');
GO
移动文件后,使用以下命令停止并重启容器
docker stop sql1
docker start sql1
在 tmpfs 上部署包含所有数据和日志文件的容器
警告
不支持此配置,但可用于开发目的。 可以在 GitHub 上提供此方案的反馈。
docker run -e ACCEPT_EULA=Y \
-e MSSQL_SA_PASSWORD=<password> \
--tmpfs /var/opt/mssql/data:uid=10001,gid=10001,size=4G \
-p 5434:1433 \
--name sql2 \
-h sql2 \
-d mcr.microsoft.com/mssql/server:2025-latest