Avatar billede avlund Nybegynder
22. marts 2002 - 12:10 Der er 5 kommentarer og
2 løsninger

Access -> SQL Server = Rigtig langsomt

Hejsa,

jeg har netop upsized min Access 2000 database til SQL Server 2000. Det drejer sig om en testdatabase - et message board. Men det kører EKSTREMT LANGSOMT lige pludseligt, når det skal vise oversigt over beskederne.

Jeg koder i ASP, og det er kun her den er langsom. I Query Analyzer kører den lynhurtigt. Access i ASP er tilsvarende hurtigt.

Min kode, fordelt på 2 subs:

- CONNECTION -

Sub sub_ADODB_CONNECTION_OPEN

Set obj_ADODB_CONNECTION = Server.CreateObject("ADODB.Connection")

With obj_ADODB_CONNECTION

  .ConnectionString = "DRIVER={SQL Server};SERVER=MAIN;DATABASE=bnmbSQL"

  .Open

End With

End Sub


- VIS BESKEDER (pas på, den her er lang) -


Sub sub_LIST_THREADS(M, pageNum)

Set obj_ADODB_RECORDSET_LIST_THREADS =
Server.CreateObject("ADODB.Recordset")

With obj_ADODB_RECORDSET_LIST_THREADS

  If M = 0 Then

  If bln_FILTER_THREADS Then

    str_SOURCE = str_SOURCE & "SELECT M, P, T, str_NAME, str_E_MAIL,
str_SUBJECT, dat_DATE, str_REMOTE_ADDR FROM tbl_MESSAGES WHERE P = 0"

    If bln_FILTER_THREADS_YEAR And Session("str_FILTER_THREADS_YEAR") <>
str_FILTER_THREADS_YEAR_ANY Then

    str_SOURCE = str_SOURCE & " AND Year(dat_DATE) = '" &
Session("str_FILTER_THREADS_YEAR") & "'"

    End If

    If bln_FILTER_THREADS_MONTH And Session("str_FILTER_THREADS_MONTH") <>
str_FILTER_THREADS_MONTH_ANY Then

    str_SOURCE = str_SOURCE & " AND Month(dat_DATE) = '" &
Session("str_FILTER_THREADS_MONTH") & "'"

    End If

    If bln_FILTER_THREADS_DAY And Session("str_FILTER_THREADS_DAY") <>
str_FILTER_THREADS_DAY_ANY Then

    str_SOURCE = str_SOURCE & " AND Day(dat_DATE) = " &
Session("str_FILTER_THREADS_DAY")

    End If

    If bln_FILTER_THREADS_TEXT Then

    str_SOURCE = str_SOURCE & " AND (str_NAME LIKE '%" &
Session("str_FILTER_THREADS_TEXT") & "%'"

    str_SOURCE = str_SOURCE & " OR str_E_MAIL LIKE '%" &
Session("str_FILTER_THREADS_TEXT") & "%'"

    str_SOURCE = str_SOURCE & " OR str_SUBJECT LIKE '%" &
Session("str_FILTER_THREADS_TEXT") & "%'"

    str_SOURCE = str_SOURCE & " OR dat_DATE LIKE '%" &
Session("str_FILTER_THREADS_TEXT") & "%'"

    str_SOURCE = str_SOURCE & " OR str_REMOTE_ADDR LIKE '%" &
Session("str_FILTER_THREADS_TEXT") & "%'"

    str_SOURCE = str_SOURCE & " OR str_MESSAGE LIKE '%" &
Session("str_FILTER_THREADS_TEXT") & "%')"

    End If

    str_SOURCE = str_SOURCE & " ORDER BY M DESC"

    .Source = str_SOURCE

  Else


''''''''''''''''''' MIN SQL-STATEMENT HER ''''''''''''''''''''

    .Source = "SELECT M, P, T, str_NAME, str_E_MAIL, str_SUBJECT, dat_DATE,
str_REMOTE_ADDR FROM tbl_MESSAGES WHERE P = 0 ORDER BY M DESC"

  End If

  Else

  .Source = "SELECT M, P, T, str_NAME, str_E_MAIL, str_SUBJECT, dat_DATE,
str_REMOTE_ADDR FROM tbl_MESSAGES WHERE M = " & M & " ORDER BY M DESC"

  End If

  .ActiveConnection = obj_ADODB_CONNECTION

  .CursorType = 1

  .LockType = 1

  .PageSize = 50

  .Open

  If Not .BOF Or Not .EOF Then

  Response.Write("<ul>" & vbCrLf)

  .AbsolutePage = pageNum

  For ib = 1 to .PageSize

  'While Not .EOF

    sub_HTML_LIST_ITEMS .Fields("M").Value, .Fields("P").Value,
.Fields("T").Value, .Fields("str_NAME").Value, .Fields("str_E_MAIL").Value,
.Fields("str_SUBJECT").Value, .Fields("dat_DATE").Value,
.Fields("str_REMOTE_ADDR").Value

    Response.Write "<br />"

    sub_LIST_FOLLOW_UPS .Fields("M").Value, 0

    Response.Write "<br />"

    .MoveNext

  if .EOF then Exit For

  Next

  'Wend

  Response.Write("</ul>" & vbCrLf)

  End If

  if not bln_REQUEST_METHOD_GET then

  displayPageLinks obj_ADODB_RECORDSET_LIST_THREADS, pageNum

  end if

  .Close

End With

Set obj_ADODB_RECORDSET_LIST_THREADS = Nothing

End Sub







Avatar billede avlund Nybegynder
25. marts 2002 - 19:37 #1
Er der slet ikke nogen her der har forstand på SQL Server?
Avatar billede fmadse1 Nybegynder
26. marts 2002 - 10:59 #2
Hvordan ser din tabel erklæringen ud?. Kunne du mangle nogle indexex på den?. Hvis der nu er et index på det du slår på burde det jo gå hurtigere
Avatar billede avlund Nybegynder
26. marts 2002 - 18:06 #3
Jeg har kørt index tuneren på den ene tabel der benyttes.

Jeg har siden fundet ud af, at hvis jeg laver en query uden noget på en ny frisk side, går det hurtigt nok. Fejlen må altså ligge et eller andet sted i min kode - som åbenbart virker fint nok med Access.
Avatar billede sunezapa Nybegynder
04. april 2002 - 22:59 #4
A. Hvad mener du med "en query uden noget" ?

B. streng-behandling er en tung affære i ASP,
altså str = str + merStr, og det kan være voldsomt belastende for IIS'en hvis det er 1. lange tekster og/eller 2 mange tekster.
Jeg synes dog ikke at dette bør passe med at du kører "EKSTREMT LANGSOMT"...
Avatar billede avlund Nybegynder
06. maj 2002 - 00:16 #5
Hej, lige et forsinket svar her.

"en query uden noget" er såmænd bare en "SELECT etellerandet FROM tabellen, slut færdig", altså en simpel SELECT og intet mere, hverken design eller andet halvavanceret HTML. Så, altså, det kan enten være strengene eller HTML, der sløver processen - men det kan da stadig ikke passe, at Access er hurtigere end SQL Server...!!!
Avatar billede sunezapa Nybegynder
06. maj 2002 - 08:53 #6
Hvis det kører hurtigt i Access via ASP,
og hurtigt i Query Analyzer,
men ikke i SQL-server via ASP,
- så kan vi vel udelukke ASP som langsom-kilde.
Forslag:
netværksproblemer med adgang til SQL-server (lidet sandsynligt...?)
rettigheder på SQL-server, eller andre indstillinger på denne (udfra at det kører hurtigt i QueryAnalyzeren lokalt, men langsom "udefra".
Har du andre ting kørende på SQLserveren, som kører normalt?
Avatar billede avlund Nybegynder
30. august 2002 - 00:50 #7
Jeg har droppet det igen. Men tak for de gode forslag dog.
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