Puncte:2

Cum să depanez cauza planului meu de întreținere a backupurilor bazei de date care rulează brusc extrem de lentă?

drapel sa

(Postat inițial pe DBA.StackExchange.com, dar închis, sperăm că mai relevant aici.)

Alexandru și cel Groaznic, îngrozitor, nimic bun, foarte rău... copii de rezervă.

Pregatirea:

Am un on-premise SQL Server 2016 Standard Edition instanță care rulează pe a mașină virtuală de la VMWare.

@@Versiune:

Microsoft SQL Server 2016 (SP2-CU17) (KB5001092) - 13.0.5888.11 (X64) 19 martie 2021 19:41:38 Copyright (c) Microsoft Corporation Standard Ediție (64 de biți) pe Windows Server 2016 Datacenter 10.0 (Build 14393: ) (Hypervisor)

Serverul în sine este alocat în prezent 8 procesoare virtuale, are 32 GB memorie, și toate discurile sunt NVM-uri care ocolesc 1 GB/sec de I/O. Bazele de date în sine trăiesc pe unitatea G:, iar copiile de rezervă sunt stocate separat pe unitatea P:. Dimensiunea totală a tuturor bazelor de date este de aproximativ 500 GB (înainte de a fi comprimate în fișierele de rezervă).

Planul de întreținere rulează o dată pe noapte (în jurul orei 22:30) pentru a face o copie de rezervă completă pe fiecare bază de date de pe server. Nimic altceva ieșit din comun nu rulează pe server și nici altceva nu rulează la acel moment în special. Planul de alimentare de pe server este setat la „Echilibrat” (și „Opriți hard diskul după” este setat la 0 minute, adică nu îl opriți niciodată).

Ce s-a întâmplat:

În ultimul an sau cam asa ceva, durata totală de execuție a lucrării planului de întreținere a durat aproximativ 15 minute total de completat. De săptămâna trecută, a crescut vertiginos, ajungând la aproximativ 40 de ori mai mult, aproximativ 15 ore a termina.

Singurul lucru de care știu că am schimbat în aceeași zi în care planul de întreținere a încetinit a fost că următoarele actualizări Windows au fost instalate pe mașină înainte de rularea planului de întreținere:

Actualizări Windows

  1. KB890830
  2. KB5004752
  3. KB5005043
  4. VMWare - SCSIAdapter - 1.3.17.0
  5. VMWare - Display - 8.17.2.14

Avem, de asemenea, o altă instanță SQL Server furnizată în mod similar pe o altă VM care a suferit aceleași actualizări Windows și, ulterior, a experimentat backup-uri mai lente. Crezând că actualizările Windows au fost cauza directă, le-am anulat complet, iar planul de întreținere a copiilor de rezervă este încă extrem de lent oricum. În mod ciudat, restaurarea copiilor de rezervă pentru o anumită bază de date are loc foarte rapid și utilizează aproape 1 GB/sec de I/O pe NVM-urile.

Lucruri pe care le-am încercat:

Când folosesc sp_whoisactive de la Adam Mechanic, am identificat că Tipurile de Ultima așteptare ale proceselor de backup indică întotdeauna o problemă de performanță a discului.Întotdeauna văd BACKUPBUFFER și BACKUPIO tipuri de așteptare, pe lângă ASYNC_IO_COMPLETION:

sp_whoisactive

Când vă uitați la Monitorul resurselor de pe server însuși, în timpul copierilor de rezervă, secțiunea I/O pe disc arată că I/O totală utilizată este de numai aproximativ 14 MB/sec (cel mai mult pe care l-am văzut vreodată de când a apărut această problemă este 30 MB/sec):

Monitorul resurselor

După ce am dat peste acest util Brent Ozar articol despre utilizarea DiskSpd, am încercat să îl rulez eu însumi sub parametri similari (doar scăzând numărul de fire la 8 deoarece am 8 procesoare virtuale pe server și setând scrierile la 50%). Aceasta este comanda exactă diskspd.exe -b2M -d60 -o32 -h -L -t8 -W -w50 „C:\Utilizatori\...\Desktop\Microsoft DiskSpd\Test\LargeFile.txt”. Am folosit un fișier text pe care l-am generat manual, care are puțin sub 1 GB. Cred că I/O pe care l-a măsurat pare OK, dar latența discului arătau niște numere ridicole:

Rezultate DiskSpd 1

Rezultate DiskSpd 2

Rezultatele DiskSpd par literalmente incredibile. După ce am citit în continuare, am dat peste o interogare de la Paul Randall care returnează valorile de latență a discului pe bază de date. Acestea au fost rezultatele:

Paul Randal - Măsuri de latență a discului

Cea mai slabă latență de scriere a fost de 63 de milisecunde, iar cea mai proastă latență de citire a fost de 6 milisecunde, așa că pare a fi o mare variație față de DiskSpd și nu pare suficient de groaznică pentru a fi cauza principală a problemei mele. Verificând lucrurile în continuare, am rulat câteva contoare PerfMon pe serverul însuși, per acest articol Microsoft, iar acestea au fost rezultatele:

Rezultate PerfMon

Nimic extraordinar aici, valoarea maximă a tuturor contoarelor pe care le-am măsurat a fost 0,007 (care cred că sunt milisecunde?). În cele din urmă, am pus echipa mea de infrastructură să verifice valorile de latență a discului pe care le înregistra VMWare în timpul lucrării de backup și acestea au fost rezultatele:

Latența discului VMWare și jurnalele I/O

Se pare că, în cel mai rău caz, a existat un vârf de latență de aproximativ 200 de milisecunde în jurul miezului nopții, iar cea mai mare I/O a fost de 600 KB/sec (ceea ce nu prea înțeleg, deoarece Monitorul resurselor arată că backup-urile folosesc cel puțin aproximativ 14 MB/sec de I/O).

Alte lucruri pe care le-am încercat:

Tocmai am încercat să refac una dintre bazele de date mai mari (este de aproximativ 250 GB) și a durat doar aproximativ 8 minute în total pentru restaurare. Apoi am încercat să alerg DBCC CHECKDB pe el și a durat un total de 16 minute pentru a rula (nu sunt sigur dacă acest lucru este normal), dar Resource Monitor a arătat probleme similare de I/O (cel mai mare I/O pe care l-a folosit vreodată a fost de 100 MB/s), fără a rula nimic altceva:

Monitor de resurse pentru DBCC CHECKDB

Iată rezultatele sp_whoisactive când am alergat prima dată DBCC CHECKDB și apoi, după ce a fost finalizat cu 5%, observați că timpul estimat rămas a crescut cu aproximativ 5 minute, chiar și după ce a fost deja terminat cu 5%.

Start: sp_whoisactive DBCC CHECKDB Start

5% gata: sp_whoisactive DBCC CHECKDB 5% Gata

Bănuiesc că acest lucru este normal, deoarece este doar o estimare, iar 16 minute nu pare prea rău pentru o bază de date de 250 GB (deși nu sunt sigur dacă este normal), dar din nou I/O-ul a ajuns la maxim. aproximativ 10% din capabilitățile unității, fără a rula nimic altceva pe server sau pe instanța SQL.

Acestea sunt rezultatele de DBCC CHECKDB, nu au fost raportate erori.

De asemenea, m-am confruntat cu probleme ciudate de încetinire cu MICĂ comanda. Tocmai am încercat MICĂ baza de date care avea 5% spațiu de eliberat (aproximativ 14 GB). A durat doar aproximativ 1 minut pentru a finaliza 90% din MICĂ:

Se micsoreaza rapid la 90%

Aproximativ 5 minute mai târziu, și este încă blocat la același procent de finalizare, iar copiile de rezervă ale jurnalului de tranzacții (care se termină de obicei în 1-2 secunde) au fost în dispută timp de aproximativ 30 de secunde:

Se micsoreaza blocat la 90%

15 minute mai târziu și MICĂ tocmai se termină, în timp ce copiile de rezervă ale jurnalului de tranzacții sunt încă în disputa de aproximativ 6 minute și sunt finalizate doar în proporție de 50%. Cred că au terminat imediat după aceea, deoarece MICĂ terminat. Tot timpul în care Monitorul resurselor a arătat că I/O suge încă:

Contractare gata

Monitor de resurse pentru Shrink

Apoi am primit o eroare cu MICĂ comanda când s-a terminat:

Eroare de micșorare

am reîncercat MICĂ din nou și a rezultat în același rezultat exact ca mai sus.

Apoi am încercat să scriptez manual o copie de rezervă T-SQL într-un fișier de pe unitatea P: și care a funcționat lent, la fel ca și sarcina de rezervă a planului de întreținere:

Backup manual T-SQL

Am ajuns să-l anulez după aproximativ 3 minute și s-a derulat imediat înapoi.

Rezumat:

Întâmplător, sarcina planului de întreținere a backupurilor a devenit de aproximativ 40 de ori mai lentă (de la 15 minute la 15 ore) în fiecare noapte, imediat după instalarea actualizărilor Windows. Revenirea acelor actualizări Windows nu a rezolvat problema. SQL Server Wait Types, Resource Monitor și Microsoft DiskSpd indică o problemă de disc (I/O în special), dar toate celelalte măsurători din interogarea lui Paul Randall, PerfMon și VMWare Logs nu raportează nicio problemă cu discurile. Restaurarea copiilor de rezervă pentru o anumită bază de date este rapidă și utilizează aproape 1 GB/sec I/O. ma scarpin in cap...

rvsc48 avatar
drapel gh
Alte zone pe care le-ați putea verifica: Prea multe fișiere jurnal virtuale (puteți căuta pe Google), rulați valori/interogări I/O pe mașina gazdă VMWare, există ceva în jurnalul de evenimente Windows pe server și pe gazdă și, există ceva relevant în jurnalul de erori Sql Server (exec xp_readerrorlog), mai ales în timpul în care rulează backup-ul? Uneori, încetinirea I/O, dacă apare, este raportată în jurnalul de erori de server sql. Rezultatele interogării lui Randall, dacă îmi amintesc, arată bine în acea latență sub 100.
Puncte:0
drapel sa

În acest caz, am avut într-adevăr o problemă cu discul și nu a fost o problemă internă pentru SQL Server, pentru această VM anume. De fapt, a ajuns să fie un caz de eroare pe care l-am întâlnit cu Veeam și VMWare.

Pentru a rezuma înțelegerea mea despre ceea ce sa întâmplat, se pare că backup-urile noastre Veeam nu au fost recunoscute ca fiind finalizate de VMWare. Așadar, în fiecare zi, când era timpul să facă backup pentru server, VMWare îi instruia Veeam să facă din nou backup în ziua precedentă, ceea ce s-a transformat în această problemă în creștere cumulativă pe parcursul a două săptămâni. (Sunt sigur că am măcelărit această explicație, dar cam asta e cât de mult știu eu.)

Veeam / VMWare a trebuit să ștergă fiecare fișier instantaneu, care fișierul din fiecare zi era mai mare decât cel anterior, așa că a durat aproximativ 26 de ore pentru a se termina suportul lor de nivel 3. După aceea, VM-ul a funcționat din nou bine. Aparent, aceasta nu este o problemă neobișnuită, conform suportului lor tehnic.

Ne pare rău, aceasta a fost o problemă foarte specifică și probabil că nu va ajuta pe mulți alții, dar sperăm că va fi.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.