sql >> Database teknologi >  >> RDS >> Mysql

PHP MySQL forbindelse persistens

Vedholdenheden udføres af kopien af ​​PHP, der er indlejret i webserveren. Normalt ville du have ret - hvis PHP kørte i CGI-tilstand, ville det være umuligt at have en vedvarende forbindelse, fordi der ikke ville være noget tilbage at fortsætte, når anmodningen er udført, og PHP lukker ned.

Men da der er en kopi af PHP indlejret i webserveren, og selve webserveren bliver ved med at køre mellem anmodninger, er det muligt at opretholde en pulje af vedvarende forbindelser inden for den "permanente" PHP.

Bemærk dog, at på Apache multi-worker-servermodeller vedligeholdes forbindelsespuljerne PER-CHILD. Hvis du indstiller din poolgrænse til 10, har du 10 forbindelser pr. Apache-barn. 20 børn =200 forbindelser.

Vedvarende forbindelser vil også føre til langsigtede problemer med deadlocks og andre problemer, der er svære at debugge. Husk - der er ingen garanti for, at en brugers HTTP-anmodninger vil blive serviceret af den SAMME apache child/mysql-forbindelse. Hvis et script dør halvvejs gennem en databasetransaktion, vil denne transaktion IKKE blive rullet tilbage, fordi MySQL ikke kan se HTTP-siden af ​​tingene - det eneste, den ser, er, at mysql<->apache-forbindelsen stadig er åben og antager, at alt er godt.

Den næste bruger, der rammer den pågældende kombination af apache/mysql-barn/forbindelse, vil nu på magisk vis ende midt i den transaktion, uden nogen anelse om, at transaktionen er åben. Grundlæggende er det web-ækvivalenten til et uskyllet toilet - alt "skrald" fra den tidligere bruger er der stadig.

Med ikke-vedvarende forbindelser er du garanteret et "rent" miljø, hver gang du opretter forbindelse.



  1. Sådan opretter du en Amazon Aurora-klynge

  2. Android SQLite LIKE escape jokertegn

  3. mysql_exceptions.OperationalError:(1045, Adgang nægtet for brugeren 'root'@'localhost' (ved hjælp af adgangskode:JA))

  4. Kan en lagret procedure/funktion returnere en tabel?