Automatische seeding gebruiken om een AlwaysOn-beschikbaarheidsgroep te initialiseren

Van toepassing op:SQL Server

SQL Server 2016 heeft automatische seeding van beschikbaarheidsgroepen geïntroduceerd. Wanneer u een beschikbaarheidsgroep maakt met automatische initialisatie, maakt SQL Server automatisch de secundaire replica's voor elke database in de groep. U hoeft geen handmatige back-ups meer te maken en secundaire replica's te herstellen. Als u automatische seeding wilt inschakelen, maakt u de beschikbaarheidsgroep met T-SQL of gebruikt u de nieuwste versie van SQL Server Management Studio.

Zie Automatisch seeden voor secundaire replica's voor achtergrondinformatie.

Prerequisites

In SQL Server 2016 vereist automatische seeding dat het pad naar gegevens en logboekbestanden hetzelfde is op elk SQL Server exemplaar dat deelneemt aan de beschikbaarheidsgroep. In SQL Server 2017 kunt u verschillende paden gebruiken, maar Microsoft raadt aan dezelfde paden te gebruiken wanneer alle replica's op hetzelfde platform worden gehost (bijvoorbeeld Windows of Linux). Platformoverschrijdende beschikbaarheidsgroepen hebben verschillende paden voor de replica's. Zie Schijfindeling voor meer informatie.

Seeding van beschikbaarheidsgroepen communiceert via het eindpunt voor databasespiegeling. Open de binnenkomende firewallregels voor de poort van het mirroring-eindpunt op elke server.

Databases in een beschikbaarheidsgroep moeten zich in het volledige herstelmodel bevinden. De database moet een recente volledige back-up en een back-up van het transactielogboek hebben. Deze back-upbestanden worden niet gebruikt voor automatische seeding, maar ze zijn vereist voordat de database in een beschikbaarheidsgroep wordt opgenomen.

Beschikbaarheidsgroep maken met automatisch seeden

Als u een beschikbaarheidsgroep wilt maken met automatische seeding, stelt u in SEEDING_MODE=AUTOMATIC.

In het volgende voorbeeld wordt een beschikbaarheidsgroep gemaakt op een failovercluster met twee knooppunten Windows Server. Voordat u de scripts uitvoert, moet u de waarden voor uw omgeving bijwerken.

  1. Maak de eindpunten. Elke server heeft een eindpunt nodig. Met het volgende script wordt een eindpunt gemaakt dat gebruikmaakt van TCP-poort 5022 voor de listener. Stel <endpoint_name> en LISTENER_PORT zo in dat deze overeenkomen met uw omgeving en voer het script uit op beide 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. Maak de beschikbaarheidsgroep. Met het volgende script wordt de beschikbaarheidsgroep gemaakt. Werk de waarden bij tussen punthaken <> voor de groepsnaam, servernamen en domeinnamen en voer deze uit op het primaire exemplaar van 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. Voeg de secundaire serverinstantie toe aan de beschikbaarheidsgroep en verleen de machtiging voor het maken van een database aan de beschikbaarheidsgroep. Werk het volgende script bij, vervang de waarden tussen punthaken <> voor uw omgeving en voer het uit op het secundaire replica-exemplaar van SQL Server:

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

SQL Server maakt automatisch de databasereplica op de secundaire server. Als de database groot is, kan het enige tijd duren voordat de synchronisatie van de database is voltooid. Als een database zich in een beschikbaarheidsgroep bevindt die is geconfigureerd voor automatische seeding, kunt u de systeemweergave opvragen sys.dm_hadr_automatic_seeding om de voortgang van de seeding te controleren. De volgende query retourneert één rij voor elke database die zich in een beschikbaarheidsgroep bevindt die is geconfigureerd voor automatische 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

Automatische seeding voor een beschikbaarheidsgroep voorkomen

Als u tijdelijk wilt voorkomen dat de primaire replica meer databases naar de secundaire replica seedt, kunt u de machtiging voor de beschikbaarheidsgroep weigeren om databases te maken. Voer de volgende query uit op het exemplaar dat als host fungeert voor de secundaire replica om de machtiging voor de beschikbaarheidsgroep voor het maken van replicadatabases te weigeren.

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

Automatische seeding inschakelen voor een bestaande beschikbaarheidsgroep

U kunt automatische seeding instellen voor een bestaande database. Met de volgende opdracht wordt een beschikbaarheidsgroep gewijzigd voor het gebruik van automatische seeding. Voer de volgende opdracht uit op de primaire replica.

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

Met de voorgaande opdracht wordt een database gedwongen om seeding zo nodig opnieuw te starten. Als seeding bijvoorbeeld mislukt vanwege onvoldoende schijfruimte op de secundaire replica, kunt u seeding opnieuw starten ALTER AVAILABILITY GROUP ... WITH (SEEDING_MODE=AUTOMATIC) nadat u vrije ruimte hebt toegevoegd.

Automatische seeding stoppen

Als u automatische seeding voor een beschikbaarheidsgroep wilt stoppen, voert u het volgende script uit op de primaire replica:

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

Het voorgaande script annuleert alle replica's die momenteel worden seeding en voorkomt dat SQL Server automatisch replica's in deze beschikbaarheidsgroep initialiseert. Synchronisatie voor replica's die al zijn geïnitialiseerd, wordt niet gestopt.

Automatische seeding-beschikbaarheidsgroep bewaken

Dynamische beheerweergaven van het systeem gebruiken om seeding te bewaken

In de volgende systeemweergaven ziet u de status van SQL Server automatische seeding.

sys.dm_hadr_automatic_seeding

Voer op de primaire replica een query sys.dm_hadr_automatic_seeding uit om de status van het automatische seedingproces te controleren. De weergave retourneert één rij voor elk seedingproces. Voorbeeld:

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_stats

Voer op de primaire replica een query sys.dm_hadr_physical_seeding_stats uit op DMV om de fysieke statistieken te zien voor elk seeding-proces dat momenteel wordt uitgevoerd. De volgende query retourneert rijen wanneer seeding wordt uitgevoerd:

SELECT * FROM sys.dm_hadr_physical_seeding_stats;

De twee kolommen total_disk_io_wait_time_ms en de total_network_wait_time_ms kunnen worden gebruikt om het prestatieknelpunt in het automatische seedingproces te bepalen. De twee kolommen zijn ook aanwezig in de hadr_physical_seeding_progress uitgebreide gebeurtenis.

  • total_disk_io_wait_time_ms vertegenwoordigt de tijd die is besteed aan de back-up-/herstelthread tijdens het wachten op de schijf. Deze waarde is cumulatief sinds het begin van de seeding-bewerking. Als de schijven niet gereed zijn voor het lezen of schrijven van de back-upstroom, gaat de back-up-/herstelthread over naar een slaapstand en wordt elke seconde wakker om te controleren of de schijf gereed is.

  • total_network_wait_time_ms wordt anders geïnterpreteerd voor de primaire en secundaire replica. Op de primaire replica vertegenwoordigt deze teller de tijd voor netwerkstroombeheer. Op de secundaire replica geeft dit de tijd aan waarop de herstelthread wacht tot een bericht beschikbaar is voor schrijven naar de schijf.

Database-initialisatie diagnosticeren met behulp van automatische seeding in het foutenlogboek

Wanneer u een database toevoegt aan een beschikbaarheidsgroep die is geconfigureerd voor automatische seeding, SQL Server een VDI-back-up uitvoert via het eindpunt van de beschikbaarheidsgroep. Raadpleeg het SQL Server foutenlogboek voor informatie over wanneer de back-up is voltooid en de secundaire is gesynchroniseerd.

Status op databaseniveau diagnosticeren met uitgebreide gebeurtenissen

Automatische seeding bevat nieuwe uitgebreide gebeurtenissen voor het bijhouden van statuswijziging, fouten en prestatiestatistieken tijdens de initialisatie.

Met dit script wordt bijvoorbeeld een uitgebreide gebeurtenissessie gemaakt waarmee gebeurtenissen worden vastgelegd die betrekking hebben op automatische 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 

De volgende tabel bevat uitgebreide gebeurtenissen met betrekking tot automatische seeding:

Name Description
hadr_db_manager_seeding_request_msg Seeding-aanvraagbericht.
hadr_physical_seeding_backup_state_change Statuswijziging van de fysieke seeding-back-upzijde.
hadr_physical_seeding_restore_state_change Wijziging van de status van de fysieke seeding-herstelzijde.
hadr_physical_seeding_forwarder_state_change Status van fysieke seeding-doorstuurserver verandert.
hadr_physical_seeding_forwarder_target_state_change Status van fysieke seeding doorstuurserver aan de doelzijde wordt gewijzigd.
hadr_physical_seeding_submit_callback Fysieke seeding verzendt callback-gebeurtenis.
hadr_physical_seeding_failure Gebeurtenis van fysieke seeding-fout.
hadr_physical_seeding_progress Voortgangsgebeurtenis voor fysieke seeding.
hadr_physical_seeding_schedule_long_task_failure gebeurtenis voor het plannen van een lange taakfout in een fysiek seedingschema.
hadr_automatic_seeding_start Treedt op wanneer een automatische seedingbewerking wordt ingediend.
hadr_automatic_seeding_state_transition Treedt op wanneer een automatische seedingsbewerking van status verandert.
hadr_automatic_seeding_success Treedt op wanneer een automatische seeding-bewerking slaagt.
hadr_automatic_seeding_failure Treedt op wanneer een automatische seeding-bewerking mislukt.
hadr_automatic_seeding_timeout Treedt op wanneer er een time-out is bij een automatische seedingbewerking.

Andere overwegingen voor probleemoplossing

Bewaken bij automatische seeding

Voer een query sys.dm_hadr_physical_seeding_stats uit voor het uitvoeren van automatische seedingprocessen. De weergave retourneert één rij voor elke database. Voorbeeld:

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

Problemen oplossen waarom een database niet wordt weergegeven in een beschikbaarheidsgroep die is geconfigureerd voor automatische seeding

Wanneer een database niet wordt weergegeven als onderdeel van een beschikbaarheidsgroep waarvoor automatische seeding is ingeschakeld, is de automatische seeding waarschijnlijk mislukt. Hiermee voorkomt u dat de database wordt toegevoegd aan de beschikbaarheidsgroep op de primaire en secundaire replica. Voer een query sys.dm_hadr_automatic_seeding uit op zowel de primaire als de secundaire replica' s. Voer bijvoorbeeld de volgende query uit om de foutstatus van automatische seeding te identificeren.

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

Automatische seeding en overwegingen voor prestaties

SQL Server gebruikt een vast aantal threads voor automatische seeding. Op het primaire exemplaar gebruikt SQL Server één thread per LUN om wijzigingen te lezen. Op het secundaire exemplaar SQL Server één thread per LUN gebruikt om de database te initialiseren.

Stel traceringsvlag 9567 in op de primaire replica om compressie van de gegevensstroom mogelijk te maken tijdens automatische seeding. Dit kan de overdrachtstijd van automatische seeding aanzienlijk verminderen, maar het verhoogt ook het CPU-gebruik. Zie Compressie afstemmen voor beschikbaarheidsgroepvoor meer informatie.

Wanneer automatische seeding niet moet worden gebruikt

In sommige scenario's is automatische seeding mogelijk niet optimaal voor het initialiseren van een secundaire replica. Tijdens automatische seeding voert SQL Server een back-up uit via het netwerk voor initialisatie. Dit proces kan traag zijn als databases erg groot zijn of als de secundaire replica extern is. Het transactielogboek voor deze databases kan niet worden afgekapt tijdens het back-upproces, dus een langdurig initialisatieproces op een drukke database kan leiden tot aanzienlijke groei van het transactielogboek. Voordat u een database toevoegt aan een beschikbaarheidsgroep met automatische seeding, evalueert u de grootte van de database, de belasting en de siteafstand tussen replica's.

Zie ook