Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Gäller för:SQL Server
SQL Server 2016 infördes automatisk seeding av tillgänglighetsgrupper. När du skapar en tillgänglighetsgrupp med automatisk seeding skapar SQL Server automatiskt de sekundära replikerna för varje databas i gruppen. Du behöver inte längre säkerhetskopiera och återställa sekundära repliker manuellt. Om du vill aktivera automatisk seeding skapar du tillgänglighetsgruppen med T-SQL eller använder den senaste versionen av SQL Server Management Studio.
Bakgrundsinformation finns i Automatisk seeding för sekundära repliker.
Förutsättningar
I SQL Server 2016 kräver automatisk seeding att data- och loggfilsökvägen är densamma på varje SQL Server instans som deltar i tillgänglighetsgruppen. I SQL Server 2017 kan du använda olika sökvägar, men Microsoft rekommenderar att du använder samma sökvägar när alla repliker finns på samma plattform (till exempel antingen Windows eller Linux). Plattformsoberoende tillgänglighetsgrupper har olika sökvägar för replikerna. Mer information finns i Disklayout.
Tillgänglighetsgruppens seeding kommunicerar via databasens speglingsslutpunkt. Öppna inkommande brandväggsregler till speglingsslutpunktsporten på varje server.
Databaser i en tillgänglighetsgrupp måste vara i en fullständig återställningsmodell. Databasen måste ha en aktuell fullständig säkerhetskopia och säkerhetskopiering av transaktionsloggar. Dessa säkerhetskopieringsfiler används inte för automatisk seeding, men de krävs innan databasen inkluderas i en tillgänglighetsgrupp.
Skapa tillgänglighetsgrupp med automatisk seeding
Om du vill skapa en tillgänglighetsgrupp med automatisk seeding anger du SEEDING_MODE=AUTOMATIC.
I följande exempel skapas en tillgänglighetsgrupp på ett Windows Server redundanskluster med två noder. Innan du kör skripten uppdaterar du värdena för din miljö.
Skapa slutpunkterna. Varje server behöver en slutpunkt. Följande skript skapar en slutpunkt som använder TCP-port 5022 för lyssnaren. Ange
<endpoint_name>ochLISTENER_PORTför att matcha din miljö och kör skriptet på båda servrarna: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 ) GOSkapa tillgänglighetsgruppen. Följande skript skapar tillgänglighetsgruppen. Uppdatera värdena inom vinkelparenteser
<>för gruppnamn, servernamn och domännamn och kör det på den primära instansen av 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); GOAnslut den sekundära serverinstansen till tillgänglighetsgruppen och bevilja skapa databasbehörighet till tillgänglighetsgruppen. Uppdatera följande skript, ersätt värdena i vinkelparenteser
<>för din miljö och kör det på den sekundära replikinstansen av SQL Server:ALTER AVAILABILITY GROUP [<availability_group_name>] JOIN GO ALTER AVAILABILITY GROUP [<availability_group_name>] GRANT CREATE ANY DATABASE GO
SQL Server skapar automatiskt databasrepliken på den sekundära servern. Om databasen är stor kan det ta lite tid att slutföra synkroniseringen av databasen. Om en databas finns i en tillgänglighetsgrupp som är konfigurerad för automatisk seeding kan du köra frågor mot sys.dm_hadr_automatic_seeding systemvyn för att övervaka seeding-förloppet. Följande fråga returnerar en rad för varje databas som finns i en tillgänglighetsgrupp som konfigurerats för automatisk 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
Förhindra automatisk seeding efter en tillgänglighetsgrupp
Om du tillfälligt vill förhindra att den primära repliken seedar fler databaser till den sekundära repliken kan du neka tillgänglighetsgruppen behörighet att skapa databaser. Kör följande fråga på den instans som är värd för den sekundära repliken för att neka tillgänglighetsgruppen behörighet att skapa replikdatabaser.
ALTER AVAILABILITY GROUP [<availability_group_name>]
DENY CREATE ANY DATABASE
GO
Aktivera automatisk seeding i en befintlig tillgänglighetsgrupp
Du kan ange automatisk seeding på en befintlig databas. Följande kommando ändrar en tillgänglighetsgrupp så att den använder automatisk seeding. Kör följande kommando på den primära repliken.
ALTER AVAILABILITY GROUP [<availability_group_name>]
MODIFY REPLICA ON '<secondary_node>'
WITH (SEEDING_MODE = AUTOMATIC)
GO
Föregående kommando tvingar en databas att starta om seeding om det behövs. Om seeding till exempel misslyckas på grund av otillräckligt diskutrymme på den sekundära repliken kör ALTER AVAILABILITY GROUP ... WITH (SEEDING_MODE=AUTOMATIC) du för att starta om seeding när du har lagt till ledigt utrymme.
Stoppa automatisk seeding
Om du vill stoppa automatisk seeding för en tillgänglighetsgrupp kör du följande skript på den primära repliken:
ALTER AVAILABILITY GROUP [<availability_group_name>]
MODIFY REPLICA ON '<secondary_node>'
WITH (SEEDING_MODE = MANUAL)
GO
Föregående skript avbryter alla repliker som för närvarande är seeding och förhindrar att SQL Server automatiskt initierar eventuella repliker i den här tillgänglighetsgruppen. Det stoppar inte synkroniseringen för alla repliker som redan har initierats.
Övervaka tillgänglighetsgrupp för automatisk seeding
Använda dynamiska hanteringsvyer för system för att övervaka seeding
Följande systemvyer visar status för SQL Server automatisk seeding.
sys.dm_hadr_automatic_seeding
På den primära repliken frågar du sys.dm_hadr_automatic_seeding för att kontrollera statusen för den automatiska seeding-processen. Vyn returnerar en rad för varje seedingprocess. Ett exempel:
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
På den primära repliken frågar du sys.dm_hadr_physical_seeding_stats DMV för att se den fysiska statistiken för varje seedingprocess som körs för närvarande. Följande fråga returnerar rader när seeding körs:
SELECT * FROM sys.dm_hadr_physical_seeding_stats;
De två kolumnerna total_disk_io_wait_time_ms och total_network_wait_time_ms kan användas för att fastställa flaskhalsar för prestanda i processen för automatisk seeding. De två kolumnerna finns också i den hadr_physical_seeding_progress utökade händelsen.
total_disk_io_wait_time_ms representerar den tid som används av säkerhetskopierings-/återställningstråden i väntan på disken. Det här värdet är kumulativt sedan start av seeding-åtgärden. Om diskarna inte är redo att läsa eller skriva säkerhetskopieringsströmmen övergår tråden för säkerhetskopiering/återställning till viloläge och vaknar varje sekund för att kontrollera om disken är klar.
total_network_wait_time_ms tolkas på olika sätt för den primära och sekundära repliken. Vid den primära repliken representerar den här räknaren tiden för nätverksflödeskontroll. På den sekundära repliken representerar detta den tid då återställningstråden väntar på att ett meddelande ska vara tillgängligt för skrivning till disken.
Diagnostisera databasinitiering med hjälp av automatisk seeding i felloggen
När du lägger till en databas i en tillgänglighetsgrupp som konfigurerats för automatisk seeding utför SQL Server en VDI-säkerhetskopiering över tillgänglighetsgruppens slutpunkt. Granska SQL Server felloggen för information om när säkerhetskopian slutfördes och den sekundära synkroniserades.
Diagnostisera hälsotillstånd på databasnivå med utökade händelser
Automatisk seeding har nya utökade händelser för spårning av tillståndsändringar, fel och prestandastatistik under initieringen.
Det här skriptet skapar till exempel en utökad händelsesession som samlar in händelser relaterade till automatisk 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
I följande tabell visas utökade händelser relaterade till automatisk seeding:
| Name | Description |
|---|---|
| hadr_db_manager_seeding_request_msg | Meddelande om seeding-begäran. |
| hadr_physical_seeding_backup_state_change | Tillståndsändring för säkerhetskopieringssidan för fysisk seeding. |
| hadr_physical_seeding_restore_state_change | Ändra tillståndet för återställningssidan för fysisk seeding. |
| hadr_physical_seeding_forwarder_state_change | Tillståndsändring för vidarebefordrarens fysiska seedningssida. |
| hadr_physical_seeding_forwarder_target_state_change | Fysisk seeding forwarder mål sidtillståndsändring. |
| hadr_physical_seeding_submit_callback | Fysisk seeding skickar återanropshändelse. |
| hadr_physical_seeding_failure | Fel vid fysisk seeding. |
| hadr_physical_seeding_progress | Förloppshändelse för fysisk seeding. |
| hadr_physical_seeding_schedule_long_task_failure | fysisk seeding schema lång aktivitetsfel händelse. |
| hadr_automatic_seeding_start | Inträffar när en automatisk seeding-åtgärd skickas. |
| hadr_automatic_seeding_state_transition | Inträffar när en automatisk seeding-åtgärd ändrar tillstånd. |
| hadr_automatic_seeding_success | Inträffar när en automatisk seeding-åtgärd lyckas. |
| hadr_automatic_seeding_failure | Inträffar när en automatisk seeding-åtgärd misslyckas. |
| hadr_automatic_seeding_timeout | Inträffar när en automatisk seeding-åtgärd överskrider tidsgränsen. |
Andra felsökningsöverväganden
Övervaka vid automatisk seeding
Fråga sys.dm_hadr_physical_seeding_stats efter automatiska seedingprocesser som körs för tillfället. Vyn returnerar en rad för varje databas. Ett exempel:
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
Felsök varför en databas inte visas i en tillgänglighetsgrupp som har konfigurerats för automatisk seeding
När en databas inte visas som en del av en tillgänglighetsgrupp med automatisk seeding aktiverad, misslyckades sannolikt den automatiska seedingen. Detta förhindrar att databasen läggs till i tillgänglighetsgruppen på antingen den primära och sekundära repliken. Fråga sys.dm_hadr_automatic_seeding på både de primära och sekundära replikerna. Kör till exempel följande fråga för att identifiera feltillståndet för automatisk seeding.
SELECT start_time,
completion_time,
is_source,
current_state,
failure_state,
failure_state_desc,
error_code
FROM sys.dm_hadr_automatic_seeding
Överväganden för automatisk seeding och prestanda
SQL Server använder ett fast antal trådar för automatisk seeding. På den primära instansen använder SQL Server en tråd per LUN för att läsa ändringar. På den sekundära instansen använder SQL Server en tråd per LUN för att initiera databasen.
Ange spårningsflagga 9567 på den primära repliken för att aktivera komprimering av dataströmmen under automatisk seeding. Detta kan avsevärt minska överföringstiden för automatisk seeding, men det ökar också CPU-användningen. Mer information finns i Finjustera komprimering för tillgänglighetsgrupp.
När du inte ska använda automatisk seeding
I vissa scenarier är automatisk seeding kanske inte optimalt för att initiera en sekundär replik. Under automatisk seeding utför SQL Server en säkerhetskopia över nätverket för initiering. Den här processen kan vara långsam om databaserna är mycket stora eller om den sekundära repliken är fjärransluten. Transaktionsloggen för dessa databaser kan inte trunkeras under säkerhetskopieringsprocessen, så en långvarig initieringsprocess i en upptagen databas kan leda till betydande tillväxt i transaktionsloggen. Innan du lägger till en databas i en tillgänglighetsgrupp med automatisk seeding utvärderar du databasens storlek, belastning och platsavstånd mellan repliker.