Kullanılabilirlik grubu veritabanı düzeyinde sistem durumu algılama yük devretme seçeneği

Şunlar için geçerlidir: SQL Server

SQL Server 2016'dan başlayarak, bir Always On kullanılabilirlik grubu yapılandırılırken veritabanı düzeyinde sistem durumu algılama (DB_FAILOVER) seçeneği kullanılabilir. Veritabanı düzeyinde sağlık algılama, veritabanı çevrimiçi durumda olmadığında veya bir sorun oluştuğunda, bu durumu algılar ve kullanılabilirlik grubunun otomatik yük devretmesini tetikler. Sağlık algılama sistemini tetikleyebilecek örnekler arasında şüphelide bulunan veritabanı, veritabanının çevrimdışı olması, ve kurtarma durumunda olan ama kurtarılamayan veritabanı sayılabilir. Daha fazla bilgi için bkz. sys.databases içindeki State sütunu.

Veritabanı düzeyinde sistem durumu algılama, kullanılabilirlik grubu için bir bütün olarak etkinleştirilir, bu nedenle veritabanı düzeyinde sistem durumu algılama kullanılabilirlik grubundaki tüm veritabanlarını izler. Kullanılabilirlik grubundaki belirli veritabanları için seçmeli olarak etkinleştirilemez.

Veritabanı düzeyinde sistem durumu algılama seçeneğinin avantajları

Kullanılabilirlik grubu veritabanı düzeyinde sistem durumu algılama seçeneği, veritabanlarınız için yüksek kullanılabilirliği garanti etmeye yardımcı olmak için yaygın olarak iyi bir seçenek olarak önerilir. Tüm kullanılabilirlik grupları için açmayı düşünmelisiniz. Uygulamanız yüksek oranda kullanılabilir olacak birkaç veritabanına bağımlıysa, bunları veritabanı sistem durumu seçeneği açık bir kullanılabilirlik grubu halinde gruplandırın.

Örneğin, veritabanı düzeyinde sistem durumu algılama seçeneği açıkken, SQL Server veritabanlarından birinin işlem günlüğü dosyasına yazamazsa, bu veritabanının durumu başarısızlık gösterecek şekilde değişir ve kullanılabilirlik grubunda kısa süre içinde yük devri gerçekleşebilir. Veritabanları tekrar çevrimiçi hale geldiğinde, uygulamanız minimum kesintiyle yeniden bağlanabilir ve çalışmaya devam edebilir.

Veritabanı düzeyinde sağlık izlemesini etkinleştirme

Genellikle önerilir, ancak önceki sürümlerde varsayılan ayarlarla geriye dönük uyumluluğu korumak için Veritabanı Sistem Durumu seçeneği varsayılan olarak kapalıdır.

Veritabanı düzeyinde sistem durumu algılama ayarını etkinleştirmenin birkaç kolay yolu vardır:

  1. SQL Server Management Studio'da SQL Server veritabanı altyapınıza bağlanın. Nesne Gezgini penceresini kullanarak Always On Yüksek Kullanılabilirlik düğümüne sağ tıklayın ve Yeni Kullanılabilirlik Grubu Sihirbazı'nı çalıştırın. Ad Belirtme sayfasında Veritabanı Düzeyi Sağlık Algılama onay kutusunu işaretleyin. Ardından sihirbazdaki diğer sayfaları tamamlayın.

    Her Zaman Açık Veritabanı Sağlığını Etkinleştirme Onay Kutusu

  2. SQL Server Management Studio'da mevcut bir Kullanılabilirlik Grubunun Özelliklerini görüntüleyin. SQL Server'ınıza bağlanın. Nesne Gezgini penceresini kullanarak Always On High Availability düğümünü genişletin. Kullanılabilirlik Grupları'nın kapsamını genişletin. Kullanılabilirlik grubuna sağ tıklayın ve Özellikler'i seçin. Veritabanı Düzeyi Sistem Durumu Algılama seçeneğini işaretleyin, ardından Tamam'a tıklayın veya Değişikliği betikleyin.

    Always On AG Özellikler Veritabanı Düzeyinde Sağlık Algılama

  3. AVAILABILITY GROUP OLUŞTUR için Transact-SQL söz dizimi. DB_FAILOVER parametresi, ON veya OFF değerlerini kabul eder.

    CREATE AVAILABILITY GROUP [Contoso-ag]
    WITH (DB_FAILOVER=ON)
    FOR DATABASE [AutoHa-Sample]
    REPLICA ON
        N'SQLSERVER-0' WITH (ENDPOINT_URL = N'TCP://SQLSERVER-0.DOMAIN.COM:5022',
          FAILOVER_MODE = AUTOMATIC, AVAILABILITY_MODE = SYNCHRONOUS_COMMIT),
        N'SQLSERVER-1' WITH (ENDPOINT_URL = N'TCP://SQLSERVER-1.DOMAIN.COM:5022',
         FAILOVER_MODE = AUTOMATIC, AVAILABILITY_MODE = SYNCHRONOUS_COMMIT);
    
  4. Transact-SQL söz dizimine göre ALTER AVAILABILITY GROUP. DB_FAILOVER parametresi, ON veya OFF değerlerini kabul eder.

    ALTER AVAILABILITY GROUP [Contoso-ag] SET (DB_FAILOVER = ON);
    
    ALTER AVAILABILITY GROUP [Contoso-ag] SET (DB_FAILOVER = OFF);
    

Uyarılar

Veritabanı Düzeyinde Isı Algılama seçeneğinin şu anda SQL Server'ın disk çalışma süresini izlemesine ve SQL Server'ın veritabanı dosyasının kullanılabilirliğini doğrudan izlemesine neden olmadığını unutmayın. Bir disk sürücüsü başarısız olursa veya kullanılamaz duruma gelirse, bu tek başına kullanılabilirlik grubunun otomatik olarak yük devretmeyi tetiklemesi gerekmez.

Örneğin, bir veritabanı etkin işlem olmadan ve fiziksel yazma işlemi yapılmadan boşta kaldığında, bazı veritabanı dosyalarına erişilemez duruma gelirse, SQL Server dosyalara okuma veya yazma GÇ işlemi gerçekleştirmeyebilir ve bu veritabanının durumunu hemen değiştiremeyebilir, bu nedenle yük devretme tetiklenmez. Daha sonra, bir veritabanı denetim noktası veya sorguyu gerçekleştirmek için fiziksel bir okuma veya yazma gerçekleştiğinde, SQL Server dosya sorununu fark edebilir ve veritabanı durumunu değiştirerek tepki gösterebilir. Bu da, veritabanı sağlığı değişikliği nedeniyle, veritabanı düzeyinde sistem durumu algılaması ayarlanmış kullanılabilirlik grubunun yük devretmesine neden olabilir.

Başka bir örnek olarak, SQL Server veritabanı altyapısının sorguyu gerçekleştirmek için veri sayfasını okuması gerektiğinde, veri sayfası arabellek havuzu belleğinde önbelleğe alınmışsa, sorgu isteğini yerine getirmek için fiziksel erişimli disk okunması gerekmeyebilir. Bu nedenle, veritabanı sağlığı seçeneği etkinleştirildiğinde bile eksik veya kullanılamayan bir veri dosyası, veritabanı durumu hemen güncellenmediği için otomatik yük devretmeyi hemen tetiklemeyebilir.

Veritabanı yük devretmesi esnek yük devretme ilkesinden ayrıdır

Veritabanı düzeyinde sistem durumu algılama, yük devretme ilkesi için SQL Server işlem durumunun eşiklerini yapılandıran esnek bir yük devretme ilkesi uygular. Veritabanı düzeyinde sistem durumu algılama DB_FAILOVER parametresi kullanılarak yapılandırılırken, kullanılabilirlik grubu seçeneği FAILURE_CONDITION_LEVEL SQL Server işlem durumu algılamasını yapılandırmak için ayrıdır. İki seçenek birbirinden bağımsızdır.

Veritabanı düzeyinde sağlık durumunu kontrol etme ve izleme

Dinamik Yönetim Görünümleri

Sistem DMV sys.availability_groups, veritabanı düzeyinde sağlık algılama seçeneğinin kapalı (0) veya açık (1) olduğunu belirten db_failover adında bir sütun gösterir.

select name, db_failover from sys.availability_groups

Örnek dmv çıkışı:

name db_failover
Contoso-ag 1

Hata Günlüğü

SQL Server Hata Günlüğü (veya sp_readerrorlog fonksiyonundan gelen metin), veritabanı düzeyindeki sağlık algılama kontrolleri nedeniyle bir kullanılabilirlik grubu yük devredildiğinde 41653 hata iletisini gösterir.

Örneğin, bu hata günlüğü alıntısı bir disk sorunu nedeniyle bir işlem günlüğü yazma işleminin başarısız olduğunu ve daha sonra AutoHa-Sample adlı veritabanının kapatıldığını ve bu da kullanılabilirlik grubunun yük devretmesi için veritabanı düzeyinde sistem durumu algılamasını tetiklediğini gösterir.

2016-04-25 12:20:21.08 spid1s Hatası: 17053, Önem Derecesi: 16, Durum: 1.

2016-04-25 12:20:21.08 spid1s SQLServerLogMgr::LogWriter: İşletim sistemi hatası 21(Cihaz hazır değil.) ile karşılaşıldı. 2016-04-25 12:20:21.08 spid1s Günlük temizleme sırasında yazma hatası.

2016-04-25 12:20:21.08 spid79 Hatası: 9001, Önem Derecesi: 21, Durum: 4.

2016-04-25 12:20:21.08 spid79 'AutoHa-Sample' veritabanının günlüğü mevcut değil İlgili hata iletileri için olay günlüğünü denetleyin. Tüm hataları giderin ve veritabanını yeniden başlatın.

2016-04-25 12:20:21.15 spid79 Hata: 41653, Önem Derecesi: 21, Durum: 1.

2016-04-25 12:20:21.15 spid79 Veritabanı 'AutoHa-Sample', 'Contoso-ag' kullanılabilirlik grubunun başarısızlığına neden olan bir hatayla (hata türü: 2 'DB_SHUTDOWN') karşılaştı. Karşılaşılan hatalar hakkında bilgi için SQL Server hata günlüğüne bakın. Bu koşul devam ederse sistem yöneticisine başvurun.

25-04-2016 12:20:21.17 spid79 'AutoHa-Sample' veritabanı için durum bilgileri - Sağlamlaştırılmış LSN: '(34:664:1)' İşlem LSN'si: '(34:656:1)' İşleme Zamanı: '25 Nis 2016 12:19'

2016-04-25 12:20:21.19 spid15s Always On Kullanılabilirlik Grupları bağlantısı, 'AutoHa-Sample' birincil veritabanı için ikincil veritabanıyla olan bağlantı, Çoğaltma Kimliği: {c4ad5ea4-8a99-41fa-893e-189154c24b49} olan 'SQLServer-0' kullanılabilirlik çoğaltmasında sonlandırıldı. Bu yalnızca bilgilendirme amaçlı bir iletidir. Kullanıcı müdahalesi gerekli değildir.

2016-04-25 12:20:21.21 spid75 Always On: 'Contoso-ag' kullanılabilirlik grubunun yerel kopyası, Windows Server Yük Devretme Kümelemesi (WSFC) kümesinden gelen bir isteğe yanıt olarak çözümleme rolüne geçiş yapmaya hazırlanıyor. Bu yalnızca bilgilendirme amaçlı bir iletidir. Kullanıcı müdahalesi gerekli değildir.

2016-04-25 12:20:21.21 spid75 'ag' kullanılabilirlik grubundaki yerel kullanılabilirlik çoğaltmasının durumu 'PRIMARY_NORMAL'den 'RESOLVING_NORMAL'a değişti. Kullanılabilirlik grubu çevrimdışı olduğundan durum değişti. İlişkili kullanılabilirlik grubu silindiği, kullanıcı Windows Server Yük Devretme Kümesi (WSFC) yönetim konsolunda ilişkili kullanılabilirlik grubunu çevrimdışına aldığı ya da kullanılabilirlik grubu başka bir SQL Server örneğine otomatik yük devretme gerçekleştirdiği için replika çevrimdışına alınıyor. Daha fazla bilgi için bkz. SQL Server hata günlüğü, Windows Server Yük Devretme Kümelemesi (WSFC) yönetim konsolu veya WSFC günlüğü.

Genişletilmiş Olay sqlserver.availability_replica_database_fault_reporting

SQL Server 2016'dan başlayarak veritabanı düzeyinde sistem durumu algılama tarafından tetiklenen yeni bir Genişletilmiş Olay tanımlanmıştır. Olay adı sqlserver.availability_replica_database_fault_reporting

Bu XEvent yalnızca birincil çoğaltmada tetikleniyor. Kullanılabilirlik grubunda barındırılan bir veritabanı için veritabanı düzeyi sistem durumu sorunu algılandığında bu XEvent tetikleniyor.

Bu olayı yakalayan bir XEvent oturumu oluşturmaya yönelik bir örnek aşağıda verilmiştir. Yol belirtilmediği için, XEvent çıkış dosyası varsayılan SQL Server hata günlüğü yolunda bulunmalıdır. Bunu kullanılabilirlik grubunuzun ilk replikası üzerinde uygulayın:

Örnek Genişletilmiş Olay Oturumu Betiği

CREATE EVENT SESSION [AlwaysOn_dbfault] ON SERVER
ADD EVENT sqlserver.availability_replica_database_fault_reporting
ADD TARGET package0.event_file(SET filename=N'dbfault.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_dbfault ON SERVER STATE=START
GO

Genişletilmiş Olay Çıktısı

SQL Server Management Studio'yu kullanarak birincil SQL Server'a bağlanın ve Yönetim düğümünü genişletin, ardından Genişletilmiş Olaylar'ı genişletin. Oturumu bulun (yukarıdaki örnekte adı AlwaysOn_dbfault olan) ve çıkış dosyalarını görmek için genişletin. Çıkış dosyasını seçtiğinizde olay dosyası yeni bir sekmede açılır.

Alanların açıklaması:

Sütun Verileri Description
availability_group_id Kullanılabilirlik grubunun kimliği.
kullanılabilirlik_grubu_adı Kullanılabilirlik grubunun adı.
availability_replica_id Erişilebilirlik replikasının kimliği.
çoğaltılabilirlik_replika_adı Kullanılabilirlik çoğaltmasının adı.
veritabanı_adı Hatayı bildiren veritabanının adı.
database_replica_id Kullanılabilirlik çoğaltma veritabanının kimliği.
failover için hazır replikalar Senkronize olan otomatik yük devretme ikincil çoğaltmalarının sayısı.
hata_tipi Bildirilen hata kimliği. Olası değerler:
0 - YOK
1 - Bilinmiyor
2 - Kapatma
is_critical Bu değer, SQL Server 2016 itibarıyla XEvent için her zaman true döndürmelidir.

Bu örnek çıktıda, fault_type, AutoHa-Sample2 adlı veritabanı adı nedeniyle, SQLSERVER-1 adlı çoğaltmada ve Contoso-ag kullanılabilirlik grubunda, hata türü 2 - Kapatma olan kritik bir olayın gerçekleştiğini gösterir.

Veri Alanı Değer
availability_group_id (erişilebilirlik_grubu_kimliği) 24E6FE58-5EE8-4C4E-9746-491CFBB208C1
availability_group_name Contoso-ag
kullanılabilirlik_replika_id 3EAE74D1-A22F-4D9F-8E9A-DEFF99B1F4D1
mevcudiyet_replikası_adı SQLSERVER-1
veritabanı_adı AutoHa-Sample2
veritabanı_kopya_kimliği 39971379-8161-4607-82E7-098590E5AE00
failover_hazır_kopyalar 1
hata_tipi 2
is_critical Doğru