Punkt widzenia Apaczów
Apache ma jeden proces nadrzędny. Ten proces tworzy procesy potomne, które będą obsługiwać wszelkie żądania przychodzące do serwera WWW. Początkowa liczba procesów potomnych uruchamianych podczas uruchamiania serwera WWW jest konfigurowana przez StartServers
dyrektywy w konfiguracji Apache. Liczba rośnie w miarę potrzeb wraz ze wzrostem liczby żądań trafiających na serwer sieciowy aż do ServerLimit
został osiągnięty.
PHP i trwałe połączenia
Jeśli PHP (uruchomiony jako mod_php, ponieważ CGI wszystkie zasoby są zwolnione pod koniec wykonywania skryptu) otrzymuje teraz polecenie ustanowienia trwałego połączenia z bazą danych dla żądania, połączenie to zostanie wstrzymane nawet po zakończeniu działania skryptu. Połączenie jest teraz hold to połączenie między procesem potomnym Apache, który był obsługiwany przez żądanie, a serwerem bazy danych i może być ponownie użyte przez każde żądanie obsługiwane przez ten właśnie proces potomny.
Jeśli z jakiegoś powodu (nie pytaj mnie dokładnie dlaczego) proces potomny jest zajęty dłużej niż rzeczywiste żądanie i nadchodzi kolejne żądanie, nadrzędny proces Apache przekierowuje to żądanie do (nowego) procesu potomnego, który może nie dotychczasowe połączenie z bazą danych. Jeśli musi to zrobić podczas wykonywania skryptu, podnosi SID, jak zaobserwowałeś. Teraz są dwa połączenia utrzymywane przez dwa różne procesy potomne Apache.
Pamiętaj, że...
Ważne jest, aby wiedzieć, że może to również spowodować wiele problemów. Jeśli występuje nieskończona pętla lub przerwana transakcja lub jakiś inny może być nawet nieprzewidywalny błąd podczas wykonywania skryptu, połączenie jest blokowane i nie może być ponownie użyte .Może się również zdarzyć, że wszystkie dostępne połączenia bazy danych zostaną wykorzystane, ale inny proces potomny serwera Apache próbuje uzyskać dostęp do bazy danych.Ten proces jest na razie zablokowany, dopóki połączenie nie zostanie zwolnione przez bazę danych lub Apache (przekroczenie limitu czasu lub dobrowolnie przez zakończenie).Wszelkie dalsze informacje na ten temat na tej stronie:http://www.php.net/manual/en/features.persistent-connections.php
Mam nadzieję, że wszystko, o czym dyskutowaliśmy w naszym komentarzu, zostało właściwie podsumowane i niczego nie zapomniałem. Jeśli tak, zostaw mi podpowiedź, a ja to dodam. :)
Edycja:
Właśnie skończyłem czytać artykuł @MonkeyZeus wspomniany w tym komentarzu. Opisuje on proces, który podsumowałem powyżej i dostarcza przydatnych informacji o tym, jak zoptymalizować serwer Apache, aby lepiej współpracował z trwałymi połączeniami. Może być używany z backendami bazy danych Oracle lub bez, Chociaż.Powinieneś zajrzeć:http://www.oracle.com/technetwork/articles/coggeshall-persist-084844.html