Stretch Database の管理とトラブルシューティング
適用対象: SQL Server 2016 (13.x) 以降 - Windows のみ
重要
拡張データベースは、SQL Server 2022 (16.x) および Azure SQL Database では非推奨になります。 この機能は、データベース エンジンの将来のバージョンで削除される予定です。 新規の開発作業ではこの機能を使用しないようにし、現在この機能を使用しているアプリケーションは修正することを検討してください。
Stretch Database の管理とトラブルシューティングには、この記事で説明するツールとメソッドを使います。
ローカル データの管理
Stretch Database が有効なローカル データベースとテーブルに関する情報を取得する
カタログ ビュー sys.databases
と sys.tables
を開き、Stretch 対応の SQL Server データベースとテーブルに関する情報を確認します。 詳細については、「sys.databases (Transact-SQL)」と「sys.tables (Transact-SQL)」をご覧ください。
SQL Server で Stretch 対応テーブルが使用する領域の量を表示するには、次のステートメントを実行します。
USE <Stretch-enabled database name>;
GO
EXEC sp_spaceused '<Stretch-enabled table name>', 'true', 'LOCAL_ONLY';
GO
データ移行の管理
テーブルに適用されたフィルター関数の確認
カタログ ビュー sys.remote_data_archive_tables
を開き、 filter_predicate
列の値を確認し、移行する行を選択するために Strech Database が使用する関数を識別します。 値が null の場合、テーブル全体が移行の対象になります。 詳細については、「sys.remote_data_archive_tables (TRANSACT-SQL)」および移行する行の選択におけるフィルター関数の使用に関する記事をご覧ください。
データ移行の状態を確認する
Stretch Database モニターでデータ移行を監視するには、SQL Server Management Studio のデータベースで、[タスク] > [ストレッチ] > [モニター] の順に選択します。 詳細については、「 データ移行の監視とトラブルシューティング (Stretch Database)」を参照してください。
または、動的管理ビュー sys.dm_db_rda_migration_status
を開いて、移行されたバッチ数とデータ行数を確認します。
データ移行のトラブルシューティング
トラブルシューティングのヒントについては、「 データ移行の監視とトラブルシューティング (Stretch Database)」を参照してください。
リモート データの管理
Stretch Database に使用されるリモート データベースとテーブルに関する情報を取得する
カタログ ビュー sys.remote_data_archive_databases
と sys.remote_data_archive_tables
を開き、移行したデータを格納するリモート データベースとテーブルに関する情報を確認します。 詳細については、「sys.remote_data_archive_databases (Transact-SQL)」と「sys.remote_data_archive_tables (Transact-SQL)」をご覧ください。
Azure で Stretch 対応テーブルが使用する領域の量を表示するには、次のステートメントを実行します。
USE <Stretch-enabled database name>;
GO
EXEC sp_spaceused '<Stretch-enabled table name>', 'true', 'REMOTE_ONLY';
GO
移行データの削除
既に Azure に移行したデータを削除する場合は、「 sys.sp_rda_reconcile_batch」に記載された手順に従います。
テーブル スキーマの管理
リモート テーブルのスキーマは変更しないでください
Stretch Database 用に構成された SQL Server テーブルと関連付けてあるリモート Azure テーブルのスキーマは変更しないでください。 特に、列の前やデータ型は変更しないでください。 Stretch Database の機能によって、SQL Server テーブルのスキーマと関連するリモート テーブルのスキーマについて、さまざまな仮定を行います。 リモート スキーマを変更すると、Stretch Database は変更されたテーブルの動作を停止します。
テーブル列の調整
リモート テーブルから誤って列を削除した場合は、 sp_rda_reconcile_columns
を実行し、リモート テーブルにはなく Stretch 対応 SQL Server テーブルに存在する列をリモート テーブルに追加します。 詳細については、「 sys.sp_rda_reconcile_columns」を参照してください。
重要
sp_rda_reconcile_columns
がリモート テーブルから誤って削除した列を再作成する場合、削除された列に属していたデータは復元されません。
sp_rda_reconcile_columns
は、Stretch 対応の SQL Server テーブルにはなく、リモート テーブルに存在する列をリモート テーブルから削除しません。 Stretch 対応の SQL Server テーブルに存在しなくなったリモートの Azure テーブルに列が存在している場合、これらの余分な列が Stretch Database の正常な動作を妨げることはありません。 必要に応じて余分の列を手動で削除できます。
パフォーマンスとコストの管理
クエリ パフォーマンスのトラブルシューティング
Stretch 対応テーブルを含むクエリの実行時間は、Stretch 対応にする前のテーブルよりも長くかかります。 クエリのパフォーマンスが大幅に低下する場合、次の問題が考えられます。
Azure サーバーは、SQL Server とは異なる地域にありますか。 Azure サーバーが SQL Server と同じ地域になるように構成すると、SQL Server のネットワーク待機時間は軽減されます。
ネットワークの状態が低下する可能性があります。 最近の問題または停止については、ネットワーク管理者に問い合わせてください。
インデックス作成など、リソースが消費される操作の Azure パフォーマンス レベルを増やします。
Stretch Database に構成されている大規模なテーブルに対してビルド、再構築、インデックスの再構成を行い、その間 Azure の移行済みデータに対する高負荷のクエリが予期される場合、操作中に対応するリモート Azure データベースのパフォーマンス レベルを増やすことをお勧めします。 パフォーマンス レベルおよび料金の詳細については、「 SQL Server Stretch Database の価格」を参照してください。
Azure で SQL Server Stretch Database サービスを一時停止することはできません
適切なパフォーマンスと料金レベルを選択していることを確認します。 リソースを集中的に使用する操作のために一時的にパフォーマンス レベルを上げる場合は、操作の完了後、以前のレベルに復元します。 パフォーマンス レベルおよび料金の詳細については、「 SQL Server Stretch Database の価格」を参照してください。
クエリのスコープの変更
Stretch 対応テーブルに対するクエリは、既定ではローカルとリモートの両方のデータを返します。 すべてのユーザーによるすべてのクエリに対するクエリ スコープ、もしくは管理者による 1 つのクエリに対するクエリ スコープのみを変更することができます。
すべてのユーザーによるすべてのクエリのクエリ スコープの変更
すべてのユーザーによるすべてのクエリ スコープを変更するには、ストアド プロシージャ sys.sp_rda_set_query_mode
を実行します。 スコープを縮小して、ローカル データだけをクエリするか、すべてのクエリを無効にするか、または既定の設定を復元することができます。 詳細については、「 sys.sp_rda_set_query_mode」を参照してください。
管理者による 1 つのクエリに対するクエリ スコープの変更
db_owner ロールのメンバーが 1 つのクエリ スコープを変更するためには、WITH ( REMOTE_DATA_ARCHIVE_OVERRIDE = *value* )
クエリ ヒントを SELECT ステートメントに追加します。 REMOTE_DATA_ARCHIVE_OVERRIDE クエリ ヒントには次の値を指定できます。
LOCAL_ONLY。 ローカル データだけをクエリします。
REMOTE_ONLY。 リモート データだけをクエリします。
STAGE_ONLY。 Stretch Database が移行対象の行をステージングし、移行後に指定した期間に移行済みの行を保持しているテーブル内のデータのみをクエリします。 このクエリ ヒントは、ステージング テーブルをクエリする唯一の方法です。
たとえば、次のクエリではローカルの結果だけが返されます。
USE [<Stretch-enabled database name>];
GO
SELECT *
FROM [<Stretch_enabled table name>]
WITH (REMOTE_DATA_ARCHIVE_OVERRIDE = LOCAL_ONLY)
WHERE someCol = 1 /* sample predicate only, please replace with an appropriate one */;
GO
管理者用の更新と削除を行う
既定では、Stretch 対応テーブルで、移行対象の行または既に移行された行に対して、UPDATE 操作または DELETE 操作を実行することはできません。 問題を解消する必要がある場合、db_owner ロールのメンバーとして、ステートメントに WITH ( REMOTE_DATA_ARCHIVE_OVERRIDE = *value* )
クエリ ヒントを追加することで更新操作や削除操作を実行できます。 REMOTE_DATA_ARCHIVE_OVERRIDE クエリ ヒントには次の値を指定できます。
LOCAL_ONLY。 ローカルのデータのみを更新または削除します。
REMOTE_ONLY。 リモートのデータのみを更新または削除します。
STAGE_ONLY。 Stretch Database が移行対象の行をステージングし、移行後に指定した期間に移行済みの行を保持しているテーブル内のデータのみを更新または削除します。