Amazon RDS で実行している Microsoft SQL Server DB インスタンスの tempdb データベースへのアクセス - Amazon Relational Database Service

Amazon RDS で実行している Microsoft SQL Server DB インスタンスの tempdb データベースへのアクセス

Amazon RDS で実行している Microsoft SQL Server DB インスタンスの tempdb データベースにアクセスできます。tempdb に対してコードを実行するには、Microsoft SQL Server Management Studio (SSMS) 経由で Transact-SQL を使用するか、他の標準の SQL クライアントアプリケーションを使用します。DB インスタンスへの接続の詳細については、「Microsoft SQL Server データベースエンジンを実行する DB インスタンスに接続する」を参照してください。

DB インスタンスのマスターユーザーは、CONTROL への tempdb アクセスが付与されるため、tempdb データベースオプションを変更できます。マスターユーザーは、tempdb データベースの所有者ではありません。必要に応じて、マスターユーザーは他のユーザーに CONTROL アクセスを付与し、他のユーザーにも tempdb データベースオプションを変更することを許可できます。

注記

tempdb データベースに対して Database Console Command (DBCC) を実行することはできません。

tempdb データベースオプションの変更

Amazon RDS DB インスタンスで tempdb データベースのデータベースオプションを変更できます。変更可能なオプションの詳細については、Microsoft ドキュメントの「tempdb データベース」を参照してください。

ファイルの最大サイズオプションなどのデータベースオプションは、DB インスタンスの再起動後も保持されます。データベースオプションを変更して、データをインポートする際のパフォーマンスを最適化したり、ストレージ不足を防止したりすることができます。

データをインポートする際のパフォーマンスの最適化

大量のデータを DB インスタンス内にインポートする際のパフォーマンスを最適化するには、tempdb データベースの SIZE プロパティと FILEGROWTH プロパティに大きな数値を設定します。tempdb を最適化する方法の詳細については、Microsoft ドキュメントの「tempdb のパフォーマンスの最適化」を参照してください。

以下の例では、ファイルサイズを 100 GB に、ファイルの拡張単位を 10 パーセントに設定しています。

alter database[tempdb] modify file (NAME = N'templog', SIZE=100GB, FILEGROWTH = 10%)

ストレージの問題の防止

tempdb データベースによる使用可能なディスク容量の占有を防止するには、MAXSIZE プロパティを設定します。次の例では、プロパティを 2048 MB に設定しています。

alter database [tempdb] modify file (NAME = N'templog', MAXSIZE = 2048MB)

tempdb データベースの圧縮

Amazon RDS DB インスタンスの tempdb データベースを圧縮するには、2 つの方法があります。rds_shrink_tempdbfile プロシージャを使用するか、SIZE プロパティを設定できます。

rds_shrink_tempdbfile プロシージャの使用

Amazon RDS プロシージャ msdb.dbo.rds_shrink_tempdbfile を使用すると、tempdb データベースを圧縮できます。rds_shrink_tempdbfileCONTROL にアクセスできる場合にのみ、tempdb を呼び出すことができます。rds_shrink_tempdbfile を呼び出すとき、DB インスタンスのダウンタイムはありません。

rds_shrink_tempdbfile プロシージャには以下のパラメータがあります。

パラメータ名 データ型 デフォルト 必須 説明

@temp_filename

SYSNAME

必須

圧縮するファイルの論理名。

@target_size

int

null

optional

ファイルの新しいサイズ (メガバイト単位)。

次の例では、tempdb データベース用にファイル名を取得します。

use tempdb; GO select name, * from sys.sysfiles; GO

以下の例では、tempdb という名前の test_file データベースファイルを圧縮し、新しいサイズとして 10 メガバイトをリクエストしています。

exec msdb.dbo.rds_shrink_tempdbfile @temp_filename = N'test_file', @target_size = 10;

SIZE プロパティの設定

tempdb を設定して DB インスタンスを再起動することでも、SIZE データベースを圧縮できます。DB インスタンスの再起動の詳細については、「 DB インスタンスの再起動」を参照してください。

次の例では、SIZE プロパティを 1024 MB に設定しています。

alter database [tempdb] modify file (NAME = N'templog', SIZE = 1024MB)

マルチ AZ 配置の TempDB 設定

データベースミラーリング (DBM) または Always On Availability Groups (AG) を使用して、RDS for SQL Server DB インスタンスがマルチ AZ 配置にある場合、tempdb データベースの使用については、以下の考慮事項に留意してください。

プライマリ DB インスタンスからセカンダリ DB インスタンスに tempdb データをレプリケートすることはできません。セカンダリ DB インスタンスにフェイルオーバーすると、そのセカンダリ DB インスタンスの tempdb は空になります。

プライマリ DB インスタンスからセカンダリ DB インスタンスに、ファイルのサイズ設定や自動拡張設定などの tempdb データベースオプションの設定を同期できます。tempDB 設定の同期は、すべての RDS for SQL Server バージョンでサポートされています。次のストアドプロシージャを使用して、tempdb 設定の自動同期を有効にできます。

EXECUTE msdb.dbo.rds_set_system_database_sync_objects @object_types = 'TempDbFile';
重要

rds_set_system_database_sync_objects ストアドプロシージャを使用する前に、セカンダリ DB インスタンスではなく、プライマリ DB インスタンスで希望の tempdb 設定を行ってください。セカンダリ DB インスタンスで設定を変更した場合、自動同期を有効にすると、希望の tempdb 設定が削除される可能性があります。

次の関数を使用して、tempdb 設定の自動同期が有効になっているかどうかを確認できます。

SELECT * from msdb.dbo.rds_fn_get_system_database_sync_objects();

tempdb 設定の自動同期が有効な場合、object_class フィールドに戻り値があります。無効なときには、値は返されません。

次の関数を使用して、オブジェクトが UTC 時間で最後に同期された時刻を調べることができます。

SELECT * from msdb.dbo.rds_fn_server_object_last_sync_time();

例えば、tempdb 設定を 01:00 に変更してから rds_fn_server_object_last_sync_time 関数を実行した場合、last_sync_time として返される値は 01:00 より後であり、自動同期が発生したことを示します。

SQL Server Agent ジョブレプリケーションも使用している場合は、 @object_type パラメータで指定することで、SQL Agent ジョブと tempdb 設定の両方のレプリケーションを有効にできます。

EXECUTE msdb.dbo.rds_set_system_database_sync_objects @object_types = 'SQLAgentJob,TempDbFile';

SQL Server Agent ジョブのレプリケーションの詳細については、「SQL Server エージェントジョブレプリケーションをオンにする」を参照してください。

rds_set_system_database_sync_objects ストアドプロシージャを使用して tempdb 設定変更が自動的に同期されるようにする代わりに、次のいずれかの手動方法を使用できます。

注記

rds_set_system_database_sync_objects ストアドプロシージャを使用して tempdb 設定の自動同期を有効にすることをお勧めsます。自動同期を使用すると、tempdb 設定を変更するたびにこれらの手動タスクを実行する必要がなくなります。

  • まず DB インスタンスを変更してマルチ AZ を無効にします。次に tempdb を変更し、最後にマルチ AZ を再度有効にします。この方法に伴うダウンタイムはありません。

    詳細については、「Amazon RDS DB インスタンスを変更する」を参照してください。

  • まず元のプライマリインスタンスで tempdb を変更します。次に手動でフェイルオーバーし、最後に新しいプライマリインスタンスで tempdb を変更します。このメソッドではダウンタイムが生じます。

    詳しくは、「 DB インスタンスの再起動」を参照してください。