Always On kullanılabilirlik grubunu başlatmak için otomatik tohumlama kullanma

Şunlar için geçerlidir: SQL Server

SQL Server 2016, kullanılabilirlik gruplarının otomatik olarak dağıtılmasıyla kullanıma sunulmuştur. Otomatik tohumlama ile bir kullanılabilirlik grubu oluşturduğunuzda, SQL Server gruptaki her veritabanı için otomatik olarak ikincil çoğaltmalar oluşturur. Artık ikincil çoğaltmaları el ile yedeklemeniz ve geri yüklemeniz gerekmez. Otomatik tohum oluşturmayı etkinleştirmek için T-SQL ile kullanılabilirlik grubunu oluşturun veya SQL Server Management Studio en son sürümünü kullanın.

Arka plan bilgileri için bkz. İkincil çoğaltmalar için otomatik tohumlama.

Prerequisites

SQL Server 2016'da otomatik dağıtım, kullanılabilirlik grubuna katılan her SQL Server örnekte veri ve günlük dosyası yolunun aynı olmasını gerektirir. SQL Server 2017'de farklı yollar kullanabilirsiniz, ancak Microsoft tüm çoğaltmalar aynı platformda (örneğin Windows veya Linux) barındırıldığında aynı yolların kullanılmasını önerir. Platformlar arası kullanılabilirlik grupları, replikalar için farklı yollara sahiptir. Ayrıntılar için bkz. Disk düzeni.

Kullanılabilirlik grubu tohumlama, veritabanı yansıtma uç noktası üzerinden iletişim kurar. Her sunucuda yansıtma uç noktası bağlantı noktasına yönelik gelen güvenlik duvarı kurallarını açın.

Kullanılabilirlik grubundaki veritabanları tam kurtarma modelinde olmalıdır. Veritabanının geçerli bir tam yedeklemeye ve işlem günlüğü yedeklemesine sahip olması gerekir. Bu yedekleme dosyaları otomatik tohumlama için kullanılmaz, ancak veritabanını bir kullanılabilirlik grubuna eklemeden önce gereklidir.

Otomatik tohumlama ile kullanılabilirlik grubu oluşturma

Otomatik çekirdek oluşturma ile bir kullanılabilirlik grubu oluşturmak için SEEDING_MODE=AUTOMATIC öğesini ayarlayın.

Aşağıdaki örnek, iki düğümlü Windows Server yük devretme kümesinde bir kullanılabilirlik grubu oluşturur. Betikleri çalıştırmadan önce ortamınızın değerlerini güncelleştirin.

  1. Uç noktaları oluşturun. Her sunucunun bir uç noktası olması gerekir. Aşağıdaki betik, dinleyici için 5022 numaralı TCP bağlantı noktasını kullanan bir uç nokta oluşturur. <endpoint_name> ve LISTENER_PORT öğelerini ortamınıza uyacak şekilde ayarlayın ve betiği her iki sunucuda da çalıştırın:

    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. Kullanılabilirlik grubunu oluşturun. Aşağıdaki betik kullanılabilirlik grubunu oluşturur. Grup adı, sunucu adları ve etki alanı adları için açılı ayraç <> içindeki değerleri güncelleştirin ve SQL Server birincil örneğinde çalıştırın.

    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. İkincil sunucu örneğini kullanılabilirlik grubuna ekleyin ve kullanılabilirlik grubuna veritabanı oluşturma izni verin. Aşağıdaki betiği güncelleyin, açılı ayraçlar içindeki <> değerlerini ortamınıza uygun değerlerle değiştirin ve bunu SQL Server’ın ikincil replika örneğinde çalıştırın:

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

SQL Server ikincil sunucuda otomatik olarak veritabanı çoğaltması oluşturur. Veritabanı büyükse, veritabanının eşitlenmesini tamamlamak biraz zaman alabilir. Veritabanı otomatik tohumlama için yapılandırılmış bir kullanılabilirlik grubundaysa, sistem görünümünü sorgulayarak sys.dm_hadr_automatic_seeding tohumlama ilerleme durumunu izleyebilirsiniz. Aşağıdaki sorgu, otomatik tohumlama için yapılandırılmış bir kullanılabilirlik grubundaki her veritabanı için bir satır döndürür.

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

Bir kullanılabilirlik grubundan sonra otomatik çekirdek oluşturmayı önleme

Birincil çoğaltmanın ikincil çoğaltmaya daha fazla veritabanı dağıtmasını geçici olarak önlemek için, veritabanları oluşturma için kullanılabilirlik grubu iznini reddedebilirsiniz. Kullanılabilirlik grubunun çoğaltma veritabanları oluşturma iznini reddetmek için, ikincil çoğaltmanın barındırıldığı örnekte aşağıdaki sorguyu çalıştırın.

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

Mevcut bir kullanılabilirlik grubunda otomatik tohum oluşturmayı etkinleştirme

Mevcut bir veritabanında otomatik tohumlama ayarlayabilirsiniz. Aşağıdaki komut, bir kullanılabilirlik grubunu otomatik tohumlama kullanacak şekilde değiştirir. Aşağıdaki komutu birincil replikada çalıştırın.

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

Yukarıdaki komut, gerekirse veritabanını tohumlama işlemini yeniden başlatmaya zorlar. Örneğin, ikincil çoğaltmada yetersiz disk alanı nedeniyle tohumlama başarısız olursa, boş alan ekledikten sonra tohumlama işlemini yeniden başlatmak için komutunu çalıştırın ALTER AVAILABILITY GROUP ... WITH (SEEDING_MODE=AUTOMATIC) .

Otomatik tohumlamayı durdurma

Bir kullanılabilirlik grubu için otomatik tohumlamayı durdurmak için birincil çoğaltmada aşağıdaki betiği çalıştırın:

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

Yukarıdaki betik, şu anda tohumlamada olan tüm çoğaltmaları iptal eder ve SQL Server bu kullanılabilirlik grubundaki tüm çoğaltmaları otomatik olarak başlatmasını engeller. Önceden başlatılmış çoğaltmalar için eşitlemeyi durdurmaz.

Otomatik tohumlama kullanılabilirlik grubunu izleme

Tohumlamayı izlemek için sistem dinamik yönetim görünümlerini kullanın

Aşağıdaki sistem görünümleri, SQL Server otomatik seeding işleminin durumunu gösterir.

sys.dm_hadr_automatic_seeding

Birincil çoğaltmada, otomatik tohumlama işleminin durumunu denetlemek için sorguyu sys.dm_hadr_automatic_seeding çalıştırın. Görünüm, her bir tohumlama işlemi için bir satır döndürür. Örneğin:

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

Birincil çoğaltmada DMV'yi sorgulayarak sys.dm_hadr_physical_seeding_stats çalışmakta olan her bir tohumlama işleminin fiziksel istatistiklerini görün. Aşağıdaki sorgu, tohumlama çalışırken satırları döndürür:

SELECT * FROM sys.dm_hadr_physical_seeding_stats;

total_disk_io_wait_time_ms vetotal_network_wait_time_ms iki sütun, Otomatik tohumlama işleminde performans sorunlarını belirlemek için kullanılabilir. İki sütun hadr_physical_seeding_progress genişletilmiş olayda da bulunur.

  • total_disk_io_wait_time_ms , diskte beklerken yedekleme/geri yükleme iş parçacığı tarafından harcanan zamanı temsil eder. Bu değer, tohumlama işleminin başlangıcından bu yana kümülatiftir. Diskler yedekleme akışını okumaya veya yazmaya hazır değilse, yedekleme/geri yükleme iş parçacığı uyku durumuna geçirilir ve diskin hazır olup olmadığını denetlemek için her bir saniyede bir uyanır.

  • total_network_wait_time_ms , Birincil ve İkincil çoğaltma için farklı yorumlanır. Birincil çoğaltmada bu sayaç, ağ akışı denetim süresini temsil eder. İkincil çoğaltmada bu, geri yükleme iş parçacığının diske yazılabilecek bir iletinin kullanılabilir hâle gelmesini beklediği süreyi temsil eder.

Hata günlüğünü kullanarak otomatik tohumlama ile veritabanı başlatmayı tanılayın

Otomatik dağıtım için yapılandırılmış bir kullanılabilirlik grubuna veritabanı eklediğinizde, SQL Server kullanılabilirlik grubu uç noktası üzerinden bir VDI yedeklemesi gerçekleştirir. Yedeklemenin ne zaman tamamlandığı ve ikincilin eşitlendiği hakkında bilgi için SQL Server hata günlüğünü gözden geçirin.

Genişletilmiş olaylarla veritabanı düzeyindeki sağlığı tanılayın

Otomatik tohumlama, başlatma sırasında durum değişikliğini, hataları ve performans istatistiklerini izlemeye yönelik yeni genişletilmiş olaylar içerir.

Örneğin, bu betik otomatik tohumlama ile ilgili olayları yakalamak için bir genişletilmiş olay oturumu oluşturur:

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 

Aşağıdaki tabloda otomatik tohumlamayla ilgili genişletilmiş olaylar listeleniyor:

Name Description
hadr_db_manager_seeding_request_msg Tohumlama istek iletisi.
hadr_physical_seeding_backup_state_change Fiziksel tohumlama yedek taraf durum değişikliği.
hadr_physical_seeding_restore_state_change Fiziksel tohumlama geri yükleme yan durum değişikliği.
hadr_physical_seeding_forwarder_state_change Fiziksel tohumlama iletici tarafı durum değişikliği.
hadr_physical_seeding_forwarder_target_state_change Fiziksel tohumlama ileticisi hedef tarafı durum değişikliği.
hadr_physical_seeding_submit_callback Fiziksel tohumlama gönderim geri çağırım olayı.
hadr_physical_seeding_failure Fiziksel tohumlama hatası olayı.
hadr_physical_seeding_progress Fiziksel tohumlama ilerleme durumu olayı.
HADR_fiziksel_çekirdek_oluşturma_zamanlanmış_uzun_görev_başarısızlığı fiziksel tohumlama zamanlaması uzun görev hatası olayı.
hadr_automatic_seeding_start Otomatik bir tohumlama işlemi gönderildiğinde gerçekleşir.
hadr_automatic_seeding_state_transition Otomatik bir tohumlama işlemi durum değiştirdiğinde gerçekleşir.
hadr_automatic_seeding_success Otomatik bir tohumlama işlemi başarılı olduğunda gerçekleşir.
hadr_automatic_seeding_failure Otomatik bir tohumlama işlemi başarısız olduğunda gerçekleşir.
hadr_automatic_seeding_timeout Otomatik bir tohumlama işlemi zaman aşımına uğradığında oluşur.

Diğer sorun giderme konuları

Otomatik tohumlama sırasında izleme

sys.dm_hadr_physical_seeding_stats Şu anda çalışan otomatik tohumlama işlemlerini sorgula. Görünüm her veritabanı için bir satır döndürür. Örneğin:

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

Veritabanının otomatik tohumlama için yapılandırılmış bir kullanılabilirlik grubunda görünmeme sorununu giderme

Veritabanı, otomatik tohumlama etkin bir kullanılabilirlik grubunun parçası olarak görünemediğinde, otomatik tohumlama büyük olasılıkla başarısız olmuştur. Bu, veritabanının birincil ve ikincil çoğaltmadaki kullanılabilirlik grubuna eklenmesini engeller. Hem birincil hem de ikincil kopyalarda sys.dm_hadr_automatic_seeding sorgulayın. Örneğin, otomatik tohumlamanın hata durumunu belirlemek için aşağıdaki sorguyu çalıştırın.

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

Otomatik tohumlama ve performansla ilgili dikkat edilmesi gerekenler

SQL Server otomatik tohumlama için sabit sayıda iş parçacığı kullanır. Birincil örnekte, SQL Server değişiklikleri okumak için LUN başına bir iş parçacığı kullanır. İkincil örnekte SQL Server veritabanını başlatmak için LUN başına bir iş parçacığı kullanır.

Otomatik tohumlama sırasında veri akışının sıkıştırmasını etkinleştirmek için birincil çoğaltmada izleme bayrağı 9567'yi ayarlayın. Bu, otomatik tohumlamanın aktarım süresini önemli ölçüde azaltabilir, ancak CPU kullanımını da artırır. Daha fazla bilgi için, bkz. Kullanılabilirlik grubu için sıkıştırmayı ayarlama.

Otomatik tohumlamanın kullanılmaması gereken durumlar

Bazı senaryolarda otomatik dağıtım, ikincil çoğaltmayı başlatmak için en uygun olmayabilir. Otomatik tohumlama sırasında, SQL Server başlatma için ağ üzerinden bir yedekleme gerçekleştirir. Veritabanları çok büyükse veya ikincil çoğaltma uzaksa bu işlem yavaş olabilir. Bu veritabanlarının işlem günlüğü yedekleme işlemi sırasında kesilemez, bu nedenle yoğun bir veritabanında uzun süreli bir başlatma işlemi önemli işlem günlüğü büyümesine neden olabilir. Otomatik tohumlama ile bir kullanılabilirlik grubuna veritabanı eklemeden önce, çoğaltmalar arasındaki veritabanı boyutunu, yükünü ve site mesafesini değerlendirin.

Ayrıca bakınız