PHP implementiert den Effekt des MySQL-Verbindungspools
In diesem Artikel wird hauptsächlich der PHP-Code zum Implementieren des MySQL-Verbindungspooleffekts vorgestellt. Freunde, die ihn benötigen, können sich auf
Loop beziehen, um Verbindungen aus dem MySQL-Verbindungspool abzurufen, ohne wiederholt neue Verbindungen erstellen zu müssen.
Änderung der Referenzkonfiguration: Sie können sich auf den folgenden Artikel beziehen
Verhindern Sie, dass die Anzahl der Besuche zu groß wird und die Anzahl der Verbindungen überfüllt wird
<?php /** * @author xuleyan * @title mysql类 */ class DbHelper{ //连接池 private $_pools = []; //连接池大小 const POOLSIZE = 5; const USERNAME = "root"; const PASSWORD = "root"; const HOST = "127.0.0.1"; const DB = "test"; public function __construct() { $db = self::DB; $username = self::USERNAME; $password = self::PASSWORD; $host = self::HOST; //持久化连接 $presistent = array(PDO::ATTR_PERSISTENT => true); for ($i=0; $i < self::POOLSIZE; $i++) { $connection = new PDO("mysql:dbname=$db;host=$host", $username, $password); // sleep(3); array_push($this->_pools, $connection); } } //从数据库连接池中获取一个数据库链接资源 public function getConnection() { echo 'get' . count($this->_pools) . "<br>"; if (count($this->_pools) > 0) { $one = array_pop($this->_pools); echo 'getAfter' . count($this->_pools) . "<br>"; return $one; } else { throw new ErrorException ( "<mark>数据库连接池中已无链接资源,请稍后重试!</mark>" ); } } //将用完的数据库链接资源放回到数据库连接池 public function release($conn) { echo 'release' . count($this->_pools) . "<br>"; if (count($this->_pools) >= self::POOLSIZE) { throw new ErrorException ( "<mark>数据库连接池已满!</mark>" ); } else { array_push($this->_pools, $conn); // $conn = null; echo 'releaseAfter' . count($this->_pools) . "<br>"; } } public function query($sql) { try { $conn = $this->getConnection(); $res = $conn->query($sql); $this->release($conn); return $res; } catch (ErrorException $e) { print 'error:' . $e->getMessage(); die; } } public function queryAll($sql) { try { $conn = $this->getConnection(); $sth = $conn->prepare($sql); $sth->execute(); $result = $sth->fetchAll(); return $result; } catch (PDOException $e) { print 'error:' . $e->getMessage(); die; } } }
Rufen Sie dies in einer anderen Datei auf
<?php require_once 'db.php'; $sql = 'select * from user'; $dbhelper = new DbHelper; for ($i=0; $i < 10; $i++) { $res = $dbhelper->query($sql); // var_dump($res) . PHP_EOL; }
So verwenden Sie den Verbindungspool von ThinkPHP, um eine Verbindung zu MySQL herzustellen
Weil ein kleiner Fehler dazu führte, dass das Projekt eines Nachts eine große Anzahl von Verbindungsanfragen an MySQL sendete. Gleichzeitig gab es ein Problem mit dem DNS des MySQL-Servers, was zu einer Zeitüberschreitung der Anti-Auflösung führte . Schließlich wurde der MySQL-Server zum Leben erweckt.
Endlich wurde der Fehler behoben und wir untersuchten, wie wir den MySQL-Verbindungspool vergrößern können.
Nachdem ich in den letzten zwei Tagen gesucht habe, habe ich festgestellt, dass es in der ThinkPHP-Dokumentation keine Dokumentation zum Verbindungspooling gibt. Also habe ich den Code selbst studiert.
Zuallererst: Es gibt drei häufig verwendete MySQL-Erweiterungsbibliotheken für PHP: mysql, mysqli, pdo_mysql.
* mysqli unterstützt kein Verbindungspooling.
* pdo_mysql wird unterstützt, die pdo-Erweiterung von thinkPHP unterstützt jedoch nicht mysql, sondern nur:'MSSQL','ORACLE','Ibase','OCI' (siehe Zeile 59 von Pdo.class.php)
* MySQL-Unterstützung über die Methode: mysql_pconnect. (Spezifische Parameter finden Sie in der offiziellen PHP-Dokumentation)
1 Die Möglichkeit, ThinkPHP für die Aktivierung langer Verbindungen zu aktivieren, ist:
class BaseMysql extends Model { protected $connection = array( 'db_type' => 'mysql', 'db_user' => '***', 'db_pwd' => '*******', 'db_host' => '*******', 'db_port' => '3306', 'db_name' => 'custom', 'db_params' => array('persist' => true), ); }
Wenn Sie denken, dass alles gut wird, wenn Sie dies nur konfigurieren, liegen Sie völlig falsch.
2 mysql -> my.cnf geänderte Konfiguration:
[mysqld]
interactive_timeout =60 // Ablaufzeit der interaktiven Verbindung (MySQL-Client).
wait_timeout =30 //Ablaufzeit einer langen Verbindung. Das muss geändert werden! Der Standardwert beträgt 8 Stunden. Wenn das Anforderungsvolumen groß ist, ist die Anzahl der Verbindungen bald erschöpft.
max_connections = 100 //Die maximale Anzahl von Verbindungen kann als Größe des Verbindungspools betrachtet werden
3 php.ini-Änderung:
[MySql]
mysql.allow_persistent = On
mysql.max_persistent = 99 // Muss kleiner sein als die maximale Anzahl von Verbindungen, die von mysql konfiguriert wurden
mysql.max_links = 99
4 Wenn der Webserver Apache ist, muss Keep-Alive aktiviert sein. Andernfalls kann die lange Verbindung nach Beendigung der Anforderung nicht wiederverwendet werden.
Webserver ist der Fall von Nginx:
pm = dynamisch // Standardmäßig einige Unterprozesse starten, um http-Anfragen zu verarbeiten.
pm.max_children // Maximale Anzahl untergeordneter Prozesse. Diese Konfiguration sollte kleiner sein als die max_connections von MySQL.
5 Wenn Sie feststellen, dass es immer noch nicht verwendet werden kann, überprüfen Sie bitte, ob das Keepalive des Betriebssystems aktiviert ist.
Übersicht:
Sie müssen gleichzeitig die Keep-Alive-Verbindung und die lange Datenbankverbindung aktivieren, da die lange Verbindung sonst die Anzahl der MySQL-Verbindungsressourcen vergeblich belegt und kann nicht wiederverwendet werden.
Im Fall von Nginx + PHP-FPM wird die lange Verbindung zwischen dem PHP-FPM-Unterprozess und MySQL tatsächlich aufrechterhalten. Welchem PHP-FPM-Unterprozess die Front-End-HTTP-Anfrage zugewiesen ist, der Unterprozess wird seine lange Verbindung mit MySQL wiederverwenden.
Das oben Gesagte ist das Ergebnis einer ganztägigen Recherche. Bitte weisen Sie auf etwaige Unvollkommenheiten hin und danken Ihnen im Voraus!
Das Obige ist der gesamte Inhalt dieses Artikels. Vielen Dank für das Lesen. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website.
Verwandte Empfehlungen:
Das obige ist der detaillierte Inhalt vonPHP implementiert den Effekt des MySQL-Verbindungspools. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



MySQL ist für Anfänger geeignet, da es einfach zu installieren, leistungsfähig und einfach zu verwalten ist. 1. Einfache Installation und Konfiguration, geeignet für eine Vielzahl von Betriebssystemen. 2. Unterstützung grundlegender Vorgänge wie Erstellen von Datenbanken und Tabellen, Einfügen, Abfragen, Aktualisieren und Löschen von Daten. 3. Bereitstellung fortgeschrittener Funktionen wie Join Operations und Unterabfragen. 4. Die Leistung kann durch Indexierung, Abfrageoptimierung und Tabellenpartitionierung verbessert werden. 5. Backup-, Wiederherstellungs- und Sicherheitsmaßnahmen unterstützen, um die Datensicherheit und -konsistenz zu gewährleisten.

Erstellen Sie eine Datenbank mit Navicat Premium: Stellen Sie eine Verbindung zum Datenbankserver her und geben Sie die Verbindungsparameter ein. Klicken Sie mit der rechten Maustaste auf den Server und wählen Sie Datenbank erstellen. Geben Sie den Namen der neuen Datenbank und den angegebenen Zeichensatz und die angegebene Kollektion ein. Stellen Sie eine Verbindung zur neuen Datenbank her und erstellen Sie die Tabelle im Objektbrowser. Klicken Sie mit der rechten Maustaste auf die Tabelle und wählen Sie Daten einfügen, um die Daten einzufügen.

Navicat selbst speichert das Datenbankkennwort nicht und kann das verschlüsselte Passwort nur abrufen. Lösung: 1. Überprüfen Sie den Passwort -Manager. 2. Überprüfen Sie Navicats "Messnot Password" -Funktion; 3.. Setzen Sie das Datenbankkennwort zurück; 4. Kontaktieren Sie den Datenbankadministrator.

MySQL ist ein Open Source Relational Database Management System. 1) Datenbank und Tabellen erstellen: Verwenden Sie die Befehle erstellte und creatEtable. 2) Grundlegende Vorgänge: Einfügen, aktualisieren, löschen und auswählen. 3) Fortgeschrittene Operationen: Join-, Unterabfrage- und Transaktionsverarbeitung. 4) Debugging -Fähigkeiten: Syntax, Datentyp und Berechtigungen überprüfen. 5) Optimierungsvorschläge: Verwenden Sie Indizes, vermeiden Sie ausgewählt* und verwenden Sie Transaktionen.

Navicat für MariADB kann das Datenbankkennwort nicht direkt anzeigen, da das Passwort in verschlüsselter Form gespeichert ist. Um die Datenbanksicherheit zu gewährleisten, gibt es drei Möglichkeiten, Ihr Passwort zurückzusetzen: Setzen Sie Ihr Passwort über Navicat zurück und legen Sie ein komplexes Kennwort fest. Zeigen Sie die Konfigurationsdatei an (nicht empfohlen, ein hohes Risiko). Verwenden Sie Systembefehlsleitungs -Tools (nicht empfohlen, Sie müssen die Befehlszeilen -Tools beherrschen).

Sie können eine neue MySQL -Verbindung in Navicat erstellen, indem Sie den Schritten folgen: Öffnen Sie die Anwendung und wählen Sie eine neue Verbindung (Strg N). Wählen Sie "MySQL" als Verbindungstyp. Geben Sie die Hostname/IP -Adresse, den Port, den Benutzernamen und das Passwort ein. (Optional) Konfigurieren Sie erweiterte Optionen. Speichern Sie die Verbindung und geben Sie den Verbindungsnamen ein.

MySQL und SQL sind wesentliche Fähigkeiten für Entwickler. 1.MYSQL ist ein Open -Source -Relational Database Management -System, und SQL ist die Standardsprache, die zum Verwalten und Betrieb von Datenbanken verwendet wird. 2.MYSQL unterstützt mehrere Speichermotoren durch effiziente Datenspeicher- und Abruffunktionen, und SQL vervollständigt komplexe Datenoperationen durch einfache Aussagen. 3. Beispiele für die Nutzung sind grundlegende Abfragen und fortgeschrittene Abfragen wie Filterung und Sortierung nach Zustand. 4. Häufige Fehler umfassen Syntaxfehler und Leistungsprobleme, die durch Überprüfung von SQL -Anweisungen und Verwendung von Erklärungsbefehlen optimiert werden können. 5. Leistungsoptimierungstechniken umfassen die Verwendung von Indizes, die Vermeidung vollständiger Tabellenscanning, Optimierung von Join -Operationen und Verbesserung der Code -Lesbarkeit.

Schritte zur Durchführung von SQL in Navicat: Verbindung zur Datenbank herstellen. Erstellen Sie ein SQL -Editorfenster. Schreiben Sie SQL -Abfragen oder Skripte. Klicken Sie auf die Schaltfläche Ausführen, um eine Abfrage oder ein Skript auszuführen. Zeigen Sie die Ergebnisse an (wenn die Abfrage ausgeführt wird).
