/ Forside / Teknologi / Udvikling / SQL / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
SQL
#NavnPoint
pmbruun 1704
niller 962
fehaar 730
Interkril.. 701
ellebye 510
pawel 510
rpje 405
pete 350
gibson 320
10  smorch 260
MS SQL-Server snupper alt kraften
Fra : Niels Henriksen


Dato : 09-04-01 23:42

Hejsa

Hvordan undgår man at sql-serveren bruger alt CPU'ens maskinkraft når den
skal hente en laaaaaaaaaaaang liste data?

--
Niels



 
 
Peter Lykkegaard (10-04-2001)
Kommentar
Fra : Peter Lykkegaard


Dato : 10-04-01 06:52


"Niels Henriksen" <niels@WHATbiggs.dk> wrote in message
news:9ata5e$26vg$1@news.cybercity.dk...
> Hejsa
>
> Hvordan undgår man at sql-serveren bruger alt CPU'ens maskinkraft når den
> skal hente en laaaaaaaaaaaang liste data?
>
Kik på dine Indexes og din datastruktur - undgå brug af * - hent _kun_ data
der er behov for - osv
Hver evig eneste gang jeg har oplevet sligt er det pga af ovenstående fejl -
specielt manglende indexes er en performance killer
Du kan evt bruge Query Analyzer for at se hvordan din query performer,
bruger indexes etc - du vil blive overrasket

Har du fx nogle ret komplekse queries, med fx mange outer joins osv - samt
mange recordset, så skal du til at kikke på om du kan omgå noget af
belastningen ved at arbejde med redundante data og/eller temporære tabeller

mvh/Peter Lykkegaard



James Olsen (10-04-2001)
Kommentar
Fra : James Olsen


Dato : 10-04-01 06:53


"Niels Henriksen" <niels@WHATbiggs.dk> wrote in message
news:9ata5e$26vg$1@news.cybercity.dk...
> Hejsa
>
> Hvordan undgår man at sql-serveren bruger alt CPU'ens maskinkraft når den
> skal hente en laaaaaaaaaaaang liste data?

Det korte svar - det gør du ikke - det er sådan det skal fungere og sådan et
hvert anden program også fungere ;)

Så har vi den situation hvor du har en SMP maskine, så har du mulighed for
at set processor-affinity så den kun afvikles på fx. en af processorene.

Endeligt er der den rigtigt beskidte metode og der er at prioritere
processen lavere end den er som default, men det ville jeg ikke ligge og
pille med medmindre du virkeligt har en rigtigt rigtigt god grund til det.
Og lad mig igen understrege en rigtigt meget god grund.

>
> --
> Niels
>
>



Peter Lykkegaard (10-04-2001)
Kommentar
Fra : Peter Lykkegaard


Dato : 10-04-01 11:55


"James Olsen" <james_olsen@vip.cybercity.dk> wrote in message
news:9au75k$2svc$1@news.cybercity.dk...
>
> "Niels Henriksen" <niels@WHATbiggs.dk> wrote in message
> news:9ata5e$26vg$1@news.cybercity.dk...
> > Hejsa
> >
> > Hvordan undgår man at sql-serveren bruger alt CPU'ens maskinkraft når
den
> > skal hente en laaaaaaaaaaaang liste data?
>
> Det korte svar - det gør du ikke - det er sådan det skal fungere og sådan
et
> hvert anden program også fungere ;)
>
Det var også lige min umiddelbare mening, men der kan være en god grund til
at hente en lang liste - og alt andet lige så burde den ikke tage al saft og
kraft ud af maskineriet

mvh/Peter Lykkegaard



Niels Henriksen (10-04-2001)
Kommentar
Fra : Niels Henriksen


Dato : 10-04-01 19:42

"Peter Lykkegaard" <polonline@hotmail.com> wrote in message
news:wABA6.150$X22.2543@news.get2net.dk...
>
> Det var også lige min umiddelbare mening, men der kan være en god grund
til
> at hente en lang liste - og alt andet lige så burde den ikke tage al saft
og
> kraft ud af maskineriet
>
Jeg har også prøvet det ved at jeg havde en liste på 100.000 linier jeg
skulle indsætte i en database.

Det kørte på 2 servere. En VBS-fil på den ene maskine og en SQL-server på
den anden. SQL-serveren stod og knoklede derud'a mens maskinen med VBS-filen
intet foretog sig.

Det jeg lavede var blot en simpel Insert i én tabel.

Der må være en setting et eller andet sted hvor man kan sige hvor meget
kraft den max. må bruge.


--
Niels



James Olsen (11-04-2001)
Kommentar
Fra : James Olsen


Dato : 11-04-01 06:36


"Niels Henriksen" <niels@WHATbiggs.dk> wrote in message
news:9avgds$1j76$1@news.cybercity.dk...
> "Peter Lykkegaard" <polonline@hotmail.com> wrote in message
> news:wABA6.150$X22.2543@news.get2net.dk...
> >
> > Det var også lige min umiddelbare mening, men der kan være en god grund
> til
> > at hente en lang liste - og alt andet lige så burde den ikke tage al
saft
> og
> > kraft ud af maskineriet
> >
> Jeg har også prøvet det ved at jeg havde en liste på 100.000 linier jeg
> skulle indsætte i en database.
>
> Det kørte på 2 servere. En VBS-fil på den ene maskine og en SQL-server på
> den anden. SQL-serveren stod og knoklede derud'a mens maskinen med
VBS-filen
> intet foretog sig.
>
> Det jeg lavede var blot en simpel Insert i én tabel.

Det kommer jo sådan set an på hvordan du laver dine insert. Er de del af en
samlet transaction eller er der autocommit på hver enkelt insert-statement ?
Sender du et "dynamisk" altså den fulde insert-tekst for hvert enkelt insert
eller har du brugt prepared-statements ? Var der andre der kørte de samme
tabeller som du lavede dit 100.000 liniers load på ? Hvilken driver ODBC
eller OLEDB brugte du ? Hvormange og hvilke typer af indeks er der på
tabellen ? Er der trigger på tabellen ? Som det sikkert fremgår med al
tydelighed er der rigeligt med parametre at tage stilling til ved et sådan
load at 100.000 linier - så det er rimeligt svært at sige om det skal tage
lang tid. Men en ting er da klart, at hvis du stiller 1 maskine op og så
banker inserts i nakke på en SQL server alt det du kan så får den da alt
andet lige travlt, det er der jo intet unaturligt i.

>
> Der må være en setting et eller andet sted hvor man kan sige hvor meget
> kraft den max. må bruge.

Nu må det altså stoppe - hvad havde du egentligt forestillet dig? Øhh det
her program må kun bruge 25 procent af processorkraften ? Undskyld mig med
det giver ingen som helst mening. Det er da kun hvis du er i en situation
hvor du deler en maskine mellem flere opgaver og det er jo helt generelt en
rigtigt dårlig ide. Og på den anden side hvis du har en seriøs
databaseserver så har den også sin egen maskine eller som minimum sin egen
processor og skal derfor bruge hvad der er for at få sine opgaver igennem.
Som jeg tidligere har sagt så kan du på SMP maskiner vælge hvilke
processor/ere SQL Server må bruge og den vej rundt lave noget det du
efterspørger - det er bare på et helt andet niveau.

>
>
> --
> Niels
>
>



Niels Henriksen (11-04-2001)
Kommentar
Fra : Niels Henriksen


Dato : 11-04-01 08:02


"James Olsen" <james_olsen@vip.cybercity.dk> wrote in message
news:9b0qgt$97p$1@news.cybercity.dk...
>
> Nu må det altså stoppe - hvad havde du egentligt forestillet dig? Øhh det
>
Ok. Så må jeg bare læse lidt mere om den SQL-Server

--
Niels



Peter Lykkegaard (11-04-2001)
Kommentar
Fra : Peter Lykkegaard


Dato : 11-04-01 13:11


"Niels Henriksen" <niels@WHATbiggs.dk> wrote in message
news:9avgds$1j76$1@news.cybercity.dk...
> "Peter Lykkegaard" <polonline@hotmail.com> wrote in message
> news:wABA6.150$X22.2543@news.get2net.dk...
> >
> > Det var også lige min umiddelbare mening, men der kan være en god grund
>> til at hente en lang liste - og alt andet lige så burde den ikke tage al
saft
>> og kraft ud af maskineriet
> >
> Jeg har også prøvet det ved at jeg havde en liste på 100.000 linier jeg
> skulle indsætte i en database.
>
> Det kørte på 2 servere. En VBS-fil på den ene maskine og en SQL-server på
> den anden. SQL-serveren stod og knoklede derud'a mens maskinen med
VBS-filen
> intet foretog sig.

> Det jeg lavede var blot en simpel Insert i én tabel.
>
Det er også næsten den mest forkerte måde at gøre det netop i det specielle
tilfælde
Her skal bruges BCP værktøjerne - slå op i BOL (Books Online) ang dette
Evt kik på BULK INSERT der henter data fra csv ting

Et dbms er beregnet til set (mængde) orienteret metoder aldrig én række ad
gangen
Man kan snildt slå en SQL server totalt ihjel ved bruge fx cursor
operationer

Har man et cpu load på 100 procent (i længere tid), så er det på tide at
kikke sig om efter noget dual (eller flere) tamtam - forudsat at koden er
10-4 og ikke _kan_ laves på anden måde

Som James antyder, så er det mandatory at MSSQL kører på en dedikeret
server, da programmet stjæler saft og kraft med arme og ben ud af serveren,
hvis der er behov for det - det er by design

Andre ting der kan give et heavy load er fx mangel på raid, for lidt memory
etc
Kik fx på
http://www.sql-server-performance.com/
http://www.mssqlserver.com/
For mere info

mvh/Peter Lykkegaard



Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408929
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste