Avatar billede bindzus Nybegynder
18. januar 2002 - 17:33 Der er 4 kommentarer og
1 løsning

Server CPU performance stiger til 100%

Jeg har en server stående med SQL 2000 server (std. ed.) og IIS 5.0, der kører en ASP applikation på IIS\'en. Når flere brugere connecter til serveren på samme tid, stiger performance på visse tidspunkter til 100%, ASP applikationen benytter ODBC forbindelse til SQL serveren. Hvordan forhgindrer jeg den i at belaste serveren så voldsomt? Det skal siges at det sker allerede ved en 15 til 25 samtidige brugere.
Avatar billede tmceu Praktikant
18. januar 2002 - 21:49 #1
Da jeg antager at du kun kører med en enkelt processor, mener jeg den eneste parameter du kan (bør) pille ved er memory settings. Du kan sætte en max. for hvor meget memory SQL Server må anvende. Dette gøres under Properties -> Memory i Enterprise Manager. Og så kan du lige sikre dig at \"Boost SQL Server priority on Windows\" IKKE er slået til. Sidstnævnte findes på Processor fanebladet.

SQL Serveren er så snedig indrettet, at den bruger al den memory og processor den \"får lov til\". Det er ikke usædvanligt at se SQL Server ligge omkring 99% CPU belastning i længere tid.

Normalt oplever jeg ikke dette som et problem, selv ikke på et intranet med 2-400 samtidige brugere. Er du bare faldet over belastningen eller er performance på ASP for dårlig ?

Det lyder for mig som om du skulle starte en trace i Profiler, lad den køre i nogle timer/dage og derefter køre en performance tuning wizard. Jeg synes mere det lyder som om databasen ikke har de nødvendige indexes eller at der (overdrevet) bruges triggers, cursors og transactions. Alt sammen noget som kan tvinge enhver SQL Server i knæ.
Avatar billede bindzus Nybegynder
20. januar 2002 - 21:26 #2
Jeg har 2 1000 MHz PIII, der er ca. 730 Mb RAM.

Der er så meget load på serveren at selv simple (f.eks. select * from table) queries op mod databasen kan tage et minut. Det skal siges at en enkelt bruger kan generere op mod 10 hits pr. minut, og der gemmes til databasen.

Jeg har tracet lidt som du foreslår, men index tuneren brokker sig ikke over manglende indices, jeg kører heller ikke mang transactioner eller triggers.

Derimod har jeg en lille mistanke til mine ASP sider, men hvordan afgør man om en ASP side performer dårligt.

Kan COM componenter lave ballade, jeg har registreret et par stykker i \"Component services\", som bruges i mine ASP filer.
Avatar billede tmceu Praktikant
21. januar 2002 - 00:16 #3
Ja, så burde det jo ikke være server resourcer der mangler :-)

Jeg kan komme i tanke om et par ting som du kan prøve:

1. Connection Pooling
Samspillet mellem IIS og SQL Server om anvendelse- og genanvendelse af forbindelser. I de fleste tilfælde er connection pooling en funktionalitet der forbedrer performance, men med mange samtidige brugere, kan det få den stik modsatte effekt. Jeg kan ikke anbefale hvad der er bedst i dit tilfælde, men jeg kan fortælle dig hvor du kan kontrollere indstillingerne, og så må du eksperimentere dig frem.

SQL Server driveren (og tag ikke fejl af at det hedder ODBC)

Control Panel -> Administrative Tools -> Data Sources (ODBC) -> Connection Pooling. Dobbelt-klik på SQL Server driveren

SQL Server
Enterprise Manager -> højre-klik på serveren -> Properties -> Connections. Kontroller \"Maximum Concurrent User Connections\". Du kan måske med fordel sætte denne ned fra default værdien 0 = unlimited.

2. ASP/IIS

A) Slå server-side debugging fra. Control Panel -> Administrative Tools -> Internet Services Manager -> højre-klik på dit site/virtual root -> Home Directory -> Configuration -> App Debugging.

B) Anvend altid Option Explicit i dine scripts. Jeg har læst et sted, at performance kan forbedres med helt op til 30% ved at erklære dine variabler eksplicit.

C) Overvej om du har sider der ofte vises til mange brugere, og som derfor med fordel kan caches. Hvis du anvender Response.Expires = XX minutter på en side der ofte anvendes og som anvender databasen, kan du spare en del server resourcer

D) Luk altid dine recordsets og connections eksplicit med Conn.Close og Set Conn = Nothing. Jeg ved godt at forbindelser aut. lukkes når de ikke anvendes, men jeg har erfaring med at det hjælper på performance at gøre det eksplicit.

Og til dine sidste spørgsmål, så kan du finde ud af det, ved at lave en trace i Control Panel -> Administrative Tools -> Performance. Nedenstående er hvad jeg mener er interessant i denne sammenhæng:

Performance Object: Active Server Pages
Counters: Errors7Sec, Request Execution Time, Transactions/Sec

Og til COM objekterne. Tja, hvis du ikke selv har skrevet dem, kan du jo ikke vide hvordan der er \"svinet\" med koden og performance.
Avatar billede bindzus Nybegynder
23. januar 2002 - 08:41 #4
Tak for hjælpen, jeg har kigget lidt på min ASP, den var ikke for køn, men samtidig manglede der et par indices, der var ret vigtige for SQL serverens performance. Den er stadig ikke helt god endnu, men jeg er godt på vej, så du har fortjent pointene.

En sidste ting, har du en ide til hvad man kan gøre ved en fucked performancemonitor på windows 2000, det har været en af årsagerne til at det har været lidt svært at teste, da den er gået kold.
Avatar billede tmceu Praktikant
23. januar 2002 - 14:24 #5
Jeg er desværre nødt til at give dig et rigtigt "Microsoft svar", da jeg aldrig selv har haft problemer med netop den, hverken i Professional eller Server versionen.

Opdater til seneste service pack og/eller hotfixes eller geninstaller :-(
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