Heim Backend-Entwicklung PHP-Tutorial PHP implementiert den Effekt des MySQL-Verbindungspools

PHP implementiert den Effekt des MySQL-Verbindungspools

Jun 07, 2018 pm 03:15 PM
mysql 连接池

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 &#39;get&#39; . count($this->_pools) . "<br>";
    if (count($this->_pools) > 0) {
      $one = array_pop($this->_pools);
      echo &#39;getAfter&#39; . count($this->_pools) . "<br>";
      return $one;
    } else {
      throw new ErrorException ( "<mark>数据库连接池中已无链接资源,请稍后重试!</mark>" );
    }
  }

  //将用完的数据库链接资源放回到数据库连接池
  public function release($conn)
  {
    echo &#39;release&#39; . count($this->_pools) . "<br>";
    if (count($this->_pools) >= self::POOLSIZE) {
      throw new ErrorException ( "<mark>数据库连接池已满!</mark>" );
    } else {
      array_push($this->_pools, $conn);
      // $conn = null;
      echo &#39;releaseAfter&#39; . 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 &#39;error:&#39; . $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 &#39;error:&#39; . $e->getMessage();
      die;
    }
  }
}
Nach dem Login kopieren

Rufen Sie dies in einer anderen Datei auf

<?php 

require_once &#39;db.php&#39;;
$sql = &#39;select * from user&#39;;

$dbhelper = new DbHelper;
for ($i=0; $i < 10; $i++) { 
  $res = $dbhelper->query($sql);
  // var_dump($res) . PHP_EOL;
}
Nach dem Login kopieren

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(
    &#39;db_type&#39; => &#39;mysql&#39;,
    &#39;db_user&#39; => &#39;***&#39;,
    &#39;db_pwd&#39; => &#39;*******&#39;,
    &#39;db_host&#39; => &#39;*******&#39;,
    &#39;db_port&#39; => &#39;3306&#39;,
    &#39;db_name&#39; => &#39;custom&#39;,
    &#39;db_params&#39; => array(&#39;persist&#39; => true),
  );
}
Nach dem Login kopieren

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:

Denken Sie an das Hinzufügen, Löschen, Ändern und Überprüfen des Implementierungscodes der PHP3.2.3-Versionsdatenbank

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!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

MySQL: Die einfache Datenverwaltung für Anfänger MySQL: Die einfache Datenverwaltung für Anfänger Apr 09, 2025 am 12:07 AM

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.

So erstellen Sie Navicat Premium So erstellen Sie Navicat Premium Apr 09, 2025 am 07:09 AM

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.

Kann ich das Datenbankkennwort in Navicat abrufen? Kann ich das Datenbankkennwort in Navicat abrufen? Apr 08, 2025 pm 09:51 PM

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: Einfache Konzepte für einfaches Lernen MySQL: Einfache Konzepte für einfaches Lernen Apr 10, 2025 am 09:29 AM

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.

Wie kann ich das Datenbankkennwort in Navicat für Mariadb anzeigen? Wie kann ich das Datenbankkennwort in Navicat für Mariadb anzeigen? Apr 08, 2025 pm 09:18 PM

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).

So erstellen Sie eine neue Verbindung zu MySQL in Navicat So erstellen Sie eine neue Verbindung zu MySQL in Navicat Apr 09, 2025 am 07:21 AM

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: Wesentliche Fähigkeiten für Entwickler MySQL und SQL: Wesentliche Fähigkeiten für Entwickler Apr 10, 2025 am 09:30 AM

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.

So führen Sie SQL in Navicat aus So führen Sie SQL in Navicat aus Apr 08, 2025 pm 11:42 PM

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).

See all articles