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)
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..
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.
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.
Synes godt om
Ny brugerNybegynder
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.