sql >> Databasteknik >  >> RDS >> Sqlserver

Buffertcache:Vad är det och hur påverkar det databasens prestanda?

I SQL Server är buffertcachen minnet som gör att du snabbt kan söka efter data som du använder ofta. När data skrivs till eller läses från en SQL Server-databas, kopierar bufferthanteraren den till buffertcachen (alias buffertpoolen). När den är full, flyttas äldre eller mindre ofta använda datasidor till hårddisken.

Varför behöver jag övervaka buffertcachen?

Minnesanvändning kan ha en betydande inverkan på prestandan. När det inte finns tillräckligt med minne rensas datasidor ofta från buffertcachen. Detta saktar ner frågorna eftersom SQL Server måste gå till disken för att hitta datasidan, återställa den till buffertcachen och sedan läsa sidan innan den kan returnera frågeresultat.

Det finns många anledningar till att frågor börjar köras långsamt. Men om du vill utesluta minnesproblem, titta på vad som händer inuti buffertcachen. En titt inuti den kommer att identifiera vilken databas, tabell eller index som stör minnet och sätter press på bufferten.

För att se vilken databas som förbrukar mest minne, använd frågan:

SELECTCASE database_idWHEN 32767 THEN 'ResourceDb'ELSE db_name(database_id)END AS database_name, COUNT(1)/128 AS megabytes_in_cacheFROM sys.dm_os_buffer_descriptorsGROUP BY DB_NAME(databas_id) ,megachebytesSCER;
 För att identifiera tabellen eller indexet som förbrukar mest minne, kör den här frågan i databasen du vill inspektera:

VÄLJ COUNT(1)/128 AS megabytes_in_cache,name ,index_idFROM sys.dm_os_buffer_descriptors AS bdINNER JOIN(SELECT object_name(object_id) AS name,index_id,allocation_unit_idFROM sys.allocation_units AS auINNER_partitions AS auINNER JOIN .hobt_idAND (au.type =1 ELLER au.type =3)UNION ALLSELECT object_name(object_id) AS name,index_id, allocation_unit_idFROM sys.allocation_units AS auINNER JOIN sys.partitions AS pON au.container_id =p.au.partition_id =.au. ) AS objON bd.allocation_unit_id =obj.allocation_unit_idWHERE database_id =DB_ID()GROUP BY name, index_idORDER BY megabytes_in_cache DESC;

Hantera minne med mätvärden

Även om det är till hjälp att stickkontrollera databaser och index för överanvändning av minne, är spårning av buffertcache-statistik verkligen det bästa sättet att identifiera och lösa prestandaproblem som orsakas av internt tryck på minnet.

Här är de fem bästa mätvärdena att övervaka för att förbättra minnesrelaterade prestandaproblem:

1. Buffer Cache Hit Ratio

  • Detta mått visar hur SQL Server använder buffertcache
  • Träffkvoten identifierar procentandelen sidförfrågningar som slutfördes av datasidor från buffertcachen jämfört med alla datasidaförfrågningar
  • Sidor som inte finns i buffertcachen läses från disken, vilket är mycket långsammare
  • Det ideala buffertcacheförhållandet är 100 (dvs SQL Server läser alla sidor från buffertcachen och ingen från disken)
  • Rekommenderat buffertcachevärde är större än 90

2. Sidans förväntade livslängd (PLE)

  • Sidlivslängd mäter hur länge (i sekunder) en datasida stannar i buffertcachen
  • Ju längre PLE, desto större är chansen att SQL Server läser sidorna från buffertcachen och inte behöver gå till disken
  • Om det inte finns tillräckligt med minne töms datasidor från buffertcachen oftare för att frigöra utrymme för nya sidor
  • Historiskt sett, när systemen hade mycket mindre minne än nu, var ett "normalt" PLE-värde 300 sekunder
  • Idag används en formel för att bestämma "bra" PLE:Sidans livslängd =300 sekunder för varje 4 GB RAM-minne på din server
  • PLE bör förbli stabil om den övervakas över tid
  • Snabb, frekvent minskning tyder på minnesproblem
  • En nedgång på mer än 50 % bör undersökas omedelbart

3. Sidläsning/sek (servernivå)

  • Detta mått visar hur många fysiska läsningar (d.v.s. läsningar från disk) som inträffade under en sekund över alla databaser på en instans
  • Fysisk läsning är dyra och långsam
  • Minska fysiska läsningar genom att använda en större datacache, intelligenta index och mer effektiva frågor, eller genom att ändra databasdesignen
  • Det rekommenderade värdet är mindre än 90
  • Ett värde högre än 90 indikerar otillräckligt minne och problem med indexering

4. Sida skriver/Sek

  • Detta mått visar antalet gånger sidor som skrevs till disk på servernivå på en sekund
  • Det rekommenderade värdet är mindre än 90

5. Pages Input/Sec och Pages Out/Sec (minnesräknare)

  • Sidinmatning/sek är antalet sidor som tas in från disken varje sekund
  • Sidutgång/sek är antalet sidor som skrivs till disken varje sekund för att göra plats i buffertcachen
  • Sidor/sek är summan av inmatade sidor/sek och sidor utdata/sek
  • Om värdet för sidor/sek alltid är mer än 50 krävs ytterligare utredning

En sund buffertcache är en viktig komponent för att optimera SQL Server-frågehastighet. Även om minnesproblem bara är en av flera faktorer som kan sakta ner frågesvar, är de ganska lätta att identifiera och lösa. Att spåra dessa fem nyckelmått kan hjälpa dig att behålla datasidor i buffertpoolen längre så att SQL Server inte behöver slösa tid på att söka på disken innan du returnerar frågeresultat.


  1. Vad är databasdelning?

  2. SQL - Call Stored Procedure för varje post

  3. SQL FOREIGN KEY Begränsning:The Ultimate, Easy Guide för nybörjare

  4. SQLite MAX