Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:SQL Server
Szczegóły
| Attribute | Wartość |
|---|---|
| Nazwa produktu | SQL Server |
| Identyfikator zdarzenia | 19407 |
| Źródło zdarzenia | MSSQLSERVER |
| Składnik | SQLEngine |
| Nazwa symboliczna | HADR_AG_LEASE_EXPIRED |
| Tekst wiadomości | Umowa dzierżawy między grupą dostępności „%.*ls" a klastrem przełączania awaryjnego Windows Server wygasła. Wystąpił problem z łącznością między wystąpieniem programu SQL Server i klastrem trybu failover systemu Windows Server. Aby ustalić, czy grupa dostępności poprawnie przełącza się w tryb failover, sprawdź odpowiedni zasób grupy dostępności w klastrze trybu failover systemu Windows Server. |
Explanation
Błąd 19407 jest zgłaszany w dzienniku błędów programu SQL Server po utracie komunikacji między programem SQL Server i klastrem trybu failover systemu Windows Server. Zazwyczaj występuje akcja naprawcza — przejście w tryb failover do innego węzła Zawsze włączone.
Dzierżawa to mechanizm komunikacji oparty na czasie, który odbywa się między programem SQL Server a procesem klastra trybu failover systemu Windows Server (WSFC), w szczególności procesem RHS.EXE. Dwa procesy okresowo komunikują się ze sobą, aby upewnić się, że drugi proces jest uruchomiony i odpowiada. Ta komunikacja odbywa się przy użyciu obiektów zdarzeń systemu Windows i zapewnia, że tryb failover zasobu grupy dostępności nie występuje bez znajomości usługi WSFC. Jeśli jeden z procesów nie odpowiada na komunikację dzierżawy na podstawie wstępnie zdefiniowanego okresu dzierżawy, wystąpi limit czasu dzierżawy. Aby uzyskać szczegółowe informacje, zobacz Mechanika i wskazówki dotyczące limitów czasu dzierżawy, klastra i kontroli kondycji dla zawsze włączonych grup dostępności. Zobacz również , jak to działa: Zawsze włączony limit czasu dzierżawy programu SQL Server.
Przyczyny
Ponieważ zdarzenia systemu Windows są lekkimi obiektami synchronizacji, istnieje stosunkowo mała liczba czynników zewnętrznych, które wpływają na nie negatywnie. Typowe problemy, które mogą prowadzić do przekroczenia limitu czasu dzierżawy, obejmują problemy dotyczące całego systemu. Oto lista możliwości, które mogą spowodować wygaśnięcie dzierżawy i spowodować ponowne uruchomienie lub przejście w tryb failover:
Wysokie użycie procesora CPU w systemie (blisko 100%).
Warunki braku pamięci — mała ilość pamięci wirtualnej i/lub jeden z procesów jest odsyłany.
WSFC przechodzi w tryb offline z powodu utraty kworum. Aby rozwiązać problemy z utratą kworum, zobacz Konfigurowanie kworum i odzyskiwaniepo awarii WSFC za pomocą wymuszonego kworum (SQL Server).
Ograniczanie przepustowości maszyny wirtualnej wpływa na wydajność i powoduje wygaśnięcie dzierżawy.
Proces programu SQL Server nie odpowiada podczas generowania dużego zrzutu pamięci. Aby uzyskać więcej informacji na temat generowania zrzutu stosu, zobacz Wpływ generowania zrzutu. Generowanie zrzutu stosu może wystąpić z następujących powodów:
- Harmonogram niezwiązany z obsługą
- Przekroczenie limitu czasu zatrzaśnięć
- Zakleszczone harmonogramy
- Nierozwiązany impas
Akcja użytkownika
Rozwiązywanie problemów z wysokim użyciem procesora CPU
Otwórz Menedżera zadań.
Przejdź do karty Wydajność i sprawdź, czy procesory są blisko lub na poziomie 100% wykorzystania.
Przejdź do karty Procesy i sortuj procesy według kolumny procesora CPU w kolejności malejącej, wybierając kolumnę procesora CPU .
Zidentyfikuj proces, który używa większości procesora CPU, i współpracuj nad zrozumieniem i rozwiązaniem przyczyny, dla którego powoduje wysokie użycie procesora CPU.
Jeśli proces jest programem SQL Server, zobacz Rozwiązywanie problemów z wysokim użyciem procesora CPU w programie SQL Server.
Aby sprawdzić użycie procesora CPU w systemie, możesz użyć następującego skryptu programu PowerShell.
Get-Counter -Counter "\Processor(_Total)\% Processor Time" -SampleInterval 5 -MaxSamples 30 | Select-Object -ExpandProperty CounterSamples | Select-Object TimeStamp, Path, CookedValue
Rozwiązywanie problemów z małą ilością pamięci
Jeśli w systemie występują wystąpienia małej ilości pamięci wirtualnej lub fizycznej, proces hosta zasobów klastra lub programu SQL Server (RHS.exe) może zostać udostępniony. Jeśli proces jest podzielony na dysk, nie jest wykonywany aktywnie, a limit czasu dzierżawy może zostać osiągnięty przez ilość dostępnej pamięci czasowej, a wirtualne bajty procesu są stronicowane z powrotem do pamięci fizycznej. Niska ilość pamięci wirtualnej może być spowodowana przez aplikacje, sterowniki lub system operacyjny zużywających całą pamięć w systemie. Aby rozwiązać ten problem, użyj następujących metod:
Sprawdź dziennik zdarzeń aplikacji lub systemu pod kątem błędów, takich jak
Your system is low on virtual memory. Ten błąd może być nawet wyświetlany na ekranie, jeśli zalogowałeś się do serwera.Otwórz Menedżera zadań, wybierz pozycję Wydajność —> pamięć, aby sprawdzić, czy jest zużywana blisko 100% procent pamięci. Użyj karty Szczegóły, aby zidentyfikować wszystkie aplikacje, które mogą być największymi użytkownikami pamięci.
Możesz też użyć monitora wydajności i monitorować te liczniki w czasie:
- Process\Working Set — aby sprawdzić użycie pamięci poszczególnych procesów
- Memory\Available MBytes — aby sprawdzić ogólne użycie pamięci w systemie
Możesz użyć następującego skryptu programu PowerShell, aby zidentyfikować ogólne użycie pamięci we wszystkich procesach i dostępnej pamięci w systemie. Jeśli chcesz uzyskać użycie pamięci poszczególnych procesów, zmień go
"\Process(_Total)\Working Set"na"\Process(*)\Working Set".$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 } }Jeśli zidentyfikujesz określone aplikacje, które zużywają dużą ilość pamięci, rozważ zatrzymanie lub przeniesienie tych aplikacji w innym systemie lub kontrolowanie użycia pamięci.
Jeśli program SQL Server zużywa duże ilości pamięci, możesz rozważyć użycie
sp_configure 'max server memory'go w celu obniżenia użycia pamięci.
Zbieranie danych monitora wydajności dla procesora CPU, pamięci i dysku
Ten skrypt programu PowerShell ułatwia zbieranie danych monitora wydajności (PerfMon) w odniesieniu do procesora CPU, pamięci i dysku. Skrypt został zaprojektowany tak, aby był elastyczny, co umożliwia dostosowanie zarówno dla domyślnych, jak i nazwanych wystąpień programu SQL Server.
#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
Zmniejszanie lub unikanie dużych zrzutów pamięci w procesie programu SQL Server lub klastra
W niektórych przypadkach proces programu SQL Server może napotkać wyjątki, aseracje, problemy z harmonogramem itd. W takich przypadkach program SQL Server domyślnie wyzwala SQLDumper.exe proces w celu wygenerowania minidump z pamięcią pośrednią. Jeśli jednak generowanie zrzutu trwa długo, proces programu SQL Server przestaje odpowiadać, co może spowodować przekroczenie limitu czasu dzierżawy. Typowe przyczyny zrzutu pamięci mogą zająć dużo czasu:
- duże użycie pamięci przez proces
- podsystem we/wy, w którym zrzut jest zapisywany wolno
- ustawienie domyślne zostało zmienione z mini zrzutu na filtrowany lub pełny zrzut
Aby uniknąć przekroczenia limitu czasu dzierżawy, wykonaj następujące kroki w systemach grupy dostępności:
- Zwiększ limit czasu sesji, na przykład 120 sekund dla wszystkich replik
- Zmiana automatycznego trybu failover wszystkich replik na ręczne przełączenie w tryb failover
- Zwiększ wartość LeaseTimeout do 60 000 ms (60 sekund) i zmień wartość HealthCheckTimeout na 90 000 ms (90 sekund)
Aby uzyskać więcej informacji, zobacz Używanie narzędzia Sqldumper.exe do generowania pliku zrzutu w programie SQL Server.
Sprawdzanie konfiguracji maszyny wirtualnej pod kątem nadmiernej aprowizacji
Jeśli używasz maszyny wirtualnej, upewnij się, że nie masz nadmiernej aprowizacji ani nadmiernego przydziału procesorów CPU i zasobów pamięci. Nadmierna aprowizacja procesorów CPU lub pamięci może spowodować, że system operacyjny gościa zabraknie zasobów i pokaże te same problemy opisane wcześniej — wysokie użycie procesora CPU i mała ilość pamięci. Często, jeśli wyświetlasz elementy w systemie operacyjnym gościa, wyjaśniając, dlaczego brakuje zasobów obliczeniowych, jest trudne, ponieważ dzieje się to poza samą maszyną wirtualną. Nadmierne zatwierdzanie zasobów może spowodować tymczasowe wstrzymanie przetwarzania, co może spowodować przekroczenie limitu czasu dzierżawy. Aby uzyskać więcej informacji na temat rozwiązywania problemów z nadmiernym zatwierdzaniem, zobacz Rozwiązywanie problemów z wydajnością maszyn wirtualnych ESX/ESXi (2001003) i Wirtualizacja — nadmierne zatwierdzanie pamięci i wykrywanie jej na maszynie wirtualnej.
Sprawdzanie migracji lub tworzenia kopii zapasowej maszyny wirtualnej
Funkcje Hyper-V, VMware i inne rozwiązania maszyn wirtualnych oferują możliwość przenoszenia maszyn wirtualnych między maszynami-hostami (Hyper-V Migracja na żywo i VMware vMotion). W większości przypadków te technologie zapewniają niemal natychmiastową migrację. Jeśli jednak występują wąskie gardła sieci lub maszyny hosta, te migracje mogą zostać przedłużone, co powoduje, że maszyna wirtualna znajduje się w stanie wstrzymania i braku działania. Może to prowadzić do wygaśnięcia limitu czasu dzierżawy między programem SQL Server a procesami klastra. Rozwiąż wszelkie problemy z migracją maszyny wirtualnej przed rozwiązaniem problemów z przekroczeniem limitu czasu dzierżawy.
Rozwiązania do tworzenia kopii zapasowych maszyn wirtualnych mogą również spowodować przestój maszyn wirtualnych. Jeśli kopia zapasowa maszyny wirtualnej jest wykonywana w systemie operacyjnym hosta lub na maszynie hosta wykonywana jest podobna konserwacja, która zajmuje dużo czasu, może to prowadzić do problemu z przekroczeniem limitu czasu dzierżawy. Przyczyną jest to, że podczas tykania zegara procesy programu SQL Server i klastra nie mogą komunikować się ze sobą na zawieszonej maszynie wirtualnej. Rozwiąż wszelkie opóźnienia spowodowane przez kopie zapasowe maszyn wirtualnych lub inną konserwację przed sprawdzeniem problemów z limitem czasu dzierżawy.