Czy ważne jest, aby zamykać połączenia mysql pod względem wydajności, czy też automatycznie zamyka się po uruchomieniu pliku php?
Czy ważne jest, aby zamykać połączenia mysql pod względem wydajności, czy też automatycznie zamyka się po uruchomieniu pliku php?
Odpowiedzi:
Z dokumentacji :
Uwaga: Link do serwera zostanie zamknięty, gdy tylko zakończy się wykonywanie skryptu, chyba że zostanie zamknięty wcześniej przez jawne wywołanie mysql_close ().
Jeśli twój skrypt ma sporo przetwarzania do wykonania po pobraniu wyniku i pobrał pełny zestaw wyników, zdecydowanie powinieneś zamknąć połączenie. Jeśli tego nie zrobisz, istnieje szansa, że serwer MySQL osiągnie limit połączeń, gdy serwer sieciowy jest intensywnie używany. Jeśli nie możesz zamknąć połączenia MySQL przed końcem skryptu, jest to czystsze, choć niepotrzebne jest robienie tego jawnie.
Nie jestem pewien, jak fastcgi wpływa na rzeczy. Jedna strona twierdzi, że kompilacja PHP obsługująca fastcgi utworzy trwałe połączenia, nawet dla mysql_connect. Jest to sprzeczne z dokumentacją, ponieważ połączenie jest zamykane, gdy kończy się proces, a nie skrypt. Zamiast testować, zalecę użycie mysql_close (). Właściwie polecam używanie PDO , jeśli jest dostępne.
"The link to the server will be closed as soon as the execution of the script ends."Kiedy użytkownik zamyka stronę wcześniej, nie ma to znaczenia dla serwera PHP. Uruchamia skrypt jak zawsze i kończy skrypt jak zawsze. Tylko użytkownik nie zobaczy wyniku.
Czy to ważne? Nie tak bardzo
Czy jest to dobra praktyka do naśladowania? Tak.
Nie rozumiem, dlaczego nie chciałbyś go zamknąć.
mysql_closenapisane: „Używanie mysql_close () zwykle nie jest konieczne, ponieważ nietrwałe otwarte linki są automatycznie zamykane po zakończeniu wykonywania skryptu”. Nie uważałbym za złą praktykę niezamykania połączenia.
Kiedy używasz czegoś takiego jak cgi, całkowicie niepotrzebne jest zamykanie połączeń mysql, ponieważ zamykają się one automatycznie po zakończeniu wykonywania skryptu. Podczas korzystania z trwałych technologii, takich jak mod_perl i innych, które utrzymują połączenia między żądaniami, ważne jest, aby śledzić połączenia, zmienne globalne itp.
Zasadniczo w przypadku trwałych danych posprzątaj po sobie. W przypadku banalnych, nietrwałych danych wszystko to zniknie, gdy żądanie i tak zakończy się. Tak czy inaczej, najlepszą praktyką jest zawsze zamykanie połączeń.
Jest zamykany, gdy tylko skrypt zakończy wykonywanie. Chyba że otworzyłeś trwałe połączenie. Najlepiej byłoby zwolnić zasób (połączenie w tym miejscu), gdy tylko skończysz. Chyba że istnieje duża szansa, że wkrótce będziesz go ponownie potrzebować podczas wykonywania.
Pule połączeń lub używanie połączeń trwałych (jeśli o to chodziło) to dobry pomysł, jeśli jesteś za jednym serwerem bazy danych. Jeśli jednak jest więcej serwerów i równoważenie obciążenia może zaszkodzić dystrybucji pracy. Zazwyczaj niektórzy klienci wykonują ciężkie zapytania, a inni lżejsze. Więc jeśli to samo połączenie jest używane przez n ponad, niektóre serwery byłyby mocno obciążone, podczas gdy inne byłyby niewykorzystane. Rozważ użycie mniejszych ttl i zmiennego rozmiaru puli połączeń.
Większość CMS zamyka połączenie MySQL na końcu żądania, co jest naprawdę bez znaczenia, ponieważ PHP i tak to zrobi.
Jeśli jednak masz skrypt, w którym połączenie nie jest już potrzebne, powiedzmy w środku skryptu, a następnie mają miejsce inne ciężkie działania, dobrym pomysłem jest jawne zamknięcie połączenia. To zwolni niektóre zasoby.
Obecnie wiele powiedziano o korzyściach płynących z zamykania połączenia, ale prawie nic nie powiedziano o korzyściach wynikających z niezamykania połączenia. Zasadniczo, jeśli nie zamkniesz połączenia na końcu skryptu, to naprawdę oszczędzasz trochę zasobów. Wyobraź sobie aplikację internetową (lub dowolną aplikację) otrzymującą 100 odsłon na sekundę. Tak więc w każdej sekundzie będziesz musiał wywoływać mysqli_close100 razy - co oznacza, że w każdej sekundzie masz 100 niepotrzebnych powrotów do serwera bazy danych, aby zamknąć otwarte połączenia. Z punktu widzenia wydajności jest to czysty narzut, ponieważ PHP i tak sprawdzi, czy istnieją otwarte połączenia po zakończeniu skryptu i zamknie te połączenia, i może tak być, ponieważ wszystko dzieje się tak szybko, że PHP nie widzi, że masz zamknął te połączenia i spróbuje je ponownie zamknąć.
Uwaga: powyższa odpowiedź zakłada, że nie korzystasz z połączeń trwałych (połączenia trwałe nie są używane w żadnym z głównych systemów CMS).