sql >> Databasteknik >  >> RDS >> Oracle

Full förståelse för PDO ATTR_PERSISTENT

Apaches synvinkel

Apache har en förälderprocess. Denna process skapar underordnade processer som kommer att hantera alla förfrågningar som kommer till webbservern. Den initiala mängden underordnade processer som startas när webbservern startar konfigureras av StartServers direktiv i apache-konfigurationen. Antalet ökar efter behov med ett ökande antal förfrågningar som träffar webbservern tills ServerLimit nås.

PHP och beständiga anslutningar

Om PHP (körde som mod_php, som CGI är alla resurser frigjorda i slutet av skriptkörningen) nu uppmanas att upprätta en beständig anslutning till en databas för en begäran, hålls denna anslutning även efter att skriptet avslutats. Anslutningen är nu hold är en koppling mellan den underordnade apacheprocessen som begäran hanterades av och databasservern och kan återanvändas av vilken begäran som helst som hanteras av just denna underordnade process.

Om, av någon anledning (fråga mig inte exakt varför), den underordnade processen är upptagen längre än den faktiska begäran och en annan begäran kommer in, omdirigerar den överordnade apache-processen denna begäran till en (ny) underordnad process som kanske inte har etablerats en anslutning till databasen fram till denna tidpunkt. Om det måste under körningen av skriptet, höjer det SID som du har observerat. Nu finns det två kopplingar som hålls av två olika underordnade processer av apache.

Kom ihåg att...

Det är viktigt att veta att detta också kan orsaka en hel del problem. Om det finns en oändlig loop eller en avbruten transaktion eller något annat kan till och med uppstå oförutsägbara fel under skriptkörningen, är anslutningen blockerad och kan inte återanvändas .Det kan också hända att alla tillgängliga anslutningar i databasen används, men det finns en annan underordnad process av apache-servern som försöker komma åt databasen. Denna process är blockerad för tillfället tills en anslutning frigörs av databasen eller apache (timeout eller frivilligt genom uppsägning). All ytterligare information om detta ämne på denna sida:http://www.php.net/manual/en/features.persistent-connections.php

Jag hoppas att jag fick allt som vi har diskuterat i vår kommentarskonversation korrekt sammanfattat och att jag inte glömde någonting. Om så är fallet, snälla, lämna mig ett tips så lägger jag till det. :)

Redigera:

Jag har precis läst klart artikeln @MonkeyZeus som nämns i den här kommentaren. Den beskriver processen jag sammanfattade ovan och ger användbar information om hur du optimerar din apache-server för att fungera bättre tillsammans med beständiga anslutningar. Den kan användas med eller utan oracle-databasbackends, Men du borde ta en titt:http://www.oracle.com/technetwork/articles/coggeshall-persist-084844.html



  1. Hur ändrar man identitetskolumns värden programmatiskt?

  2. Skicka array till MySQL-lagrad rutin

  3. Få sista infognings-id efter en förberedd bilaga med PDO

  4. MySQL-prestanda:MySQL/MariaDB-index