Avatar billede bba Nybegynder
25. maj 2004 - 12:18 Der er 11 kommentarer

MS SQL tager alt hukommelse

Win 2000 server med MS SQL DB installeret tager gradvist alt hukommelse, der er 1GB ram i maskinen.

Hvad er det der tager plads og hvordan begrænses dette ram forbrug, således at maskinen har resurser til andre opgaver ??

/BBA
Avatar billede carpediem Nybegynder
25. maj 2004 - 12:25 #1
Det lyder som om du har noget kode med en memory leak. Så du skal nok kigge "lidt" på de applikationer der bruger din SQL server.
Avatar billede slash Nybegynder
25. maj 2004 - 12:40 #2
har / har haft samme problematik --> patch sql serveren, MS har ekendt der er et problem med mem leak --> du skal køre sp 3a!!!!
Avatar billede bennytordrup Nybegynder
25. maj 2004 - 12:42 #3
Generelt burde det vel også være en mulighed at begrænse SQL Serverens ramforbrug via Enterprise Manager, Egenskaber for serveren, fanen Memory. Giv en begrænset mængde ram (ikke al tilgængelig)
Avatar billede bba Nybegynder
25. maj 2004 - 12:45 #4
Tak for hurtig response !!

Jeg har nu sat en begrænsning for MAX hukommelse.

SPG. hvad gør MS SQL når denne grænse nåes ??

Hvad er det der tager hukommelse ??

/BBA
Avatar billede bennytordrup Nybegynder
25. maj 2004 - 12:47 #5
Uden at være sikker, så vil jeg tro, at den gør som alle andre programmer - bruger swap-filen (med deraf følgende performancedrop).

Jeg har ikke umiddelbart problemer med det mem-leak, slash nævner - kan du uddybe lidt, slash?
Avatar billede slash Nybegynder
25. maj 2004 - 12:51 #6
Avatar billede bennytordrup Nybegynder
25. maj 2004 - 13:00 #7
slash -> tak for info
Avatar billede Techwork Praktikant
27. maj 2004 - 22:36 #8
I Enterprise Manageren er der mulighed for at låse memory forbruget til "Fixed size", således at din SQL ikke "spiser" alt RAM i serveren

Højreklik på serveren (Enterprise Manageren) og vælg "Properties" Under fanebladet "Memory" kan du sætte RAM forbrug til "Fixed Size" f.eks. 512MB.
Avatar billede trer Nybegynder
01. juni 2004 - 13:35 #9
Faktisk så *SKAL* Sql Server allokere al hukommelse på boksen. Det der sker er, når sql server starter laver den en preallokering på al boksens hukommmelse. Derefter bruger den af hukommelsen indtil den når dens reelle behov.

Såfremt boksens fysiske hukommelse ikke er stor nok til at opfylde sql servers behov, så styrer sql server selv hvad der videre sker. SQL Server vil aldrig bruge WIndows swap fil.

I stedet har sql server en intern hukommelsesstyring som er væsentlig mere avanceret - den er nemlig specialiseret database brug hvor Windows naturligvis er generel.

De leaks der har været i SQL Server er i forbindelse med extended stored procedures (som man alligevel ikke bør bruge) og blob håndtering i et specielt memory område.

SQL Server bruger hukommelsen til at lagre sql'er (query planer, kompileret sql etc) samt tabel data, sorteringer etc. De cache områder sikrer at fysisk I/O sænkes da så meget som muligt kan ske i ram.

Hvis du sænker sql servers ret til hukommelse med max mem, så kommer du hurtigt i en situation hvor sql server vælger at køre tingene på disk, dermed får du høj fysisk I/O (specielt hvis du kun kører raid 5 eller enkelt diske) og dårlig performance.

Man bør generelt ikke køre andet end en database server på en boks - at have Web services, exchange etc på samme er reelt set en dødssynd..
Avatar billede bennytordrup Nybegynder
02. juni 2004 - 08:20 #10
trer > Det er ikke korrekt, at SQL Server laver en præallokering af al hukommelse på boksen. Vi har indtil flere servere i firmaet med SQL Server kørende på, og der er *ingen* af disse, der bruger al hukommelse (selv om de står til at snuppe revl og krat).

Men jeg er enig i, at SQL Server i optimal konfiguration på et netværk bør køre på en dedikeret server.
Avatar billede trer Nybegynder
02. juni 2004 - 12:43 #11
bennytordrup> Jeg skrev netop præallokering ikke allokering: Præallokeringen sker ved at SQL Server giver operativsystemet besked om at den kan finde på at snuppe hukommelse, ikke at den faktisk forsøger på det. Hvorfor den bekymrer sig om det, ved jeg faktisk ikke... Muligvis vil Windows så forsøge at friholde hukommelsen til SQL Server eller give den højere prioritet hvis behovet opstår?  Jeg har ikke lige kunnet finde det whitepaper hvor jeg læste om det i sin tid.

Hvorom alt er, SQL Server allokerer ganske rigtigt først hukommelsen når den har behovet, og den frigiver aldrig noget igen. Når SQL Servers drifts-behov er opfyldt vil den ikke allokere mere ram, selvom der er mere fysisk tilstede - og man bør i øvrigt altid forsøge at have 100-200 MB fri til operativsystemet - administration, backupprocesser, virusscan etc.

Har man ikke mulighed for dedikerede db-servere skal man sørge for at sætte maks ram på sql server således at andre server-processer (IIS og lignede snavs) kan arbejde uden at swappe.

Et lille tip: På SQL Server kan man også lige rette Query Memory fra 1 MB til 512 KB - det er den mængde hukommelse sql server starter med at tildele hver query. Er der fx 100 samtidige queries vil man altså som minimum bruge 100 MB. Sænker man Query Memory vil man ofte sænke hukommelsesbehovet generelt, idet mange små queries ikke har behov for 1MB. Minuset er, at sql server så skal tildele hukommelse til de "store" queries - men umiddelbart har jeg ikke set eller målt noget negativt performance impact på den konto.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester