適用対象: 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
tempdbディレクトリを作成します。mkdirコマンドを使用して、tempdbデータベースのディレクトリを作成します。 SQL Server アクセスを許可するために、mssqlユーザーとグループが所有していることを確認します。mkdir /var/opt/mssql/tempdb sudo chown mssql. /var/opt/mssql/tempdbtmpfs ファイルシステムをマウントします。
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ファイル
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;
これで、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 で提供できます。
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