sql >> Database >  >> RDS >> Mysql

Verbinding pooling vs persistente verbinding mysqli

Eigenlijk termen connection pooling en aanhoudende verbinding verwijzen naar hetzelfde in het geval van mysqli in PHP.

Aanhoudende verbinding verwijst in dit geval naar de MySQL-verbinding die is geopend vanuit het PHP-script en die open blijft nadat het script is uitgevoerd, om opnieuw te worden gebruikt in sommige latere uitvoeringen.

Verbindingspooling betekent dat er een pool van permanente verbindingen is die wordt onderhouden door PHP. Eén inactieve verbinding van deze pool wordt gegeven aan het PHP-script dat verbinding wil maken met MySQL en wordt teruggestuurd naar de pool wanneer het script is voltooid.

Je vraagt ​​je misschien af ​​waarom we de pool van MySQL-verbindingen überhaupt nodig hebben, waarom gebruiken we niet slechts één permanente verbinding voor alle scripts?

Hier zijn twee redenen voor:

  • PHP maakt een pool van MySQL-verbindingen op basis van host/port/username/password gebruikt. Als een script verbinding wil maken met MySQL met een host/port/username/password combinatie zoekt PHP naar een inactieve persistente verbinding die dezelfde waarden heeft. Als het niet wordt gevonden, wordt er een nieuwe permanente verbinding gemaakt met deze host/port/username/password combinatie. We hebben dus minstens net zoveel verschillende persistente verbindingen nodig als er verschillende host/port/username/password zijn. waarden die door alle scripts worden gebruikt.
  • U kunt niet tegelijkertijd twee SQL-opdrachten op één MySQL-verbinding uitvoeren. Dit kan gebeuren wanneer twee PHP-scripts tegelijkertijd worden uitgevoerd. Wanneer twee scripts tegelijkertijd met MySQL willen communiceren, worden er twee persistente MySQL-verbindingen gemaakt. Het aantal persistente verbindingen in de pool is gelijk aan het laatste aantal maximale parallelle PHP-scripts dat is uitgevoerd, of is gelijk aan de bovenlimiet die is ingesteld in php.ini .

Belangrijke mededeling:

MySQL-verbindingspools (en alle andere verbindingspools) kunnen alleen bestaan ​​als PHP wordt uitgevoerd als een webserver-plug-in . Pools werken niet wanneer het werkt in fast-cgi-modus of op een andere manier wanneer het uitvoerbare PHP-bestand wordt beëindigd na uitvoering van het script.

Bewerken:MySQL-verbindingspooling kan worden gebruikt in de snelle cgi-modus van PHP als de webserver is geconfigureerd om één PHP snel-cgi-proces opnieuw te gebruiken voor meerdere verzoeken. Als het PHP fast-cgi-proces is geconfigureerd om af te sluiten na het uitvoeren van één verzoek, worden alle MySQL-verbindingen gesloten.



  1. Evaluatie van veelvouden 'IN' Expressies in 'WHERE'-clausules in mysql

  2. Problemen met schijf-I/O-knelpunten oplossen

  3. Lui ophalen van enkele kolom (klassekenmerk) met Hibernate

  4. proxysql-admin alternatieven - ClusterControl ProxySQL GUI