sql >> Database teknologi >  >> RDS >> Oracle

Fuld forståelse for PDO ATTR_PERSISTENT

Apaches synspunkt

Apache har én overordnet proces. Denne proces opretter underordnede processer, der vil håndtere eventuelle anmodninger, der kommer til webserveren. Den indledende mængde af underordnede processer, der startes, når webserveren starter, er konfigureret af StartServers direktiv i apache-konfigurationen. Antallet stiger efter behov med et stigende antal anmodninger, der rammer webserveren indtil ServerLimit er nået.

PHP og vedvarende forbindelser

Hvis PHP (kørte som mod_php, som CGI er alle ressourcer frigivet ved slutningen af ​​scriptudførelsen) nu bliver bedt om at etablere en vedvarende forbindelse med en database for en anmodning, holdes denne forbindelse, selv efter at scriptet er afsluttet. Forbindelsen er nu hold er en forbindelse mellem den underordnede apache-proces, som anmodningen blev håndteret af, og databaseserveren og kan genbruges af enhver anmodning, der håndteres af netop denne underordnede proces.

Hvis den underordnede proces af en eller anden grund (spørg mig ikke præcis hvorfor) er optaget længere end den faktiske anmodning, og der kommer en anden anmodning, omdirigerer den overordnede apache-proces denne anmodning til en (ny) underordnet proces, som muligvis ikke er etableret en forbindelse til databasen indtil dette tidspunkt. Hvis det er nødvendigt under udførelsen af ​​scriptet, hæver det SID, som du har observeret. Nu er der to forbindelser, der holdes af to forskellige underordnede processer af apache.

Husk at...

Det er vigtigt at vide, at dette også kan forårsage en masse problemer. Hvis der er en endeløs løkke eller en afbrudt transaktion eller en anden kan være endda uforudsigelig fejl under scriptet eksekvering, er forbindelsen blokeret og kan ikke genbruges .Det kan også ske, at alle de tilgængelige forbindelser i databasen bliver brugt, men der er en anden underordnet proces af apache-serveren, der forsøger at få adgang til databasen. Denne proces er blokeret indtil videre, indtil en forbindelse frigøres af databasen eller apache (timeout eller frivilligt ved opsigelse). Yderligere oplysninger om dette emne på denne side:http://www.php.net/manual/en/features.persistent-connections.php

Jeg håber, at jeg fik alt det, vi har diskuteret i vores kommentarsamtale, opsummeret korrekt, og jeg har ikke glemt noget. Hvis ja, så giv mig venligst et tip, og jeg vil tilføje det. :)

Rediger:

Jeg er lige blevet færdig med at læse artiklen @MonkeyZeus nævnt i denne kommentar. Den beskriver den proces, jeg opsummerede ovenfor, og giver nyttige oplysninger om, hvordan du optimerer din apache-server til at fungere bedre sammen med vedvarende forbindelser. Den kan bruges med eller uden oracle database backends, Du bør dog tage et kig:http://www.oracle.com/technetwork/articles/coggeshall-persist-084844.html



  1. Vores nye SQLPerformance.com nyhedsbrev

  2. oracle 11g og integration af hibernate spring og jsf

  3. MySQL:Hvordan tilmelder jeg mig samme bord flere gange?

  4. Hvordan springer man over kolonner i CSV-fil, når man importerer til MySQL-tabel ved hjælp af LOAD DATA INFILE?