06. maj 2003 - 09:35Der er
4 kommentarer og 3 løsninger
MS SQL, PHP og remote connection = langsomt!
Jeg sidder her og prøver for først gang at lege lidt med MS SQL i PHP. Vores setup ser ud som følger: Laptop i Vejle (kører PHP 4.3.1, Apache 1.3 samt Windows XP der forbinder til en odbc-connection oprettet i Windows) forbinder til database-server i Viborg (kører IIS, MS SQL).
Problemet kommer når vi benchmarker vores querys. Connection-åbning tager ca. 115 - 125 milisekunder, mens en query der trækker 100 resultater ud fra 2 - 3 tabeller (inner join'et og subselect'et osv.) tager 11 (!!!) sekunder.
Er der nogen der har en kreativ forklaring? Kan det være på grund af den relativt "lange" vej data skal bevæge sig (kan jeg umuligt forestille mig), firewalls, indbygget sikkerhed i Windows, det faktum at der først skal forbindes internt til ODBC som så connecter videre til MS SQL, eller andet? Vi er helt på bar bund, og 11 sekunder for 100 resultater er *meget*. Køres samme query i ASP på en maskine i serverparken i Viborg, tager det milisekunder, hvilket er den hastighed vi også gerne vil ned på.
jeg har prøvet at pinge DB-serveren, men det er der tilsyneladende lukket for i firewall'en. Forbindelsen burde der dog ikke være noget i vejen for, Vejle har 2048/512 og Viborg har 155 mbit.
Jeg hiver ca. 15 felter ud og mængden af tekst er yderst begrænset. Det eneste "avancerede" er joins'ne, men jeg har lavet mere avancerede query's i MySQL før, uden at det har givet problemer af nogen art.
Der er mht. performance ikke nogen nævneværdige forskelle mellem OLEDB og ODBC API'erne, ihvertfald ikke noget derkan forklare millisek -> sek. Jeg synes det lugter af, at PHP'en laver noget mærkeligt. Jeg kan ikke lige gennemskue hvad du præcist gør, men det lugter af, at du laver et remote join. Det betyder normalt at du får hentet ALLE rækker fra tabellerne over, hvorefter joinet udføres lokalt = meget dyrt hvis der er meget i tabellerne. Ret normalt problem når man laver linked tables i MS Access. Det er nemt at prøve, du skyder 'bare' queryen af i en ODBC-ting, og timer det. Har du odbctest (odbcte32.exe eller odbct32w.exe)?
Vi har flyttet sitet til en server indenfor Viborgs firewall, og problemet forsvandt som dug for solen. zapzap, læg et svar, så får du del i pointene. Åbenbart Viborgs firewall eller lign. som gav problemet, men al hjælp belønnes. :)
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.