Stretch Database の管理とトラブルシューティング

適用対象: SQL Server 2016 (13.x) 以降 - Windows のみ

重要

拡張データベースは、SQL Server 2022 (16.x) および Azure SQL Database では非推奨になります。 この機能は、データベース エンジンの将来のバージョンで削除される予定です。 新規の開発作業ではこの機能を使用しないようにし、現在この機能を使用しているアプリケーションは修正することを検討してください。

Stretch Database の管理とトラブルシューティングには、この記事で説明するツールとメソッドを使います。

ローカル データの管理

Stretch Database が有効なローカル データベースとテーブルに関する情報を取得する

カタログ ビュー sys.databasessys.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_databasessys.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 が移行対象の行をステージングし、移行後に指定した期間に移行済みの行を保持しているテーブル内のデータのみを更新または削除します。

関連項目