php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 05.12.2011, 14:09  
Neuer Benutzer
 
Registriert seit: 10.02.2008
Beiträge: 28
schani
Standard MySQL bestehende Verbindung verwenden?

Hallo,

ich habe ein einfaches php Script das alle paar Sekunden von verschiedenen IP´s augerufen wird. Dabei wird ein Datenbankzugriff erstellt und ein INSERT durchgeführt.

Sekunden später das selbe. Jedesmal wird mir aber eine neue Datenbankverbindung erstellt welche dann auch einen Verbindungs Thread vorhält. So kommen schon mal 30 Verbindungen zu Stande die eigentlich nutzlos rumliegen bis ein Timeout sie wieder abschaltet.

In einem Config.php File verbinde ich zur Datenbank
PHP-Code:
$connectid mysql_pconnect ($DBHost,$DBUName,$DBPasswort);
if(
mysql_errno()){
exit; 
}; 
mysql_select_db($DBName,$connectid); 
Dann in einem weiteren File binde ich das config.php ein und führe den INSERT aus:
PHP-Code:
include('config.php');

$logeintrag "INSERT INTO log (datum) VALUE (now())";
if (
$ergebnis=mysql_query($logeintrag)){
}; 
Muss ich jetzt per mysql_close($connectid) die Datenbankverbindung wieder schließen? Dann macht er aber beim nächsten Connect wieder eine neu Verbindung auf. Ist es nicht sinnvoller eine Verbindung immer wieder zu verwenden? Aber wie stellt man das an? Die Anfragen kommen ja immer von verschiedenen Seitenbesuchern, also IP´s.

Wie löst man das? Jede Datenbankverbindung gleich wieder schließen? Oder kann man eine bestehende Verbindung explizit wieder aufnehmen und damit weiterarbeiten?

Besten Dank für Hilfe

Christian
schani ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 05.12.2011, 14:29  
Erfahrener Benutzer
 
Registriert seit: 01.09.2010
Beiträge: 4.561
PHP-Kenntnisse:
Fortgeschritten
eagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Mensch
Standard

erm .. du hast falsche Vorstellungen von der Arbeitsweise von PHP auf dem Webserver - da rennt nicht dauerhaft eine Anwendung und hält dir zum Beispiel dauerhaft eine DatenbankVerbindung bereit - du MUSST jedesmal eine neue Verbindung bauen.

Und diese Verbindung ist dann auch nicht offen bis zum Geht-nicht-mehr oder irgendeinem Time-Out , vielmehr wird die Verbindung automatisch geschlossen, wenn das PHP-script beendet ist

der normale Ablauf ist dabei folgender

durch den User wird im Webbrowser ein Request ausgelöst
-> Request wird an Webserver geschickt
--> Webserver startet für den Request einen neuen Worker-Thread
---> Worker "sieht" "da brauch ich PHP" und startet den PHP-Interpreter
----> PHP-Script wird abgearbeitet und dabei HTML-Antwort erstellt
-----> Dabei Datenbank-Verbindung geöffnet
------> PHP-Script fertig , Antwort an Worker-Thread, DB-Verbindung zu
-------> PHP beendet
--------> Antwort an CLient
---------> Worker-Thread zu ...

spätestens an der Stelle "..." weiß der Webserver nicht mal mehr, dass es Client XYZ gibt - wenn man nicht mit Session-Verwaltung was dagegen unternimmt - wegen der Requestbasierten Arbeitsweise gibt es aber auch deine "bestehende" Verbindung nicht

Von daher solltest du nur innerhalb deines Scriptes darauf achten, dass nicht zig-Mal eine neue Datenbank-Verbindung angefordert wird.... einmal pro Sitzung ist aber quasi unumgänglich und auch problemlos
__________________
"Irren ist männlich", sprach der Igel und stieg von der Drahtbürste

Geändert von eagle275 (05.12.2011 um 14:38 Uhr).
eagle275 ist offline   Mit Zitat antworten
Alt 05.12.2011, 14:53  
Neuer Benutzer
 
Registriert seit: 10.02.2008
Beiträge: 28
schani
Standard

So hab ich mir das ja auch vorgestellt. Dachte ich die letzten Jahre zumindest. Aber wenn ich mit die aktuellen Verbindungen meines MySQL Servers so ansehe (SHOW FULL PROZESSLIST), stehen da laufend schlafende Verbindungen von jenem Script drin. Ich habe auf dem Server auch noch einige TYPO3 und WordPress installationen drauf. Die erzeugen keine schlafenden Connections. Die TYPO3 Seite wird aufgerufen und danach ist die Verbindung nicht mehr zu sehen, fertig. Oder hällt MySQL immer einige Threads offen auch wenn Sie nicht benutzt werden und überschreibt dann bei Bedarf einen alten einfach?

Christian
schani ist offline   Mit Zitat antworten
Alt 05.12.2011, 15:09  
Erfahrener Benutzer
 
Registriert seit: 24.10.2008
Beiträge: 298
PHP-Kenntnisse:
Fortgeschritten
KarlEgon befindet sich auf einem aufstrebenden Ast
Standard

mysql_pconnect <-- Dadurch werden deine Verbindungen aufrecht erhalten
KarlEgon ist offline   Mit Zitat antworten
Alt 05.12.2011, 15:14  
Erfahrener Benutzer
 
Registriert seit: 01.09.2010
Beiträge: 4.561
PHP-Kenntnisse:
Fortgeschritten
eagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Mensch
Standard

das deutet eher auf unsaubere Programmierung hin

nach dem Muster:
Code:
$db=neue Verbindung 
..
..
..
$db=neue Verbindung // ohne die alte zu schließen
- bei diesem Konstrukt wird die zuerst erstellte Verbindung quasi "in der Ecke" stehen gelassen - und diese Verbindungen werden dann erst geschlossen, wenn der Garbage-Collector aufräumt. Dem kannst du abhelfen, indem du je nach verwendeter Datenbank-Erweiterung

a) den NewLink-Parameter korrekt setzt (mysql_connect)
b) mysql_pconnect

schau mal nach "persistente" Verbindung ...
__________________
"Irren ist männlich", sprach der Igel und stieg von der Drahtbürste
eagle275 ist offline   Mit Zitat antworten
Alt 05.12.2011, 21:44  
Erfahrener Benutzer
 
Benutzerbild von lstegelitz
 
Registriert seit: 07.09.2009
Beiträge: 4.005
PHP-Kenntnisse:
Fortgeschritten
lstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nett
Standard

Persistente Connections sind nicht unbedingt das Gelbe vom Ei, vor allem sind sie kein Patentrezept zur Leistungssteigerung... es kann sogar kontraproduktiv sein.

http://php.net/manual/de/features.pe...onnections.php

http://dev.mysql.com/doc/refman/5.5/...nnections.html
__________________
Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.
lstegelitz ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] Bestehende Mysql passwörter in MD5 verschlüsseln pitti752002 Datenbanken 2 22.09.2010 15:34
[Erledigt] PHP bekommt keine Verbindung zu MySQL SaKe Datenbanken 15 20.09.2010 14:45
MySQL killt Verbindung nach 60 Sekunden? DP1978 Datenbanken 2 24.04.2010 01:54
MySQL Verbindung schlägt fehl, trotz richtigem USER/PW CyberNibbler Datenbanken 5 24.09.2009 19:43
Zerzögerte Verbindung zu MySQL DB über lokales Netzwerk j.foe Datenbanken 4 17.09.2009 12:27
Verbindung zur Teamspeak MySQL Datenbank herstellen errox PHP Tipps 2008 24 06.03.2008 16:54
MySQL verbindung TeazY PHP Tipps 2008 2 18.12.2007 14:34
Serverlast bei externer Mysql Verbindung R4v3r Datenbanken 1 13.10.2007 11:43
Performance externe MySQL Verbindung R4v3r Datenbanken 2 20.08.2007 07:47
Verbindung HTTP-Server MySQL Server über php - genaueres netti Datenbanken 5 11.06.2007 19:04
MySQL Server startet nicht mehr richtig... Datenbanken 16 03.03.2006 19:40
persistente MySQL Verbindung und clonen HStev PHP-Fortgeschrittene 16 22.11.2005 13:24
php Variablen in MySQL Abfrage verwenden (WHERE Bedingung) PHP Tipps 2005 20 20.04.2005 20:05
MySQL Date/Time-Feld in PHP verwenden.... MortakArtos PHP Tipps 2005 2 13.04.2005 12:49
Keine Verbindung mit MySQL Server Datenbanken 4 10.03.2005 21:00

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
mysql dauerhaft offen, mysql mit php offen halten, verbindung zur mysql datenbank aufrechterhalten ?, php bestehende mysql verbindung, mysql connection immer wieder schließen, bestehenden mysql server nutzen, php bestehende mysql verbinung verwenden, verbindung bestehender datenbank php, mysql timeout schlafende prozesse beenden, php mysql letzte verbindung nutzen, mysql bestehende verbindung offen lassen, pitti752002

Alle Zeitangaben in WEZ +2. Es ist jetzt 15:56 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum