自動シード処理を使用して、Always On 可用性グループを初期化するUse automatic seeding to initialize an Always On availability group

適用対象: ○SQL Server XAzure SQL Database XAzure SQL Data Warehouse XParallel Data WarehouseAPPLIES TO: yesSQL Server noAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

SQL Server 2016 には、可用性グループの自動シード処理が導入されています。SQL Server 2016 introduced automatic seeding of availability groups. 自動シード処理によって可用性グループを作成すると、グループの各データベースのセカンダリ レプリカが SQL Server で自動的に作成されます。When you create an availability group with automatic seeding, SQL Server automatically creates the secondary replicas for every database in the group. セカンダリ レプリカのバックアップと復元を手動で行う必要がありません。You no longer have to manually back up and restore secondary replicas. 自動シード処理を有効にするには、T-SQL を使用して可用性グループを作成するか、最新バージョンの SQL Server Management Studio を使用します。To enable automatic seeding, create the availability group with T-SQL or use the latest version of SQL Server Management Studio.

背景情報については、「セカンダリ レプリカの自動シード処理」を参照してください。For background information, see Automatic seeding for secondary replicas.

PrerequisitesPrerequisites

SQL Server 2016 の自動シード処理では、データとログ ファイルのパスが、可用性グループに参加しているすべての SQL Server インスタンスで同じである必要があります。In SQL Server 2016, automatic seeding requires that the data and log file path is the same on every SQL Server instance participating in the availability group. SQL Server 2017 では、異なるパスを使用できますが、すべてのレプリカを同じプラットフォーム (Windows または Linux など) でホストする場合、同じパスを使用することが推奨されます。In SQL Server 2017, you can use different paths, however Microsoft recommends using the same paths when all replicas are hosted on the same platform (for example either Windows or Linux). クロスプラットフォームの可用性グループのレプリカは、パスが異なります。Cross-platform availability groups have different paths for the replicas. 詳細については、「ディスク レイアウト」を参照してください。For details, see Disk layout.

可用性グループのシード処理は、データベース ミラーリング エンドポイント経由で通信します。Availability group seeding communicates over the database mirroring endpoint. 各サーバー上のミラーリング エンドポイント ポートへの受信ファイアウォール規則を開きます。Open inbound firewall rules to the mirroring endpoint port on each server.

可用性グループのデータベースは、完全復旧モデルにする必要があります。Databases in an availability group must be in full recovery model. データベースには、最新の完全バックアップとトランザクション ログのバックアップが必要です。The database needs to have a current full backup and transaction log backup. これらのバックアップ ファイルは、自動シード処理には使用されませんが、データベースを可用性グループに追加する前に必要になります。These backup files are not used for automatic seeding, but they are required before including the database in an availability group.

自動シード処理によって可用性グループを作成するCreate availability group with automatic seeding

自動シード処理によって可用性グループを作成するには、 SEEDING_MODE=AUTOMATICを設定します。To create an availability group with automatic seeding, set SEEDING_MODE=AUTOMATIC.

次の例では、2 つのノードがある Windows Server フェールオーバー クラスターに可用性グループを作成します。The following example creates an availability group on a two node windows server failover cluster. スクリプトを実行する前に、環境に合わせて値を更新します。Before running the scripts, update the values for your environment.

  1. エンドポイントを作成します。Create the endpoints. 各サーバーにエンドポイントが必要です。Each server needs an endpoint. 次のスクリプトでは、リスナー用に TCP ポート 5022 を使用するエンドポイントを作成します。The following script creates an endpoint that uses TCP port 5022 for the listener. 環境に合わせて <endpoint_name>LISTENER_PORT を設定し、両方のサーバーでスクリプトを実行します。Set <endpoint_name> and LISTENER_PORT to match your environment and run the script on both servers:

    CREATE ENDPOINT [<endpoint_name>] 
        STATE=STARTED
        AS TCP (LISTENER_PORT = 5022, LISTENER_IP = ALL)
        FOR DATA_MIRRORING (
            ROLE = ALL, 
            AUTHENTICATION = WINDOWS NEGOTIATE, 
            ENCRYPTION = REQUIRED ALGORITHM AES
            )
    GO
    
  2. 可用性グループを作成します。Create the availability group. 次のスクリプトで可用性グループを作成します。The following script creates the availability group. 山かっこ <> 内のグループ名、サーバー名、およびドメイン名の値を更新し、SQL Server のプライマリ インスタンスで実行します。Update the values in angle brackets <> for the group name, server names, and domain names, and run it on the primary instance of SQL Server.

    CREATE AVAILABILITY GROUP [<availability_group_name>]
        FOR DATABASE db1
        REPLICA ON'<*primary_server*>'
        WITH (ENDPOINT_URL = N'TCP://<primary_server>.<fully_qualified_domain_name>:5022', 
            FAILOVER_MODE = AUTOMATIC, 
            AVAILABILITY_MODE = SYNCHRONOUS_COMMIT, 
            BACKUP_PRIORITY = 50, 
            SECONDARY_ROLE(ALLOW_CONNECTIONS = NO), 
            SEEDING_MODE = AUTOMATIC),
        N'<secondary_server>' WITH (ENDPOINT_URL = N'TCP://<secondary_server>.<fully_qualified_domain_name>:5022', 
            FAILOVER_MODE = AUTOMATIC, 
            AVAILABILITY_MODE = SYNCHRONOUS_COMMIT, 
            BACKUP_PRIORITY = 50, 
            SECONDARY_ROLE(ALLOW_CONNECTIONS = NO), 
            SEEDING_MODE = AUTOMATIC);
    GO
    
  3. セカンダリ サーバー インスタンスを可用性グループに参加させ、可用性グループにデータベース作成アクセス許可を付与します。Join the secondary server instance to the availability group and grant create database permission to the availability group. 次のスクリプトを更新し、山かっこ <> 内の値を環境に合わせて変更し、SQL Server のセカンダリ レプリカ インスタンスで実行します。Update the following script, replace the values in angle brackets <> for your environment, and run it on the secondary replica instance of SQL Server:

    ALTER AVAILABILITY GROUP [<availability_group_name>] JOIN
    GO  
    ALTER AVAILABILITY GROUP [<availability_group_name>] GRANT CREATE ANY DATABASE
    GO
    

SQL Server はセカンダリ サーバー上にデータベースのレプリカを自動的に作成します。SQL Server automatically creates the database replica on the secondary server. データベースが大きい場合は、データベースの同期を完了するまで時間がかかることがあります。If the database is large, it may take some time to complete synchronization of the database. 自動シード処理の対象として構成されている可用性グループにデータベースがある場合は、 sys.dm_hadr_automatic_seeding システム ビューにクエリを実行してシード処理の進行状況を監視できます。If a database is in an availability group that is configured for automatic seeding, you can query sys.dm_hadr_automatic_seeding system view to monitor the seeding progress. 次のクエリは、自動シード処理の対象として構成されている可用性グループ内にあるデータベースごとに 1 つの行を返します。The following query returns one row for every database that is in an availability group configured for automatic seeding.

SELECT start_time,
    ag.name,
    db.database_name,
    current_state,
    performed_seeding,
    failure_state,
    failure_state_desc
FROM sys.dm_hadr_automatic_seeding autos 
    JOIN sys.availability_databases_cluster db 
        ON autos.ag_db_id = db.group_database_id
    JOIN sys.availability_groups ag 
        ON autos.ag_id = ag.group_id

可用性グループの後の自動シード処理を防ぐPrevent automatic seeding after an availability group

一時的にプライマリ レプリカからセカンダリ レプリカにデータベースのシード処理が行われないようにするために、可用性グループのデータベース作成アクセス許可を拒否することができます。To temporarily prevent the primary replica from seeding more databases to the secondary replica, you can deny the availability group permission to create databases. 可用性グループのレプリカ データベース作成権限を拒否するには、セカンダリ レプリカをホストしているインスタンスで次のクエリを実行します。Run the following query on the instance that hosts the secondary replica in order to deny the availability group permission to create replica databases.

ALTER AVAILABILITY GROUP [<availability_group_name>] 
    DENY CREATE ANY DATABASE
GO

既存の可用性グループで自動シード処理を有効にするEnable automatic seeding on an existing availability group

既存のデータベースに対して自動シード処理を設定できます。You can set automatic seeding on an existing database. 次のコマンドは、自動シード処理を使用するように可用性グループを変更します。The following command changes an availability group to use automatic seeding. プライマリ レプリカで次のコマンドを実行します。Run the following command on the primary replica.

ALTER AVAILABILITY GROUP [<availability_group_name>] 
    MODIFY REPLICA ON '<secondary_node>' 
    WITH (SEEDING_MODE = AUTOMATIC)
GO

上記のコマンドを実行すると、必要な場合にデータベースでシード処理が強制的に再開されます。The preceding command forces a database to restart seeding if needed. たとえば、セカンダリ レプリカでディスクの空き領域不足のためにシード処理が失敗した場合、空き領域を増やした後、ALTER AVAILABILITY GROUP ... WITH (SEEDING_MODE=AUTOMATIC) を実行してシード処理を再開します。For example, if seeding fails because of insufficient disk space on the secondary replica, run ALTER AVAILABILITY GROUP ... WITH (SEEDING_MODE=AUTOMATIC) to restart seeding after you have added free space.

自動シード処理を停止するStop automatic seeding

可用性グループの自動シード処理を停止するには、プライマリ レプリカで、次のスクリプトを実行します。To stop automatic seeding for an availability group, run the following script on the primary replica:

ALTER AVAILABILITY GROUP [<availability_group_name>] 
    MODIFY REPLICA ON '<secondary_node>'   
    WITH (SEEDING_MODE = MANUAL)
GO

上記のスクリプトでは、現在シード処理中のレプリカがキャンセルされ、この可用性グループ内のレプリカが SQL Server によって自動的に初期化されることはありません。The preceding script cancels any replicas that are currently seeding, and prevents SQL Server from automatically initializing any replicas in this availability group. 既に初期化されているレプリカの同期は停止しません。It does not stop synchronization for any replicas that are already initialized.

可用性グループの自動シード処理を監視するMonitor automatic seeding availability group

システム動的管理ビューを使用してシード処理を監視するUse system dynamic management views to monitor seeding

次のシステム ビューは、SQL Server の自動シード処理の状態を示します。The following system views show the status of SQL Server automatic seeding.

sys.dm_hadr_automatic_seedingsys.dm_hadr_automatic_seeding

プライマリ レプリカでクエリ sys.dm_hadr_automatic_seeding を実行して、自動シード処理プロセスの状態を確認します。On the primary replica, query sys.dm_hadr_automatic_seeding to check the status of the automatic seeding process. このビューは、シード処理プロセスごとに 1 つの行を返します。The view returns one row for each seeding process. 例:For example:

SELECT start_time, 
    completion_time
    is_source,
    current_state,
    failure_state,
    failure_state_desc
FROM sys.dm_hadr_automatic_seeding

sys.dm_hadr_physical_seeding_statssys.dm_hadr_physical_seeding_stats

プライマリ レプリカで、 sys.dm_hadr_physical_seeding_stats DMV のクエリを実行して、現在実行中の各シード処理プロセスの物理統計情報を表示します。On the primary replica, query sys.dm_hadr_physical_seeding_stats DMV to see the physical statistics for each seeding process that is currently running. 次のクエリは、シード処理が実行されているときの行数を返します。The following query returns rows when seeding is running:

SELECT * FROM sys.dm_hadr_physical_seeding_stats;

total_disk_io_wait_time_mstotal_network_wait_time_ms の 2 つの列は、自動シード処理プロセスにおけるパフォーマンスのボトルネックを特定するのに使用できます。The two columns total_disk_io_wait_time_ms and the total_network_wait_time_ms can be used to determinte performance bottleneck in the Automatic seeding process. この 2 つの列は、hadr_physical_seeding_progress 拡張イベントにもあります。The two columns are also present in the hadr_physical_seeding_progress extended event.

total_disk_io_wait_time_ms は、ディスクで待機中にバックアップ/復元スレッドで費やされた時間を表します。total_disk_io_wait_time_ms represents the time spent by the backup/restore thread while waiting on the disk. この値は、シード処理操作が開始されてからの累積です。This value is cummulative since the start of the seeding operation. ディスクがバックアップ ストリームの読み取りまたは書き込みに対して準備ができていない場合、バックアップ/復元スレッドはスリープ状態に移行し、1 秒ごとにウェイク アップしてディスクの準備ができたかどうかをチェックします。If the disks are not ready for reading or writing the backup stream, the backup/restore thread transitions into a sleep state and wakes up every one second to check if the disk is ready.

total_network_wait_time_ms は、プライマリ レプリカとセカンダリ レプリカで解釈のされ方が異なります。total_network_wait_time_ms is interpreted diffrently for the Primary and the Secondary replica. プライマリ レプリカでは、このカウンターはネットワーク フローの制御時間を表します。At the primary replica this counter represents the network flow control time. セカンダリ レプリカでは、これはメッセージがディスクに書き込めるようになるまで復元スレッドが待機する時間を表します。On the secondary replica this represents the time the restore thread is waiting for a message to be availabile for writing to the disk.

エラー ログ内の自動シード処理を使用してデータベースの初期化を診断するDiagnose database initialization using automatic seeding in the error log

自動シード処理の対象として構成されている可用性グループにデータベースを追加すると、SQL Server は可用性グループのエンドポイントを介して、VDI のバックアップを行います。When you add a database to an availability group configured for automatic seeding, SQL Server performs a VDI backup over the availability group endpoint. バックアップがいつ完了したか、およびセカンダリがいつ同期されたかについては、SQL Server エラー ログを確認してください。Review the SQL Server error log for information on when the backup completed and the secondary was synchronized.

拡張イベントを使用してデータベース レベルの正常性を診断するDiagnose database level health with extended events

自動シード処理には、初期化中の状態変更、エラー、およびパフォーマンス統計情報を追跡するための新しい拡張イベントが用意されています。Automatic seeding has new extended events for tracking state change, failures, and performance statistics during initialization.

たとえば、このスクリプトは、自動シード処理に関連したイベントをキャプチャする拡張イベント セッションを作成します。For example, this script creates an extended events session that captures events related to automatic seeding:

CREATE EVENT SESSION [AlwaysOn_autoseed] ON SERVER 
    ADD EVENT sqlserver.hadr_automatic_seeding_state_transition,
    ADD EVENT sqlserver.hadr_automatic_seeding_timeout,
    ADD EVENT sqlserver.hadr_db_manager_seeding_request_msg,
    ADD EVENT sqlserver.hadr_physical_seeding_backup_state_change,
    ADD EVENT sqlserver.hadr_physical_seeding_failure,
    ADD EVENT sqlserver.hadr_physical_seeding_forwarder_state_change,
    ADD EVENT sqlserver.hadr_physical_seeding_forwarder_target_state_change,
    ADD EVENT sqlserver.hadr_physical_seeding_progress,
    ADD EVENT sqlserver.hadr_physical_seeding_restore_state_change,
    ADD EVENT sqlserver.hadr_physical_seeding_submit_callback
    ADD TARGET package0.event_file(
        SET filename=N'autoseed.xel',
            max_file_size=(5),
            max_rollover_files=(4)
        )
WITH (
    MAX_MEMORY=4096 KB,
    EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS,
    MAX_DISPATCH_LATENCY=30 SECONDS,
    MAX_EVENT_SIZE=0 KB,
    MEMORY_PARTITION_MODE=NONE,
    TRACK_CAUSALITY=OFF,
    STARTUP_STATE=ON
    )
GO 

ALTER EVENT SESSION AlwaysOn_autoseed ON SERVER STATE=START
GO 

次の表に、自動シード処理に関連する拡張イベントを示します。The following table lists extended events related to automatic seeding:

[オブジェクト名]Name [説明]Description
hadr_db_manager_seeding_request_msghadr_db_manager_seeding_request_msg シード処理要求メッセージ。Seeding request message.
hadr_physical_seeding_backup_state_changehadr_physical_seeding_backup_state_change 物理シード処理のバックアップ側の状態変更。Physical seeding backup side state change.
hadr_physical_seeding_restore_state_changehadr_physical_seeding_restore_state_change 物理シード処理の復元側の状態変更。Physical seeding restore side state change.
hadr_physical_seeding_forwarder_state_changehadr_physical_seeding_forwarder_state_change 物理シード処理のフォワーダー側の状態変更。Physical seeding forwarder side state change.
hadr_physical_seeding_forwarder_target_state_changehadr_physical_seeding_forwarder_target_state_change 物理シード処理のフォワーダー ターゲット側の状態変更。Physical seeding forwarder target side state change.
hadr_physical_seeding_submit_callbackhadr_physical_seeding_submit_callback 物理シード処理のコールバック送信イベント。Physical seeding submit callback event.
hadr_physical_seeding_failurehadr_physical_seeding_failure 物理シード処理のエラー イベント。Physical seeding failure event.
hadr_physical_seeding_progresshadr_physical_seeding_progress 物理シード処理の進行状況イベント。Physical seeding progress event.
hadr_physical_seeding_schedule_long_task_failurehadr_physical_seeding_schedule_long_task_failure 物理シード処理スケジュール長期タスク障害イベント。physical seeding schedule long task failure event.
hadr_automatic_seeding_starthadr_automatic_seeding_start 自動シード処理操作が提出されるときに発生します。Occurs when an automatic seeding operation is submitted.
hadr_automatic_seeding_state_transitionhadr_automatic_seeding_state_transition 自動シード処理操作が状態を変更するときに発生します。Occurs when an automatic seeding operation changes state.
hadr_automatic_seeding_successhadr_automatic_seeding_success 自動シード処理操作が成功するときに発生します。Occurs when an automatic seeding operation succeeds.
hadr_automatic_seeding_failurehadr_automatic_seeding_failure 自動シード処理操作が失敗するときに発生します。Occurs when an automatic seeding operation fails.
hadr_automatic_seeding_timeouthadr_automatic_seeding_timeout 自動シード処理操作がタイムアウトになるときに発生します。Occurs when an automatic seeding operation times out.

その他のトラブルシューティングに関する考慮事項Other troubleshooting considerations

自動シード処理時の監視Monitor when automatic seeding

sys.dm_hadr_physical_seeding_stats のクエリを実行して、現在実行中の自動シード処理プロセスを問い合わせます。Query sys.dm_hadr_physical_seeding_stats for currently running automatic seeding processes. このビューは、データベースごとに 1 つの行を返します。The view returns one row for each database. 例:For example:

SELECT local_database_name, 
    role_desc, 
    internal_state_desc, 
    transfer_rate_bytes_per_second, 
    transferred_size_bytes, 
    database_size_bytes, 
    start_time_utc, 
    end_time_utc, estimate_time_complete_utc, 
    total_disk_io_wait_time_ms, 
    total_network_wait_time_ms, 
    is_compression_enabled 
FROM sys.dm_hadr_physical_seeding_stats

自動シード処理の対象として構成されている可用性グループにデータベースが表示されない理由についてトラブルシューティングを行うTroubleshoot why a database fails to appear in an availability group configured for automatic seeding

自動シード処理が有効になっているデータベースが可用性グループの一部として表示されない場合、自動シード処理が失敗した可能性があります。When a database fails to appear as part of an availability group with automatic seeding enabled, the automatic seeding likely failed. そのため、プライマリまたはセカンダリ レプリカで可用性グループにデータベースを追加できません。This prevents addition of the database to the availability group on either the primary and secondary replica. プライマリ レプリカとセカンダリ レプリカの両方で sys.dm_hadr_automatic_seeding のクエリを実行します。Query sys.dm_hadr_automatic_seeding on both the primary and secondary replicas. たとえば、自動シード処理のエラーの状態を確認するには、次のクエリを実行します。For example, run the following query to identify failure state of automatic seeding.

SELECT start_time, 
    completion_time, 
    is_source, 
    current_state, 
    failure_state, 
    failure_state_desc, 
    error_code 
FROM sys.dm_hadr_automatic_seeding

自動シード処理およびパフォーマンスに関する考慮事項Automatic seeding and performance considerations

SQL Server が自動シード処理に使用するスレッドの数は固定されています。SQL Server uses a fixed number of threads for automatic seeding. プライマリ インスタンスでは、SQL Server は LUN ごとに 1 つのスレッドを使用して変更を読み取ります。On the primary instance, SQL Server uses one thread per LUN to read changes. セカンダリ インスタンスでは、SQL Server は LUN ごとに 1 つのスレッドを使用してデータベースを初期化します。On the secondary instance SQL Server uses one thread per LUN to initialize database.

プライマリ レプリカに対して自動シード処理時のデータ ストリームの圧縮を有効にするには、トレース フラグ 9567 を設定します。Set trace flag 9567 on the primary replica to enable compression of the data stream during automatic seeding. これにより自動シード処理の転送時間が大幅に減少する一方、CPU 使用率が大きくなります。This can significantly reduce the transfer time of automatic seeding, however it also increases the CPU usage. 詳細については、「 Tune compression for availability group」(可用性グループの圧縮を調整する) を参照してください。For more information, see Tune compression for availability group.

自動シード処理を使用すべきでない場合When not to use automatic seeding

セカンダリ レプリカを初期化するときに、自動シードが最適な処理ではない場合もあります。In some scenarios automatic seeding may not be optimal for initializing a secondary replica. 自動シード処理時、SQL Server は初期化の前にネットワーク経由でバックアップを実行します。During automatic seeding, SQL Server performs a backup over the network for initialization. データベースが大規模な場合やセカンダリ レプリカがリモートの場合は、この処理に時間がかかることがあります。This process can be slow if databases are very large, or the secondary replica is remote. そのようなデータベースのトランザクション ログをバックアップ処理中に切り捨てることはできないため、ビジー状態のデータベースでは、長時間にわたる初期化プロセスによってトランザクション ログの容量が大幅に増加します。The transaction log for these databases cannot be truncated during the backup process, so a prolonged initialization process on a busy database can result in significant transaction log growth. 自動シード処理によってデータベースを可用性グループに追加する前に、データベースのサイズ、負荷、およびレプリカ間のサイトの距離を評価してください。Before adding a database to an availability group with automatic seeding, evaluate the database size, load, and site distance between replicas.

リソースResources

CREATE AVAILABILITY GROUP (Transact-SQL)CREATE AVAILABILITY GROUP (Transact-SQL)

AlwaysOn 可用性グループのトラブルシューティングと監視のガイドAlwaysOn Availability Groups Troubleshooting and Monitoring Guide