次の方法で共有


Linux 上の SQL Server 2025 Preview の tmpfs で tempdb を有効にして実行する

適用対象: SQL Server 2025 (17.x) プレビュー - Linux

この記事では、SQL Server 2025 (17.x) プレビューで tempdb ファイルシステムでデータベース ファイルを有効にして実行する方法について説明します。

SQL Server on Linux およびコンテナーでは、従来、SQL Server データベース ファイルとログをデプロイするための XFS および ext4 ファイルシステムがサポートされています。 ただし、 tempdbなどの一時的なデータベースでは、あるアップタイム期間から別のアップタイム期間にデータを保存する必要はありません。メモリ (RAM) を利用する tmpfs ファイルシステムを使用すると、 tempdb ベースのワークロードの全体的なパフォーマンスを向上させることができます。

tmpfs ファイルシステムの詳細については、tmpfs - Linux カーネルのドキュメントを参照してください

コンフィギュレーション 説明
サポートされている構成 tmpfs は、再起動後に保存する必要のない非永続的なデータを格納するのに最適です。 現在、 tempdb データベース ファイルのみが、コンテナーベースのデプロイと非コンテナー ベースのデプロイの両方で tmpfs ファイルシステムでサポートされています。
サポートされていない構成 tmpfs ファイルシステムは、SQL コンテナーデプロイのユーザー データベースに使用できますが、開発目的でのみ使用できます。 ただし、この構成はサポートされていません。 このシナリオに関するフィードバックは 、GitHub で提供できます。

物理マシンまたは仮想マシンのデプロイ

物理マシンまたは仮想マシン上の Linux 上の SQL Server で tmpfs のサポートを有効にするには、 tmpfs ファイルシステムを正しくマウントする必要があります。これには sudo アクセスが必要です。 マウント ポイントが設定されたら、これらのマウントにtempdb ファイルを配置し、tempdb ファイルシステムにマウントされた ファイルを使用して SQL Server を起動できます。

tmpfs を有効にする tempdb

  1. tempdb ディレクトリを作成します。

    mkdir コマンドを使用して、tempdb データベースのディレクトリを作成します。 SQL Server アクセスを許可するために、 mssql ユーザーとグループが所有していることを確認します。

    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=4Gtmpfs の最大サイズを 4 GB に設定します。つまり、最大 4 GB の RAM を使用できます。

    このコマンドは、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 はサポート されていません 。 ユーザー データベースに関連するフィードバックは、GitHubtmpfs で提供できます。

tmpfs ファイルシステムで tempdb データベースのみをホストする

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 (ユーザー 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;

表示されるファイルの数に基づいて、次のコマンドを変更します。 この例では、4 つの tempdb ファイルと 1 つのログ ファイルがあります。 これらのファイルを新しい場所に移動するには、次のコマンドを使用します。

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 にデプロイする

Warnung

この構成はサポートされていませんが、開発目的で使用できます。 このシナリオに関するフィードバックは 、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