Avatar billede tuctoh Nybegynder
22. marts 2004 - 18:14 Der er 34 kommentarer og
2 løsninger

Vigtighed af ram - hvor mange skal jeg have?

Hej,

Jeg står og skal opgradere min server. Serveren kører windows 2K Server, med MS SQL server.
Serveren bliver brugt til både SQL Server, samt IIS. SQLen tager vel 90% af CPU ressourcerne, så er klart det mest krævende.

Jeg har samlet set omkring 30 tabeller, hvor den største er på lidt over en million records, og samlet fylder næsten 1.5 gigabyte.

Hvor mange RAM bør jeg have? Hvis jeg køber 2 (måske 4) gigabyte, vil SQL Server så smide hele tabellen i RAMen, og derved formindske acccess tiden, eller vil det være så minimal at det er spild af penge?
Hvis MS SQL server ikke vil bruge rammen til det, vil jeg nøjes med 1 gigabyte ram, som jeg har i min server lige nu.

Håber i kan vejlede mig; vil helst ikke smide penge ud på ram hvis det rent faktisk ikke vil hjælpe det mindste på performance. Det skal lige nævnes at den nye server bliver en 3GHZ P4, og at jeg forventer at kunne udnytte denne server næsten fuldt ud (hovedsageligt fra databasen). Jeg forventer samtidig at alle tabeller ligeså stille stiger i størelse.


Håber i har den information i skal bruge, ellers så bare spørg.
På forhånd mange tak for hjælpen.
Avatar billede arne_v Ekspert
22. marts 2004 - 18:50 #1
Det ligger uden for mit ekspertise område. Jeg vil godt fabulere lidt. Men du
skal nok vente og også få lidt gode råd fra nogle med praktisk erfaring (f.eks.
trer).

Jeg er ret sikker på at du vil se markante forbedringer af performance for
1 GB -> 2 GB.

Jeg er noget mere skeptisk overfor hvorvidt du vil kunne mærke 2 GB -> 4 GB.
Avatar billede arne_v Ekspert
22. marts 2004 - 18:56 #2
(>2 GB kræver vist iøvrigt Enterprise Edition, som ikke er helt billig)
Avatar billede tuctoh Nybegynder
22. marts 2004 - 19:01 #3
Jeg har standard edition (personal edition) lisens - så 2 gig må være max.
I den server jeg har nu er der som sagt 1 gigabyte - ifølge windows task manager bruger den ikke noget nær halvdelen af det ram den har til rådighed, men det er måske fordi der ikke er plads til HELE tabellen i RAM-lageret!?
Avatar billede arne_v Ekspert
22. marts 2004 - 19:20 #4
Hm.

Prøv og start Performance Monitor og sammenlign:
  Total Server Memmory
  Target Server Memory
Avatar billede tuctoh Nybegynder
22. marts 2004 - 19:23 #5
hvor finder jeg det program ?
Avatar billede arne_v Ekspert
22. marts 2004 - 19:26 #6
I SQL Server gruppen i start menu.
Avatar billede tuctoh Nybegynder
22. marts 2004 - 19:51 #7
Det er der ikke noget der hedder på serveren :s
Avatar billede arne_v Ekspert
22. marts 2004 - 19:55 #8
Har du ikke en SQL Server xxxx gruppe i din start menu ?
Avatar billede tuctoh Nybegynder
22. marts 2004 - 20:03 #9
Nej, har en der hedder "Microsoft SQL Server", men der er ikke noget der hedder performance monitor der...
Det er SQL Server 2K jeg sidder med...
Avatar billede arne_v Ekspert
22. marts 2004 - 21:22 #10
Hm - jeg kører godt nok 7.0, men jeg troede faktisk at den var der.
Avatar billede rew Nybegynder
22. marts 2004 - 23:00 #11
Jo mere ram jo bedre, siger man normalt. Men I dit tilfælde kan det ikke betale sig
at smide mere end max 3GB i maskinen, da dit operativsystem ikke understøtter mere end max 3GB. Hvis du har større kørsler der skal afvikles jævnligt direkte på serveren er 3GB en god ide, men hvis det er en normal arbejdsdatabase hvor hovedparten af forespørgslerne køres fra klienterne så er de 2GB rigelig. SQL server har jo den heldige/uheldige egenskab at den tager alt den hukommelse den kan få, så med mindre du selv sætter en grænse i SQL så tager det alt.
Avatar billede rew Nybegynder
22. marts 2004 - 23:31 #13
Korrekt, men den håndterer ikke over 3GB med mindre man starter systemet om med
parametre der fortæller OS at der er mere ram.
Avatar billede trer Nybegynder
23. marts 2004 - 08:39 #14
Jeg vil da godt blande mig :-)

Rew har ret mht 3 GB grænsen og mht SQL Servers preallokering af tilgængelig ram. Man bør gå ind og sætte maks ram i SQL Server så der efterlades fx 100 MB til OS og andet på serveren (hvis man har en IIS eller Exchange på samme boks skal man også sætte en minimum ram til SQL Server).

SQL Server preallokerer som nævnt den tilgængelige ram (dvs giver OS besked på, at den kan finde på at bruge det) og bruger så af det efterhånden. Den frigiver faktisk aldrig ram - men den allokerer altså heller ikke mere ram end den reelt har brug for!

Så selvom man plejer at sige at "mere ram er altid godt" - så er det en sandhed med modifikationer.

Hvis du kigger i sysobjectcache kan du se hvor mange ram pages (64Kb per page) sql server anvender og til hvad (der er lidt sql til brug mod tabellen i min artikel "MsSQL: Performance tuning og metadata" - og kig også i Books Online for nærmere beskrivelse af tabellen)

Hvis du vil tvinge SQL Server til at låse en tabel i ram, så kan du godt gøre det - men det er ikke sikkert at det er en fordel!  Generelt bør man lade SQL Server selv vælge hvad den vil bruge ram til - bl.a. fordi den i mange tilfælde ikke læser data fra tabellen - men kun fra allerede indlæste indeks, og dermed opnår bedre performance.

Men som sagt, du kan låse en tabel i ram ved at "pinne" den:

dbcc pintable (database id, tabel id)

id værdierne får du nemmest ved at slå op i mindatabase.dbo.sysobjects og master.dbo.sysdatabases - bemærk lige at såfremt du har et clustered indeks på tabellen er det kun indekset du finder i sysobjects.

Låser du tabellen i ram ryger du også ud i, at fx sorteringer og joins måske ikke længere kan foregå i ram, men skal ske på disk. Dermed vil låsningen af en tabel i ram kunne give dårligere performance - men så har du til gengæld grund til at få mere ram i maskinen :-)

Ram, CPUer og diskes hastighed og antal samt netkorts hastighed skal altså gå op i en højere enhed - blot at fylde op i den ene ende giver ikke nødvendigvis bedre performance.
Avatar billede trer Nybegynder
23. marts 2004 - 08:40 #15
ah... ups, ret lige sysobjectcache til SysCacheObjects i ovenstående :-)
Avatar billede tuctoh Nybegynder
23. marts 2004 - 15:41 #16
Ok, mange tak for hjælpen indtil videre.

Jeg kan se at det er meget individuelt hvor meget ram man skal bruge... men hvor ser jeg hvad den allokerer nu? Jeg synes ikke at jeg kan finde de ting i nævner noget sted :s
Avatar billede trer Nybegynder
23. marts 2004 - 15:44 #17
du kan se aktuelt allokeret ram via performance monitor, task monitor mv. det er ikke anderledes end for andre programmer.

mht hvad den gerne vil allokere kan du finde det  ved at højre klikke på databasen i enterprise manager og vælge properties.
Avatar billede tuctoh Nybegynder
23. marts 2004 - 18:24 #18
www.secretsofwar.net/hotcut/taskmanager1.jpg
og
www.secretsofwar.net/hotcut/taskmanager2.jpg

Jeg er ikke helt sikker på hvordan det skal tolkes... help please?

I mine egenskaber for databasen kan jeg ikke se hvor meget den bruger... kan godt finde hvor man indstiller det, men kan ikke se hvad den bruger lige nu :/
Avatar billede arne_v Ekspert
23. marts 2004 - 18:43 #19
Siger den ikke 802 MB på sidste billede ?
Avatar billede tuctoh Nybegynder
23. marts 2004 - 18:54 #20
jo, det er også det jeg tolker det til... men ifølge det første billede bruges alt dette ikke (kan ikke huske om memory usage history er swap-fil medregnet).
Avatar billede arne_v Ekspert
23. marts 2004 - 19:03 #21
Det første billede siger da at hele 1 GB er i brug.
Avatar billede tuctoh Nybegynder
23. marts 2004 - 19:07 #22
pga. peak på 1,2?
Jeg er som sagt ikke selv helt sikker på hvordan det skal læses :(

Men ud fra det tror i at 2 gigs vil være en god ting?
De koster jo trods alt et par tusing per gig, hvis man vil have god kvalitet...
Avatar billede arne_v Ekspert
23. marts 2004 - 19:11 #23
P.g.a. MEM Usage og Physical Memory.
Avatar billede arne_v Ekspert
23. marts 2004 - 19:11 #24
Jeg er 95% sikker på, at du vil kunne mærke bedre respons med 1 GB -> 2 GB.
Avatar billede tuctoh Nybegynder
23. marts 2004 - 19:22 #25
ok, smid lige et svar arne.

Jeg venter et stykke tid med at lukke; vil lige se om der er andre der har noget mere at sige til sagen :)
Avatar billede arne_v Ekspert
23. marts 2004 - 19:51 #26
svar
Avatar billede larildsen Nybegynder
23. marts 2004 - 20:53 #27
Hvis din database "kun" fylder totalt ca. 1.5 GB, så vil jeg mene at du maksimalt har brug for et par hundrede MB til caching + det løse + memory til låse.

Hvis du IKKE ser megen eskalering af låse, så hvorfor forøge memory forbruget.

Hvis du ser et meget kraftigt CPU forbrug fra din SQL server, så kan det være fordi den bruger megen tid på sorteringer. Har du kikket på hvordan din SQL bliver udført ?

arne_v - Jeg er langt fra enig med dig i, at der vil være mærkbar effekt af at øge memory i serveren, med så lille en database - Jeg har databaser på 10 gange den størrelse der performer glimrende med 1GB - Det er altså en misforståelse af mere ram automatisk giver bedre performance, det kommer altså an på om man har brug for det, og det kan man faktisk godt måle sig frem til.

Hvis der skal gives point til dette svarene til dette spørgsmål (hvilket jeg IKKE mener der skal - Der var jo ikke nogen helt korrekte svar), så er det bedste svar efter min mening det fra trer.

En helt anden ting er, at IIS og SQL på samme server er en meget dårlig ide, idet de begge vil kæmpe om resourcer.
Avatar billede tuctoh Nybegynder
23. marts 2004 - 21:29 #28
Selve databasen fylder lidt over 3 gigabyte. Den største tabel er dog alene på omkring 1½ gigabyte. De andre tabeller er forholdsvist små i forhold til.

Der er ikke den store kamp om ressourcerne... den smule IIS bruger er ikke et problem; der er MANGE databaseopslag på hver side, og det er dem som trækker på ressourcerne.

Der er mange sorteringer... kan ikke helt sige hvor mange.
Avatar billede trer Nybegynder
23. marts 2004 - 21:52 #29
Mht sorteringer - sikr at dine sorteringer er understøttet af indeks - dvs sørg for indeks på order by, group by, distinct og join / where betingelser.

Og check som sagt tabellen master.dbo.syscacheobjects - den har en kolonne "pagesused" du kan benytte til at finde det aktuelle ramforbrug.

Sidst - hvis du ikke har sat både en min og en max ram på din IIS og SQL Server så VIL de slås om memory fordi begge services forsøger at allokere al ram. Larildsen har absolut ret mht at web- og database server på samme maskine bør undgås.
Avatar billede tuctoh Nybegynder
23. marts 2004 - 22:16 #30
Mine indexes er sat op så de skulle fungere optimalt... vha. profiler etc... som undersøger hvad der er mest brug for.

Jeg har kigget i den tabel du siger... ved ikke hvad det er jeg skal hive fat i, men med koden:
SELECT    SUM(pagesused) AS Expr1 FROM        syscacheobjects
fik jeg resultatet 28983
jeg ved ikke om det er dét der skulle bruges.

Der er ikke sat min og max ram på IIS eller SQL server... men når jeg kigger i task manager bruger IIS ikke noget særligt ram. Er det stadig et problem så?
Avatar billede trer Nybegynder
23. marts 2004 - 22:34 #31
Ah... Bemærk lige, at profiler ikke nødvendigvis giver et retvisende billede!

Views og lignende strukturer (sp'er og funktioner) bliver ikke opløst og indgår ikke i dens vurdering - og der er et problem såfremt du har indeks der dækker multiciple kolonner.
Avatar billede tuctoh Nybegynder
23. marts 2004 - 22:38 #32
hmm ok, må kigge på det en anden gang...

Men OK, jeg tror jeg vil prøve at kyle 1 gigabyte ram i, og se om jeg kan finde en gigabyte extra et andet sted, så jeg kan forsøge mig frem.

Hvis ikke jeg hører mere lukker jeg i morgen.

Tak for hjælpen allesammen. Jeg har om ikke andet lært en hel del ved det :)
Avatar billede trer Nybegynder
23. marts 2004 - 22:46 #33
Lige hurtigt - pages used giver ca. 231 mb ram brugt (8 kb pr page) - det lyder ok som øjebliksbillede.

Overvej om du skal ændre antal kb der sættes af som default til hver query - standard er 1024 kb, men den kan ofte sættes ned til 512 kb uden at performance falder - og det frigiver en del ram ved mange samtidige små queries.

Og prøv at tilføje kolonnen "Page Faults Delta" til din taskmanager process view - hvis den kolonne står og hamrer op og ned så swappes der - små udsving er ok, men kolonnen bør det meste af tiden stå på 0.

Personligt tror jeg ikke du vil få meget ud af at sætte en ekstra gb ram i - men uden at have hænderne på serveren er det naturligvis kun et gæt.
Avatar billede tuctoh Nybegynder
23. marts 2004 - 22:50 #34
PF Delta står hovedsageligt på nul, hopper op til 8 ind imellem - og så til omkring 150 hvert 10'ende sekund eller noget...
Ved ikke helt om det er meget eller lidt.
Avatar billede trer Nybegynder
23. marts 2004 - 22:58 #35
Hvis det er kontinuerligt så er det sådan lidt bob bob - men det er normalt at den svinger lidt.

Du kan også tilføje Virtual Memory Size for at få et fuldt billede af hvad hver enkelt process allokerer af ram (VM Size indbefatter ram swappet til disk svjh).

Prøv at sætte en maks grænse for sql servers ram forbrug så der efterlades mindst 100 mb til andre apps - det er generelt en god ting at have gjort.
Avatar billede tuctoh Nybegynder
25. marts 2004 - 18:24 #36
Trer og Arne, i får lov til at dele points.

Mange tak for hjælpen! Jeg prøver til at starte med med én gigabyte ram, og ser hvad der sker...
Jeg vil samtidig kigge lidt nærmere på jeres forskellige forslag til at optimere serveren mht. ram.
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