IIS + MySQL + PHP = slow response

Walczyłem wczoraj z fajnym błędem, o tyle fajnym że nie spodziewałem się go. Zainstalowałem Windows Server 2012 + IIS + PHP 5.4.5 + MySQL 5.5, wszystko elegancko skonfigurowane, MySQL na 8GB Ramu skonfigurowany na 110% w my.ini śmiga jak marzenie. 150k INSERT’ów w 0,68 sec. SELECT działa płynnie, zwraca dane jak marzenie, wszystko wygląda ok … do czasu. Uruchamiam Agility.B2B i coś taka zamuła. Samo wczytanie się strony głównej 3.8 sec i w głowie alert – ‚coś jest nie hellouł!’. Szybkie wertowanie slow.loga MySQL’a i diagnoza – baza danych działa szybko, coś z IIS’em.

# Time: 131127 14:42:04
# User@Host: agility[agility] @  [192.168.0.50]
# Query_time: 0.000977  Lock_time: 0.000851 Rows_sent: 0  Rows_examined: 0
use agility3;
SET timestamp=1385559724;
SELECT reg_Id, reg_Imie, reg_Nazwisko, reg_Ulica, reg_Nr_Domu, reg_Nr_Lokalu, reg_KodPocztowy, reg_Miejscowosc, reg_Wojewodztwo, reg_Panstwo, reg_PESEL, reg_NIP, reg_Email, reg_Usr_Id, reg_Firma, reg_Kh_Id FROM acc_user_register;
# Time: 131127 14:42:33
# User@Host: agility[agility] @  [192.168.0.50]
# Query_time: 0.000245  Lock_time: 0.000054 Rows_sent: 41  Rows_examined: 41
SET timestamp=1385559753;
SELECT * FROM agility3.acc_syn_tabele
LIMIT 0, 1000;
# Time: 131127 14:42:51
# User@Host: agility[agility] @  [192.168.0.43]
# Query_time: 0.020804  Lock_time: 0.006285 Rows_sent: 1000  Rows_examined: 1000
use agility2;
SET timestamp=1385559771;
SELECT * FROM agility2.acc_kh_kontrahent
LIMIT 0, 1000;

 

Przeglądam php.ini, zend_optimizer działa, skonfigurowany, licencjonowanie wyłączone – to nie to. Wertowanie PDO MySQL’a – aktualne, działa. I człowiek zachodzi w głowę co jest … światełka w tunelu brak. Testy wydajnościowe samej strony napisanej w PHP – odpowiedź rzędu 0.83 ms., HTML 0.34 ms. Czyli PHP ma problem na poziomie komunikacji z bazą danych. Wertowanie internetów, książki o IIS’ie i ogólnie 2h w dupkę tylko po to żeby dowiedzieć się że translacja ‚localhost’ na ‚127.0.0.1’ zajmuje IIS’owi TAK WIELE CZASU!

Finalnie wpisałem w database.ini zamiasto localhost -> 127.0.0.1 i aplikacja chodzi jak rakieta. THX MS!

Kasztelan Paweł

Programista samouk, zakochany w ZF i Laravel, szerzący opinię że PHP + JS + HTML + CSS to są języki w których może zostać stworzona aplikacja równie dobra, a nawet lepsza od twardego klienta.