Puncte:2

Eliberați memorie în Windows Server 2019 pentru instanța SQL Server?

drapel kr

Avem Windows Server 2019 Standard (x64) cu memorie de 64 GB.

Captura de ecran de mai jos arată utilizarea memoriei la 96% cu SQL Server Windows NT rulează și utilizează 344,5 MB.

introduceți descrierea imaginii aici

Acesta este Task Manager după oprirea serviciului SQL Server Windows NT. Utilizarea memoriei a scăzut la 8%.

introduceți descrierea imaginii aici

Încep serviciul SQL Server Windows NT din nou.Managerul de activități este foarte scăzut la 9%, dar serverul Sql utilizează mai multă memorie acum decât atunci când utilizarea memoriei era de 96%. introduceți descrierea imaginii aici

Două întrebări:

  1. Care este problema cu memoria?
  2. Cum pot reduce utilizarea memoriei fără a fi nevoie să repornesc instanța serverului SQL?
drapel cn
„Mi se pare că serverul sql consumă puțină memorie, deoarece toate celelalte sunt consumate de Windows.” 100% nu este Windows.
Puncte:8
drapel ng

Vă lipsește un detaliu important aici: SQL Server este arătat de Managerul de activități ca folosind doar 344,5 MB de RAM, dar de fapt a rezervat mult mai mult, aproape tot, pentru uzul său. Managerul de activități nu va afișa acest lucru. Numerele din Task Manager nu adună de fapt până la 97% din memoria sistemului, deoarece memoria rezervată nu este afișată acolo.

Presupunerea dvs. că aproape toată memoria dvs. este folosită de altceva și, prin urmare, SQL Server nu poate folosi mai mult de 344,5 MB este pur și simplu greșită. Nu merge asa. Managerul de activități poate fi destul de înșelător, aruncați o privire la contoarele de performanță reale.


Actualizați pentru a încerca să explicați mai bine.

SQL Server de proiectare memorează datele în cache și, în timp, va utiliza aproape toată memoria disponibilă în sistem; dar această memorie nu este afișată (sau cel puțin nu toată) în Task Manager, deoarece SQL Server încearcă să joace frumos și îi spune sistemului de operare „Vreau atâta memorie, dar este doar pentru cache, pot supraviețui fără ea, așa că nu ezitați să-l revendicați dacă aveți nevoie”.Acest lucru se traduce prin Task Manager care arată mult mai puțină memorie folosită de SQL Server decât ceea ce a rezervat de fapt.

Aceasta este în nici un caz o problemă; este făcut intenționat și prin proiect. „Problema” pe care o vedeți nu există, doar ceea ce vedeți în Task Manager este înșelător.

Dacă opriți SQL Server, acesta va elibera, desigur, toată memoria alocată, atât cea care este afișată în Task Manager, cât și cea (mult mai mult) care nu este afișată. Când îl porniți din nou, va folosi foarte puțină memorie: utilizarea va crește din nou în timp, pe măsură ce SQL Server încarcă date în memorie și le pune în cache. Dar cea mai mare parte a acestei amintiri, din nou, va fi nu să fie afișat în Managerul de activități, deoarece instrumentul respectiv nu îl poate vedea.

De asemenea, voi adăuga că dacă SQL Server de fapt Necesar memorie, l-ar aloca într-un mod diferit și atunci Managerul de activități ar arăta acest lucru; ați vedea 60 GB de memorie folosită de SQL Server dacă este de fapt necesar atât de multă memorie, în loc să o folosești doar pentru stocarea în cache.

rbhat avatar
drapel kr
Am actualizat întrebarea cu capturi de ecran ale managerului de activități după ce am oprit serviciul server SQL și l-am pornit din nou. De ce memoria este acum la 9% și serverul SQL folosește mai multă memorie acum decât la 96%?
Massimo avatar
drapel ng
După cum am spus, SQL Server *rezervă memorie atunci când rulează*. Această memorie rezervată nu este afișată în Managerul de activități, dar este utilizată de SQL Server. Dacă îl reporniți, toată memoria rezervată este eliberată și utilizarea memoriei scade; va crește din nou în timp și Managerul de activități va continua să nu-l arate *nu*.
Massimo avatar
drapel ng
Ceea ce ați făcut demonstrează de fapt că procesul care v-a folosit toată memoria a fost *exact* SQL Server, altfel repornirea nu ar fi avut niciun efect asupra utilizării memoriei.
drapel in
Ca cea mai bună practică, câtă memorie ar trebui să rămână pentru sistemul de operare?
Puncte:8
drapel cn

Executați SQL Server pe această mașină, deci face ceea ce face SQL Server - își rezervă (aproape) toată memoria disponibilă pe sistemul de operare, astfel încât atunci când primește interogări mari sau alte operațiuni, nu trebuie să aloce RAM , o are deja.

Ai câteva opțiuni.

  1. Accepta aceasta. Dacă rulați doar SQL Server pe această mașină, atunci funcționează conform intenției. Lasă-o în pace.
  2. Capaci. Dacă vi se cere să rulați alte sarcini de lucru pe acest server, puteți limita cantitatea de RAM pe care o va rezerva SQL.

Nu aș face absolut opțiunea 2 decât dacă SQL nu folosește niciodată memoria RAM pe care o absoarbe. Veți ști acest lucru doar dacă măsurați contoare de performanță SQL la nivel de sistem de operare și vizualizări de management dinamic la nivel de SQL.

Imagine de ansamblu, ce problemă încerci de fapt să rezolvi? „Eliberarea memoriei” în acest scenariu este o sarcină inutilă, dacă nu știți că o eliberați pentru a utiliza altceva. Aveți probleme de performanță SQL și, dacă da, cum ați stabilit că sunteți blocat de RAM în loc de, de exemplu, un design prost al indexului sau interogări neoptimizate?

La ce te conduc eu este utilizați monitorizarea adecvată pentru a diagnostica problemele de performanță. Trebuie să știți multe despre SQL și o cantitate decentă despre Windows pentru a face acest lucru. Dacă nu sunteți DBA, angajați unul sau obțineți unul pe un contract sau colaborați cu furnizorul dvs. de software dacă acesta este SQL pentru un produs achiziționat. Dacă este ceva ce compania ta a scris singură fără un DBA, du-te să ia unul.

https://docs.microsoft.com/en-us/sql/relational-databases/performance-monitor/monitor-memory-usage?view=sql-server-ver15

În mod implicit, o instanță SQL Server poate consuma în timp cea mai mare parte memoria disponibilă a sistemului de operare Windows pe server. Odata ce memoria este dobândită, nu va fi eliberată decât dacă presiunea memoriei este detectat. Acest lucru este prin proiect și nu indică o scurgere de memorie în proces SQL Server.

/Editare pe baza editării dvs.:

Deși nu sunt administrator de sistem, mi se pare că serverul sql este consumând puțină memorie pentru că totul este consumat de Windows.

Aproape sigur te înșeli aici. După cum am menționat mai sus, serverul SQL va aloca aproape toată memoria RAM de sistem în timp. Cantitatea de RAM utilizată de procesul sqlserver.exe NU vă spune câtă RAM a alocat de fapt SQL. DMV și perfcounters vă vor spune asta.

Folosesc SSMS pentru a lucra cu bazele de date și observ direct cât de lent totul este. Chiar și lucruri simple, cum ar fi deschiderea panoului de mese pentru a le vedea toate mesele îmi iau ceva timp și uneori expiră.

Nu rulați asta pe serverul SQL, rulați-l de pe stația dvs. de lucru.

rbhat avatar
drapel kr
Vreau să reduc memoria serviciilor Windows, astfel încât serverul sql să consume mai multă memorie. Nu ar trebui să depășească 97% tot timpul.
mfinni avatar
drapel cn
Nu, chiar nu. Serviciile Windows care vin cu sistemul de operare rulează; lasă-i singuri.
rbhat avatar
drapel kr
Vrei să spui că este normal ca antetul coloanei de memorie al managerului de activități să fie întotdeauna roșu?
mfinni avatar
drapel cn
Citiți articolul pe care l-am legat sau pur și simplu citiți paragraful relevant pe care l-am citat în răspunsul meu.
rbhat avatar
drapel kr
Am actualizat întrebarea cu capturi de ecran ale managerului de activități după ce am oprit serviciul server SQL și l-am pornit din nou. De ce memoria este acum la 9% și serverul SQL folosește mai multă memorie acum decât la 96%?
rbhat avatar
drapel kr
FYI rulez SSMS de la stația mea de lucru.

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.