sql >> Database teknologi >  >> RDS >> Sqlserver

Buffer cache:Hvad er det, og hvordan påvirker det databasens ydeevne?

I SQL Server er buffercachen den hukommelse, der giver dig mulighed for hurtigt at forespørge ofte tilgåede data. Når data skrives til eller læses fra en SQL Server-database, kopierer bufferadministratoren dem til buffercachen (også kaldet bufferpuljen). Når den er fuld, flyttes ældre eller sjældnere brugte datasider til harddisken.

Hvorfor skal jeg overvåge buffercachen?

Hukommelsesbrug kan have en betydelig indflydelse på ydeevnen. Når der ikke er tilstrækkelig hukommelse, bliver datasider ofte slettet fra buffercachen. Dette gør forespørgsler langsommere, fordi SQL Server skal gå til disken for at finde datasiden, gendanne den til buffercachen og derefter læse siden, før den kan returnere forespørgselsresultater.

Der er mange grunde til, at forespørgsler begynder at køre langsomt. Men hvis du vil udelukke hukommelsesproblemer, så se på, hvad der foregår inde i buffercachen. Et kig inde i den vil identificere, hvilken database, tabel eller indeks der tømmer hukommelsen og lægger pres på bufferen.

For at se, hvilken database der bruger mest hukommelse, skal du bruge forespørgslen:

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(database_id) ,megachebytesSCEN;

For at identificere den tabel eller det indeks, der bruger mest hukommelse, skal du køre denne forespørgsel i den database, du gerne vil inspicere:

VÆLG 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 JOIN AS auINNER_id. .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 =P.au.partition_id =OG ) AS objON bd.allocation_unit_id =obj.allocation_unit_idWHERE database_id =DB_ID()GROUP BY name, index_idORDER BY megabytes_in_cache DESC;

Administrer hukommelse med metrics

Selvom det er nyttigt at stikprøve databaser og indekser for overforbrug af hukommelse, er sporing af buffercache-metrics virkelig den bedste måde at identificere og løse ydeevneproblemer forårsaget af internt pres på hukommelsen.

Her er de fem bedste målinger, der skal overvåges for at forbedre hukommelsesrelaterede præstationsproblemer:

1. Buffer Cache Hit Ratio

  • Denne metric viser, hvordan SQL Server bruger buffercache
  • Trafforholdet identificerer procentdelen af ​​sideanmodninger, der blev fuldført af datasider fra buffercachen versus alle datasideanmodninger
  • Sider, der ikke findes i buffercachen, læses fra disken, hvilket er meget langsommere
  • Det ideelle buffercacheforhold er 100 (dvs. SQL Server læser alle sider fra buffercachen og ingen fra disken)
  • Den anbefalede buffercacheværdi er større end 90

2. Sidelevetid (PLE)

  • Forventet sidelevetid måler, hvor længe (i sekunder) en dataside forbliver i buffercachen
  • Jo længere PLE er, jo større er chancen for, at SQL Server læser siderne fra buffercachen og ikke behøver at gå til disken
  • Hvis der ikke er nok hukommelse, tømmes datasider fra buffercachen oftere for at frigøre plads til nye sider
  • Historisk set, da systemer havde langt mindre hukommelse end nu, var en "normal" PLE-værdi 300 sekunder
  • I dag bruges en formel til at bestemme "god" PLE:Sidelevetid =300 sekunder for hver 4 GB RAM på din server
  • PLE bør forblive stabil, hvis den overvåges over tid
  • Hurtigt, hyppigt fald indikerer hukommelsesproblemer
  • Et fald på mere end 50 % bør undersøges med det samme

3. Sidelæsninger/sek. (serverniveau)

  • Denne metric viser, hvor mange fysiske læsninger (dvs. læsninger fra disk) der fandt sted på et sekund på tværs af alle databaser på en instans
  • Fysisk læsning er dyre og langsomme
  • Reducer fysiske læsninger ved at bruge en større datacache, intelligente indekser og mere effektive forespørgsler eller ved at ændre databasedesignet
  • Den anbefalede værdi er mindre end 90
  • En værdi højere end 90 indikerer utilstrækkelig hukommelse og problemer med indeksering

4. Sideskrivning/Sek

  • Denne metric viser antallet af gange sider, der blev skrevet til disk på serverniveau på et sekund
  • Den anbefalede værdi er mindre end 90

5. Pages Input/Sec og Pages Out/Sec (Hukommelsestællere)

  • Sideinput/sek. er antallet af sider, der hentes fra disken hvert sekund
  • Sideoutput/sek. er antallet af sider skrevet til disken hvert sekund for at gøre plads i buffercachen
  • Sider/sek. er summen af ​​siderinput/sek. og sideroutput/sek.
  • Hvis værdien for sider/sek. konsekvent er mere end 50, er der behov for yderligere undersøgelse

En sund buffercache er en vigtig komponent i optimering af SQL Server-forespørgselshastighed. Selvom hukommelsesproblemer blot er en af ​​flere faktorer, der kan bremse forespørgselssvar, er de ret nemme at identificere og løse. Sporing af disse fem nøglemålinger kan hjælpe dig med at holde datasider i bufferpuljen længere, så SQL Server ikke behøver at spilde tid på at søge på disken, før de returnerer forespørgselsresultater.


  1. Gyldige formatstrengerstatninger for SQLite Strftime()-funktionen

  2. Sådan får du den aktuelle dato i SQLite

  3. Brug af SELECT INTO OUTFILE i MySQL

  4. Sådan forårsrenser du din database