啟用並在 Linux 上的 SQL Server 2025 中的 tmpfs 上執行 tempdb

適用於: Linux 上的 SQL Server 2025 (17.x)

本文將引導你在 SQL Server 2025(17.x)中的 tempdb 檔案系統啟用並執行資料庫檔案。

Linux 上的 SQL Server 和容器傳統上支援 XFS 和 ext4 檔系統,以部署 SQL Server 資料庫檔案和記錄。 不過,對於像 tempdb 這樣不需要將數據從一個運行時間週期儲存到另一個運行時間週期的暫時性資料庫,使用利用記憶體(RAM)的 tmpfs 檔案系統可以增強以 tempdb 為基礎的工作負載的整體效能。

如需 tmpfs 文件系統的詳細資訊,請參閱 tmpfs - Linux 核心檔。

Configuration Description
支援的組態 tmpfs 非常適合用來儲存不需要在重新啟動後保留的非持續性數據。 目前只有 tempdb 資料庫檔案在 tmpfs 暫存檔系統上同時支援容器和非容器型部署。
不支援的組態 tmpfs 檔案系統可用於 SQL 容器部署中的用戶資料庫,但僅供開發之用。 不過,不支援此設定。 您可以在 GitHub 上提供此案例的意見反應。

實體或虛擬機部署

若要在實體或虛擬機上啟用 Linux 上 SQL Server 的 tmpfs 支援,您必須正確掛接 tmpfs 文件系統,這需要 sudo 存取權。 設定掛載點之後,您可以將tempdb文件放在這些掛載上,然後使用在tempdb檔案系統上掛載的文件啟動 SQL Server。

啟用 tmpfs 以提高效能 tempdb

  1. 建立 tempdb 目錄。

    使用 mkdir 命令來為 tempdb 資料庫建立目錄。 確定它是由 mssql 使用者和群組所擁有,以允許 SQL Server 存取:

    mkdir /var/opt/mssql/tempdb
    sudo chown mssql. /var/opt/mssql/tempdb
    
  2. 掛接 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
    
  3. 更新 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');
    
  4. 重新啟動 SQL Server 以套用變更。

    sudo systemctl restart mssql-server
    
  5. 確認 tempdb 檔案位置。

    SQL Server 啟動並執行之後,請使用 SQL Server Management Studio (SSMS) 之類的工具來連線到 SQL Server,確認 tempdb 數據和記錄檔現在位於新的目錄中。

    SELECT [name],
           physical_name
    FROM sys.master_files
    WHERE database_id = 2;
    

您現在應該在新的掛接路徑上看到所有 tempdb 資料庫檔案,也就是 /var/opt/mssql/tempdb。

tmpfs 掛接的熱重設大小

如果 已滿,您也可以將 tempdb 掛載動態調整大小。 若要熱調整大小,請執行下列命令,將 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 上提供與使用者資料庫相關的意見反應。

僅 tempdb 裝載 tmpfs 檔案系統上的資料庫

如果您要部署 SQL Server 容器,而且想要確保容器針對 使用 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 (使用者識別符)和 gid (群組識別符)設為 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 上部署具有所有數據和記錄檔的容器

Warning

不支援此設定,但可用於開發用途。 您可以在 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