MSSQLSERVER_19407

Şunlar için geçerlidir: SQL Server

Ayrıntılar

Özellik Değer
Ürün Adı SQL Server
Olay Kimliği 19407
Olay Kaynağı MSSQLSERVER
Bileşen SQLEngine
Sembolik Ad HADR_AG_LEASE_EXPIRED
İleti Metni '%.*ls' kullanılabilirlik grubu ile Windows Server Yük Devretme Kümesi arasındaki kiranın süresi doldu. SQL Server örneği ile Windows Server Yük Devretme Kümesi arasında bir bağlantı sorunu ortaya çıktı. Kullanılabilirlik grubunun yük devretmesinin doğru olup olmadığını belirlemek için Windows Server Yük Devretme Kümesindeki ilgili kullanılabilirlik grubu kaynağını denetleyin.

Explanation

SQL Server ile Windows Server Yük Devretme kümesi arasındaki iletişim kaybolduğunda SQL Server hata günlüğünde hata 19407 oluştu. Genellikle düzeltici bir eylem gerçekleşir- başka bir Always On düğümüne yük devretme.

Kiralama, SQL Server ile Windows Server Yük Devretme Kümesi (WSFC) işlemi arasında, özellikle de RHS.EXE işlemi arasında gerçekleşen zamana dayalı bir iletişim mekanizmasıdır. İki işlem, diğer işlemin çalıştığından ve yanıtlandığından emin olmak için birbirleriyle düzenli aralıklarla iletişim kurar. Bu iletişim Windows Olay nesneleri kullanılarak gerçekleşir ve WSFC bilgisi olmadan AG kaynağının yük devretmesinin gerçekleşmemesini sağlar. İşlemlerden biri önceden tanımlanmış bir kira dönemine göre kira iletişimine yanıt vermezse, kiralama zaman aşımı oluşur. Ayrıntılı bilgi için bkz. Always On kullanılabilirlik grupları için kiralama, küme ve sistem durumu denetim zaman aşımları ile ilgili mekanik bilgiler ve yönergeler. Ayrıca bkz . Nasıl Çalışır: SQL Server Always On Kira Zaman Aşımı.

Nedenler

Windows Olayları hafif eşitleme nesneleri olduğundan, bunları olumsuz yönde etkileyen nispeten az sayıda dış faktör vardır. Kira zaman aşımına neden olabilecek tipik sorunlar sistem genelindeki sorunları içerir. Kiralama süresinin dolmasına ve yeniden başlatmaya veya yük devretmeye neden olabilecek olasılıkların listesi aşağıdadır:

  • Sistemde yüksek CPU kullanımı (100%'a yakın).

  • Yetersiz bellek koşulları - düşük sanal bellek ve/veya işlemlerden biri disk belleğine alınıyor.

  • Çekirdek kaybı nedeniyle WSFC çevrimdışı oluyor. Çekirdek kaybı sorunlarını gidermek için bkz. Çekirdek yapılandırma ve yönetme veZorunlu Çekirdek (SQL Server) aracılığıyla WSFC Olağanüstü Durum Kurtarma.

  • Performansı etkileyen ve kira süresinin dolmasına neden olan VM azaltma.

  • SQL Server işlemi büyük bir bellek dökümü oluştururken yanıt vermiyor. Yığın dökümü oluşturma hakkında daha fazla bilgi için bkz. Döküm oluşturmanın etkisi. Yığın dökümü oluşturma işlemi aşağıdaki nedenlerden bazıları nedeniyle oluşabilir:

    • Döngüye alınamayan zamanlayıcı
    • Mandal zaman aşımı
    • Kilitlenme zamanlayıcısı
    • Çözülmemiş kilitlenme

Kullanıcı eylemi

Yüksek CPU sorunlarını giderme

  1. Görev Yöneticisi'ni açın.

  2. Performans sekmesine gidin ve CPU'ların 100% kullanımına yakın mı yoksa 100'de mi olduğunu görün.

  3. İşlemler sekmesine gidin ve CPU sütununu seçerek işlemleri CPU sütununa göre azalan düzende sıralayın.

  4. En çok CPU kullanan işlemi belirleyin ve yüksek CPU'ya neden olmasının nedenini anlama ve çözme üzerinde çalışın.

  5. İşlem SQL Server ise bkz. SQL Server'da yüksek CPU kullanımı sorunlarını giderme.

  6. Sistemdeki CPU kullanımını denetlemek için aşağıdaki PowerShell betiğini kullanabilirsiniz.

    Get-Counter -Counter "\Processor(_Total)\% Processor Time" -SampleInterval 5 -MaxSamples 30 |
        Select-Object -ExpandProperty CounterSamples | Select-Object TimeStamp, Path, CookedValue
    

Yetersiz bellek sorunlarını giderme

Sistemde düşük sanal veya fiziksel bellek oluşumları varsa, SQL Server veya küme kaynak ana bilgisayar hizmeti (RHS.exe) işlemi sayfalanabilir. İşlem diske çağrılırsa, etkin bir şekilde yürütülmüyor ve kira zaman aşımına bellek kullanılabilir olduğunda ve işlem sanal baytları fiziksel belleğe geri çağrıldığından ulaşabilirsiniz. Düşük sanal bellek, sistemdeki belleğin tamamını kullanan uygulamalardan, sürücülerden veya işletim sisteminden kaynaklanabilir. Bu sorunu gidermek için aşağıdaki yöntemleri kullanın:

  1. Gibi Your system is low on virtual memoryhatalar için Uygulama veya Sistem olay günlüğünü denetleyin. Sunucuda oturum açtıysanız ekranda bu hatanın görüntülendiğini bile görebilirsiniz.

  2. Görev yöneticisini açın, Performans -> Bellek'i seçerek belleğin yüzde 100'e% yakınının kullanılıp tüketilmediğini denetleyin. En büyük bellek tüketicisi olabilecek uygulamaları tanımlamak için Ayrıntılar sekmesini kullanın.

  3. Alternatif olarak Performans İzleyicisi'ni kullanabilir ve zaman içinde bu sayaçları izleyebilirsiniz:

    • İşlem\Çalışma Kümesi - tek tek işlemlerin bellek kullanımını denetlemek için
    • Memory\Available MBytes - sistemdeki genel bellek kullanımını denetlemek için

    Tüm işlemlerde genel bellek kullanımını ve sistemdeki kullanılabilir belleği belirlemek için aşağıdaki PowerShell betiğini kullanabilirsiniz. Tek tek işlemlerin bellek kullanımını almak istiyorsanız, olarak "\Process(_Total)\Working Set""\Process(*)\Working Set"değiştirin.

    $serverName = $env:COMPUTERNAME
    $Counters = @(
      ("\\$serverName" + "\Process(_Total)\Working Set") , ("\\$serverName" + "\Memory\Available Bytes")
    )
    
    Get-Counter -Counter $Counters -MaxSamples 30 | ForEach-Object {
        $_.CounterSamples | ForEach-Object {
            [pscustomobject]@{
                TimeStamp = $_.TimeStamp
                Path      = $_.Path
                Value_MB  = ([Math]::Round($_.CookedValue, 3)) / 1024 / 1024
            }
            Start-Sleep -s 5
        }
    }
    
  4. Büyük miktarda bellek tüketen belirli uygulamaları belirlerseniz, bu uygulamaları başka bir sistemde durdurmayı veya taşımayı ya da bellek kullanımını denetlemeyi göz önünde bulundurun.

  5. SQL Server büyük miktarda bellek kullanıyorsa, bellek kullanımını azaltmak için kullanmayı sp_configure 'max server memory' düşünebilirsiniz.

CPU, bellek ve disk için Performans İzleyicisi veri toplama

Bu PowerShell betiği CPU, bellek ve disk açısından performans izleyicisi (PerfMon) verilerinin toplanmasını kolaylaştırır. Betik esnek olacak şekilde tasarlanmıştır ve SQL Server'ın hem varsayılan hem de adlandırılmış örnekleri için özelleştirmeye olanak tanır.

#Replace with your instance name if need to collect PerfMon data for named instance
$InstanceName = 'MSSQLSERVER'

# Replace with your desired location
$Location = "D:\PerfMonLogs"

# Function to create performance counter log
function Create-PerfCounterLog {
    param
    (
        [string]$InstanceName,
        [string]$Location
    )
    $counters = @(
        '\Memory\*',
        '\PhysicalDisk(*)\*',
        '\LogicalDisk(*)\*',
        '\Server\*',
        '\System\*',
        '\Process(*)\*',
        '\Processor(*)\*',
        '\SQLServer:Databases(*)\*',
        '"\SQLServer:Buffer Manager\*"',
        '"\SQLServer:SQL Statistics\*"',
        '"\SQLServer:Transactions\*"',
        '"\SQLServer:Database Mirroring\*"',
        '"\SQLServer:Latches\*"',
        '"\SQLServer:General Statistics\*"',
        '"\SQLServer:Availability Replica(*)\*"',
        '"\SQLServer:Plan Cache(*)\*"'
    )
    if ($InstanceName -eq 'MSSQLSERVER') {
        # This is for the default SQL Server instance
        $logmanCommand = "logman create counter MS_perf_log -f bin -c $counters"

    }
    else {
        # This is for a named SQL Server instance
        $InstanceName = "MSSQL`$$InstanceName"
        $counters = $counters -replace 'SQLServer', $InstanceName
        $logmanCommand = "logman create counter MS_perf_log -f bin -c $counters"

    }

    $Location = $Location + '\MS_perf_log.blg'
    $logmanCommand += " -si 00:00:01 -max 500 -o $Location"

    Start-Process -FilePath "cmd.exe" -ArgumentList "/c $logmanCommand" -Verb RunAs -Wait

}

# Function to start the collector
function Start-PerfCounterLog {
    Start-Process -FilePath "cmd.exe" -ArgumentList "/c logman start MS_perf_log" -Verb RunAs -Wait
}

# Function to stop and delete the collector
function Stop-Delete-PerfCounterLog {
    Start-Process -FilePath "cmd.exe" -ArgumentList "/c logman stop MS_perf_log" -Verb RunAs -Wait
    Start-Process -FilePath "cmd.exe" -ArgumentList "/c logman delete MS_perf_log" -Verb RunAs -Wait
}

# Create folder if not exists - update the file path as per your environment
$folderPath = $Location
if (-not (Test-Path $folderPath)) {
    New-Item -Path $folderPath -ItemType Directory
}

# Create performance counter log
Create-PerfCounterLog -InstanceName $InstanceName -Location $Location

# Start the collector
Start-PerfCounterLog

# If the event has occurred again and captured, then stop the collector
# Uncomment below line when you want to stop and delete the collector
# Stop-Delete-PerfCounterLog

SQL Server veya küme işleminin büyük bellek dökümlerini azaltma veya önleme

Bazı durumlarda SQL Server işlemi özel durumlarla, onaylarla, zamanlayıcı sorunlarıyla vb. karşılaşabilir. Bu gibi durumlarda SQL Server, dolaylı belleğe sahip bir minidump oluşturmak için işlemi varsayılan olarak tetikler SQLDumper.exe . Ancak, bu döküm oluşturma işlemi uzun sürerse SQL Server işlemi yanıt vermeyi durdurur ve bu da kiralama zaman aşımını tetikleyebilir. Bellek dökümü için sık karşılaşılan nedenler şunlardır:

  • işlem tarafından büyük bellek kullanımı
  • Dökümlerin yazıldığı G/Ç alt sistemi yavaş
  • varsayılan ayar mini dökümden filtrelenmiş veya tam döküme değiştirildi

Kira zaman aşımını önlemek için AG sistemlerinde aşağıdaki adımları kullanın:

  • Tüm çoğaltmalar için oturum zaman aşımını 120 saniye artırma
  • Tüm çoğaltmaların otomatik yük devretmesini el ile yük devretme olarak değiştirme
  • LeaseTimeout değerini 60.000 ms (60 saniye) olarak artırın ve HealthCheckTimeout değerini 90.000 ms (90 saniye) olarak değiştirin

Daha fazla bilgi için bkz . SQL Server'da döküm dosyası oluşturmak için Sqldumper.exe aracını kullanma.

Fazla sağlama için sanal makine (VM) yapılandırmasını denetleme

Sanal makine kullanıyorsanız CPU'ları ve bellek kaynaklarını fazla sağlamadığınızdan veya fazla sağlamadığınızdan emin olun. CPU'ların veya belleğin fazla sağlanması konuk işletim sisteminin kaynaklarının bitip daha önce açıklanan sorunları (yüksek CPU ve düşük bellek) göstermesine neden olabilir. Konuk işletim sisteminin içindeki öğeleri görüntülüyorsanız, sanal makinenin dışında bir şeyler olduğu için işlem kaynaklarının neden tükendiğini açıklamak sık sık zordur. Fazla kullanım kaynakları, kiralama zaman aşımlarına neden olabilecek geçici işlem durdurmalarına neden olabilir. Fazla kullanımı giderme hakkında daha fazla bilgi için bkz. ESX/ESXi sanal makine performansı sorunlarını giderme (2001003) ve Sanallaştırma - Fazla bellek kullanma ve vm içinde algılama.

Sanal makine (VM) geçiş veya yedeklemesini denetleme

Hyper-V, VMware ve diğer VM çözümleri, VM'leri konak makineler (Hyper-V Live Migration ve VMware vMotion) arasında taşıma olanağı sunar. Çoğu durumda, bu teknolojiler neredeyse anında geçiş sağlar. Ancak, ağ veya konak makine performans sorunları varsa, bu geçişler uzatılabilir ve bu da VM'nin askıya alınmış, işlem dışı bir durumda olmasına neden olur. Bu, SQL Server ile küme işlemleri arasında kira zaman aşımı süresi dolmasına neden olabilir. Kira zaman aşımı sorunlarını gidermeden önce VM geçişiyle ilgili sorunları çözün.

Sanal makine yedekleme çözümleri vm'ler için kapalı kalma süresine de neden olabilir. Konak işletim sisteminde bir VM yedeklemesi alınıyorsa veya konak makinede uzun süren benzer bir bakım yapılıyorsa, kiralama zaman aşımı sorununa yol açabilir. Bunun nedeni, saat çalışırken SQL Server ve küme işlemlerinin askıya alınan VM'de birbirleriyle iletişim kuramamasıdır. Kira zaman aşımı sorunlarını incelemeden önce VM yedeklemelerinin veya diğer bakımların neden olduğu gecikmeleri giderin.