2012-03-21 10 views
34

Używam PDO w mojej aplikacji PHP. To łączy się z serwerem MySQL na tym samym serwerze:Dlaczego budowanie połączenia PDO jest wolne?

$db = new PDO(mysql:host=localhost;dbname=test, $username, $password); 

Stworzyłem dwie strony z tego samego wyjścia (tylko niektóre fikcyjne dane w czystym HTML), z których jedna zawiera wezwanie do tworzenia PDO. Jeśli otworzę stronę, która nie korzysta z połączenia, odpowiedź jest szybsza o 0,5 do 1 sekundy.

+0

Jak uzyskać dane z bazy danych bez połączenia? – deceze

+0

Fałszywe dane to tylko zwykły HTML, nic z bazy danych. –

+1

Ten efekt nie jest normalny. Wygląda na to, że masz problemy z serwerem. Być może serwer SQL nie reaguje zbyt wolno. Spróbuj zbadać więcej, ale wydaje mi się, że to bardziej przypomina problem ServerFault. –

Odpowiedz

77

Robiłem niektóre googling, i po przeczytaniu this thread, zmieniłem localhost do 127.0.0.1. To rozwiązuje problem ...

+2

Zrobiłeś mój dzień! Korzystanie z localhost zajęło całą sekundę do połączenia, używając 127.0.0.1 zajmuje to około milisekundy. – CodeZombie

+1

Bardzo pomocne badania. Próbowałem znaleźć rozwiązanie, dopóki to nie pomogło. Upuszczono z 1s na mniej niż 3ms. –

+8

Trochę "dlaczego": Używając nazwy hosta, PHP jest zmuszone do wyszukiwania w tabeli DNS (wolno!). Jeśli jest to duża tabela, znalezienie pozycji może zająć dużo czasu. Używając statycznego adresu IP, możesz całkowicie pominąć to rozwiązanie. Możesz to zrobić nawet w przypadku produkcji z nielokalnymi adresami IP! – Gerben

Powiązane problemy