Avatar billede jesper_cph Nybegynder
20. januar 2004 - 13:15 Der er 11 kommentarer

Midlertidig fejl i SQL Server

Jeg har det problem at jeg midt under en eksekvering af en ASP side får flg. fejl.

“Microsoft OLE DB Provider for SQL Server error '80004005'

[DBNETLIB][ConnectionOpen (Connect()).]SQL Server does not exist or access denied. “

ASP siden gør det, at den selecter fra en table (15.000 rækker), og opdaterer resultatet i en anden tabel. Det er forskelligt hvor langt ASP siden kommer, nogle gange når den 70%, andre gang 80% af alle rækkerne før fejlen kommer.

------ Kode eksempel -----
SELECT * fra tblScores ORDER by IntScore
SET RS = dbConn.execute(SQL)

I = I + 1

Do while not rs.eof
  “Update tblUsers set intPos = ” & I & “ WHERE idUser =” & rs(“idUser”)
  dbConn.execute(SQL)
Rs.movenext
Loop
-----------------------------

------ Server setup --------
Server 1
Fujitsu-Siemens RX300 Server(Dual 2,8 Xeon, 1 Gb Ram, 72 Gb SCSI Raid 1)
Windows 2003 Web Server
MDAC 2.8

Server 2
Fujitsu-Siemens RX300 Server(Dual 2,8 Xeon, 1 Gb Ram, 72 Gb SCSI Raid 1)
Windows 2003 standart server
Microsoft SQL server 2000 SP3a
MDAC 2.8
Avatar billede mufoxe Nybegynder
20. januar 2004 - 13:19 #1
Har du mulighed for at prøve at køre queryen lokalt fra ASP? Det kunne umiddelbart godt lyde som om du har et netkort, som ikke opfører sig som det skal.
Avatar billede slash Nybegynder
20. januar 2004 - 13:20 #2
netværksproblemer - det er det mest sasndsynlige..
Avatar billede slash Nybegynder
20. januar 2004 - 13:21 #3
prøv evt. at sætte en trace på din sql-server...... og sæt noget scripttimeout på aspsiden...
Avatar billede jesper_cph Nybegynder
20. januar 2004 - 22:27 #4
Har skiftet netkort. I begge maskiner, så de nu kører 1 Gbit imellem de 2 servere.

Hvilket ikke har hjulpet. ... suk

Når fejlen opstår, er det som om at IIS serveren (som afvikler ASP koden) ikke kan få kontakt til SQL serveren i ca. 30 sek til 1 minut. Men jeg kan godt på samme tid få adgang til SQL serveren via Enterprise Manager og Query Analyzer imens.

Så jeg er kommet frem til at fejlen må ligge på ASP/IIS maskinen, men det er en helt ren installation af Windows Server 2003.
Avatar billede trer Nybegynder
26. januar 2004 - 09:05 #5
Jeg har på et tidspunkt læst om en fejl i .NET der gjorde, at transaktioner pludselig hang - noget med, at .NETs pooling.

Check lige data i master.dbo.sysprocesses - eller brug Current Activity under  Management folderen i Enterprise Manager. Du må *ikke* have åbne transaktioner der står markeret som "sleeping". Evt kom med et dump af din current activity så vi kan se hvad der sker på din boks mens fejlen opstår.

For en god ordens skyld - check også at din database ikke har shrink / autoclose slået til - og at din TEMPDB ikke fysisk er placeret sammen med database logfiler og din windows swapfil. Alt sammen noget der får performance til at hamre i gulvet. 

Det er også være at kigge på, om du har slået parallel query til. Ved komplekse queries kommer man ofte i situationer hvor al kraft bliver brugt til at synkronisere arbejdet mellem cpu'erne - administrationen af querien kan bogstavelig talt blokere for data.

Det er nemt og hurtigt at fjerne - i Enterprise Manager højreklikker du på serveren, vælger properties og på fanen Processor har du mulighed for at sætte Use N processor(s) - sæt N til 1 og prøv om det løser problemet. Gør det det ikke, kan du hurtigt sætte det tilbage til "use all available".

NB: Det forhindrer ikke at SQL Server bruger alle cpu'er - det forhindrer blot at én query kører over flere cpu'er.

Sidst - du kan køre en profilertrace mod din sql server mens du provokerer fejlen frem. Profilertracen kan så fortælle præcis hvad der sker på serveren og hvad kommunikationen mellem klienten og serveren indeholder.  Det er nok det værktøj jeg ville starte med, hvis jeg sad som administrator.
Avatar billede slash Nybegynder
28. januar 2004 - 09:41 #6
kommer man videre?????????????????????
Avatar billede trer Nybegynder
01. februar 2004 - 00:53 #7
Problemet kan være, at det at fyre 15.000 separate transaktioner af i et loop smadrer noget buffer / connection setup i ASP. Whatever. Derudover, det er ikke særligt effektivt at gøre det som du viser - og SQL Server har i øvrigt en query timeout på 10 minutter som default...

Dit kode eksempel ovenfor kan skrives om til en rimelig kompakt procedure som vist her.

create procedure dbo.UpdateTblUsers
as
begin
select identity(int,1,1) as lnr,
iduser into #temp
from dbo.intScore

update dbo.tblUsers
set intPos = t.lnr
from dbo.tblusers as u inner join #temp as t
on u.iduser = t.iduser
end

Det giver så et enkelt kald i ASP

<%
SQL = "exec dbo.updatetblusers"
SET RS = dbConn.execute(SQL)
%>

Jeg kan naturligvis ikke teste det - men jeg gætter på, at du både får fjernet fejlen og bedre performance - 15.000 rækker burde kun tage få sekunder at opdatere.
Avatar billede trer Nybegynder
03. februar 2004 - 15:29 #8
Hvad sker?
Avatar billede trer Nybegynder
07. februar 2004 - 10:14 #9
-do-
Avatar billede trer Nybegynder
10. februar 2004 - 14:29 #10
jesper_cph> har du brug for mere hjælp?  Hvis ikke så bør du lukke spørgsmålet.
Avatar billede trer Nybegynder
30. marts 2004 - 08:48 #11
?
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