In der Webentwicklung, insbesondere wenn PHP für MySQL -Datenbankvorgänge verwendet werden, wird die Funktion mySQL_CLOSE () verwendet, um die Datenbankverbindung zu schließen. Obwohl das Schließen der Verbindung die Ressourcen freisetzen kann, führt häufiger Anruf bei MySQL_CLOSE () , insbesondere in hohen Parallelitätsszenarien mit großen Mengen an Anfragen in kurzer Zeit, unnötige Leistungsaufwand, was zu einer häufigen Einrichtung und Zerstörung von Datenbankverbindungen führt, die sich auf die Systemreaktionsgeschwindigkeit auswirken.
Um dieses Problem zu lösen, ist der Verbindungspool -Mechanismus zu einer gemeinsamen Optimierungsmethode geworden. In diesem Artikel wird vorgestellt, wie häufige Anrufe von MySQL_CLOSE () durch Verbindungspooling in PHP -Webanwendungen reduziert werden, um die Systemleistung und -stabilität zu verbessern.
Jedes Mal, wenn eine Datenbankverbindung hergestellt wird, umfasst sie Overheads wie Netzwerkkommunikation, Identitätsauthentifizierung, Ressourcenzuweisung usw. Nach dem Schließen der Verbindung wird eine neue Verbindung aufgebaut, wenn Sie sie anfordern und viel Zeit und Ressourcen verschwenden. Eine große Anzahl von Anfragen in kurzer Zeit führt zu:
Verbindungen werden häufig erstellt und geschlossen, wobei die CPU und die Speicherbelastung erhöht werden.
Der Datenbankserver steht unter zusätzlichem Druck und kann einen Verbindungspool -Depletion erleben.
Wirkt sich auf die Benutzererfahrung aus und verlangsamt die Antwort.
Daher ist es entscheidend, MySQL_CLOSE () -Aufrufe zu reduzieren und Datenbankverbindungen rational wiederzuverwenden.
Ein Verbindungspool ist ein Container, der eine bestimmte Anzahl von Datenbankverbindungen im Voraus festlegt, und diese Verbindungen können wiederverwendet werden. Die Anwendung erhält die Verbindung aus dem Verbindungspool und schließt sie nach der Verwendung nicht, sondern gibt die Verbindung zum Verbindungspool zurück, damit die nächste Anfrage wiederverwendet wird.
Vorteile des Verbindungspoolings:
Reduzieren Sie die Anzahl der Verbindungseinrichtungen und die Schließzeiten.
Datenbankserverlast reduzieren.
Verbesserung der Reaktionsgeschwindigkeit und gleichzeitigen Verarbeitungsfunktionen.
Typische Webanforderungen in PHP selbst sind "Short Lifecycle", und alle Ressourcen werden nach jeder Anfrage veröffentlicht, einschließlich Datenbankverbindungen. Dies widerspricht natürlich dem Verbindungsbeamtenmechanismus. Lösungen umfassen:
Persistente Verbindung : PHP stellt die Funktion mySQL_PConnect () zur Erstellung einer persistenten Verbindung bereit und vermeidet das Aufstellen und Schließen von Verbindungen jedes Mal, wenn Sie anfordern.
Verwenden Sie Middleware oder Extensions : PDO in Kombination mit Verbindungspooling -Middleware oder Verwenden von SWOOLE , Workerman und anderen Long -Verbindungs -Frameworks.
Die Anwendungsebene simuliert das Verbindungspooling : Verwalten Sie Verbindungen mit Cache oder gemeinsamer Speicher.
Das Folgende konzentriert sich auf die Verwendung von MySQL_PConnect (), um einfache persistente Verbindungen zu implementieren und MySQL_CLOSE () -Aufrufe zu reduzieren.
<?php
// Stellen Sie eine Verbindung zur Datenbank her,Verwenden von anhaltender Verbindung
$link = mysql_pconnect('m66.net', 'username', 'password');
if (!$link) {
die('Could not connect: ' . mysql_error());
}
// Wählen Sie eine Datenbank aus
mysql_select_db('database_name', $link);
// Eine Frage ausführen
$result = mysql_query('SELECT * FROM table_name', $link);
while ($row = mysql_fetch_assoc($result)) {
echo $row['column_name'] . '<br>';
}
// Beachten:Eine anhaltende Verbindung erfordert keinen Anruf mysql_close()
// mysql_close($link); // Diese Funktion wird nicht aufgerufen,Die Verbindung wird wiederverwendet
?>
Im obigen Code erstellt MySQL_PConnect () eine anhaltende Verbindung, die am Ende des Skripts nicht geschlossen ist, sondern vom PHP -Management wiederverwendet wird. Dies vermeidet häufige Aufrufe von MySQL_CLOSE () und wiederherstellende Verbindungen.
Ressourcenveröffentlichung : Obwohl anhaltende Verbindungen die Leistung verbessern, können sie Verbindungen für lange Zeit dazu führen, Datenbankressourcen zu belegen. Sie müssen die maximale Anzahl von Datenbankverbindungen vernünftigerweise festlegen.
Kompatibilität : Die MySQL_* -Funktion ist veraltet. Es wird empfohlen, MySQLI oder PDO zu verwenden, die auch anhaltende Verbindungen unterstützen.
Erweiterteres Verbindungsbadung : Für Projekte mit hohen Anforderungen an die Genauigkeit wird empfohlen, Middleware- oder Server -Frameworks zu verwenden, die die Verbindung von Verbindungspooling wie SWOOLE unterstützen, um mit PDO zusammenzuarbeiten, um eine flexiblere Verbindungsverwaltung zu erzielen.
Beispiel: Persistente Verbindung mit PDO
<?php
$dsn = 'mysql:host=m66.net;dbname=database_name;charset=utf8';
$options = [
PDO::ATTR_PERSISTENT => true, // Aktivieren Sie eine anhaltende Verbindung
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
];
try {
$pdo = new PDO($dsn, 'username', 'password', $options);
$stmt = $pdo->query('SELECT * FROM table_name');
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
echo $row['column_name'] . '<br>';
}
} catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}
?>
Durch den Verbindungs -Pooling -Mechanismus, insbesondere die persistente Verbindungstechnologie, können PHP -Webanwendungen häufige Aufrufe bei MySQL_CLOSE () erheblich reduzieren, die Wiederverwendung von Datenbankverbindungen verbessern, den Systemaufwand reduzieren, die Leistung und gleichzeitige Verarbeitungsfunktionen verbessern.
Obwohl MySQL_PConnect () eine einfache Möglichkeit ist, anhaltende Verbindungen in tatsächlichen Projekten zu implementieren, wird empfohlen, moderne Erweiterungen wie MySQLI und PDO in Kombination mit Middleware- oder Server-Seite-Frameworks zu verwenden, um eine vollständigere Verbindungspool-Verwaltung zu erzielen.