Avatar billede DMO Novice
04. maj 2015 - 15:57 Der er 4 kommentarer og
1 løsning

Timeout på store databaser

Hvad er grunden til at følgende sql for søgning i databasen, får time out.

den kører fint på en database med mindre end 100 samlet resultater. Men på den side den skal virke på, for den timeout på. Der er måske med tabellerne samlet under 10000 rækker, den skal søge igennem.
Jeg vil da ikke mene at den går i stå så tidligt.

Det er ikke mig der skrevet koden, jeg fejlfinder bare. (troede jeg da)

#----

Active Server Pages error 'ASP 0113'

Script timed out

/###.asp

The maximum amount of time for a script to execute was exceeded. You can change this limit by specifying a new value for the property Server.ScriptTimeout or by changing the value in the IIS administration tools.

#----

SELECT DISTINCT `Vare`.`Opgaveid` AS OID, `Opgaver`.`Afsluttet`, `Opgaver`.`Faknr`, `Kunder`.`Kunde navn` from `Vare`
JOIN `Opgaver` on `Opgaver`.`ID` = `Vare`.`Opgaveid`
JOIN `Arbejdesbeskriv` ON `Arbejdesbeskriv`.`Opgaveid` = `Opgaver`.`ID`
JOIN `Kunder` ON `Kunder`.`ID` = `Opgaver`.`Kunde`
, `SN_Numre`
WHERE
(`Vare`.`varenr` LIKE '%5099206027275%' or `Vare`.`beskriv` LIKE '%5099206027275%' or `Vare`.`Rabatgruppe` LIKE '%5099206027275%' or `Opgaver`.`Opgave` LIKE '%5099206027275%' or `Arbejdesbeskriv`.`Arbejbeskriv` LIKE '%5099206027275%' or (`SN_Numre`.`vareid` = `Vare`.`idvare` AND `SN_Numre`.`snnr` LIKE '%5099206027275%'))
ORDER BY `Opgaver`.`Opretdato` DESC LIMIT 100
Avatar billede arne_v Ekspert
04. maj 2015 - 16:08 #1
Check om der er index paa relevante felter.

Undersoeg om du kan erstatte LIKE '%xxxx%' med LIKE 'xxxx%' da LIKE som starter med et wildcard er en performance killer.
Avatar billede DMO Novice
05. maj 2015 - 09:28 #2
Jeg har prøvet at fjerne alle % og den hænger stædig.

"ID" og "idvare" er primary på tabellerne.
Avatar billede vagnk Juniormester
05. maj 2015 - 13:56 #3
Konstruktionen:
JOIN `Kunder` ON `Kunder`.`ID` = `Opgaver`.`Kunde`, `SN_Numre`
ser forkert ud. I samme JOIN nævner du to tabeller men har kun betingelse på den første "ON `Kunder`.`ID` = `Opgaver`.`Kunde`". Mit gæt er at det er der bassen går helt forkert i byen.
Tabellen SN_Numre har både en vareid og et snnr og burde kunne JOINes med vareid.

Hvis "5099206027275" er serienummeret det handler om kunne hele konstruktionen sikkert gøres nemmere at forstå både for mennesker og databasser.

Som arne_v er lidt inde på skal man undgå LIKE hvis det overhovedet er muligt, og i hvert fald slet ikke på numeriske felter.
Avatar billede DMO Novice
05. maj 2015 - 14:23 #4
Som jeg kan se er der ikke tale om numeriske felter men varchar og text. der søges også med bogstaver og ord.

jeg har ændret lidt i koden og vil prøve det når jeg kan. Men ellers skal jeg måske lave en ny søge funktion med flere input og valgmuligheder?

SELECT DISTINCT `Vare`.`Opgaveid` AS OID, `Opgaver`.`Afsluttet`, `Opgaver`.`Faknr`, `Kunder`.`Kunde navn` from `Vare`
JOIN `Opgaver` on `Opgaver`.`ID` = `Vare`.`Opgaveid`
JOIN `Arbejdesbeskriv` ON `Arbejdesbeskriv`.`Opgaveid` = `Opgaver`.`ID`
JOIN `Kunder` ON `Kunder`.`ID` = `Opgaver`.`Kunde`
JOIN `SN_Numre` ON `Vare`.`idvare` = `SN_Numre`.`vareid`
WHERE (
`Vare`.`varenr` LIKE '%5099206027275%' OR
`Vare`.`beskriv` LIKE '%5099206027275%' OR
`Vare`.`Rabatgruppe` LIKE '%5099206027275%' OR
`Opgaver`.`Opgave` LIKE '%5099206027275%' OR
`Arbejdesbeskriv`.`Arbejbeskriv` LIKE '%5099206027275%' OR
`SN_Numre`.`SNnr` LIKE '%5099206027275%'
) ORDER BY `Opgaver`.`Opretdato` DESC LIMIT 100
Avatar billede DMO Novice
27. juli 2015 - 11:46 #5
jeg lavede en join på SN_Numre så nu timer den ikke ud. At den er langsom var ikke rigtig mit problem. Det er selvfølgelig ikke et pro løsning eller svar på hvorfor den hang og gik i stå.
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

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