Persistent Database Connections

Från Wiki.linux.se
Version från den 20 december 2024 kl. 07.32 av Admin (diskussion | bidrag) (Skapade sidan med '### Beständiga Databasanslutningar ¶ Beständiga anslutningar är länkar som inte stängs när ditt skript har slutfört sin körning. När en beständig anslutning begärs kontrollerar PHP om det redan finns en identisk beständig anslutning (som förblev öppen från tidigare körningar). Om en sådan anslutning existerar används den, annars skapas länken. En "identisk" anslutning innebär att anslutningen gjordes till samma värd, med samma användarnamn och lö...')
(skillnad) ← Äldre version | Nuvarande version (skillnad) | Nyare version → (skillnad)
Hoppa till navigering Hoppa till sök
      1. Beständiga Databasanslutningar ¶

Beständiga anslutningar är länkar som inte stängs när ditt skript har slutfört sin körning. När en beständig anslutning begärs kontrollerar PHP om det redan finns en identisk beständig anslutning (som förblev öppen från tidigare körningar). Om en sådan anslutning existerar används den, annars skapas länken. En "identisk" anslutning innebär att anslutningen gjordes till samma värd, med samma användarnamn och lösenord (där det är tillämpligt).

Personer som inte är bekanta med hur webbservrar fungerar och fördelar belastning kan missförstå beständiga anslutningar. De tillhandahåller inte möjligheten att öppna "användarsessioner" på samma länk, effektivt bygga upp en transaktion eller utföra andra avancerade funktioner. Beständiga anslutningar erbjuder ingen funktionalitet som inte är möjlig med vanliga anslutningar.

        1. Varför?

Detta beror på hur webbservrar fungerar. Det finns tre sätt som din webbserver kan använda PHP för att generera webbsidor:

1. **PHP som en CGI-"wrapper"**

  Här skapas och förstörs en instans av PHP-tolkaren för varje sidförfrågan. Alla resurser (t.ex. en länk till en SQL-server) stängs när PHP-tolkaren avslutas. I detta fall har beständiga anslutningar ingen fördel eftersom de inte kan bestå.

2. **PHP som modul i en flerprocesswebbserver**

  En flerprocessserver (som Apache) har en föräldraprocess som koordinerar flera barnprocesser. När en klient skickar en ny förfrågan kan en annan barnprocess hantera den. Vid en beständig anslutning kan samma anslutning återanvändas av följande sidor som kräver SQL-tjänster.

3. **PHP som plugin i en flertrådad webbserver**

  PHP stödjer flertrådade servrar som IIS eller Netscape FastTrack. Här fungerar beteendet liknande flerprocessmodellen.
        1. Vad är de bra för?

Svaret är enkelt — **effektivitet**. Om kostnaden för att skapa en anslutning till din SQL-server är hög kan beständiga anslutningar minska denna overhead. Varje barnprocess ansluter bara en gång under sin livslängd istället för att ansluta varje gång en sida kräver SQL-tjänster.

    • Notera dock att:**

- Detta kan orsaka problem om databasen har en gräns för samtidiga anslutningar. Om databasen till exempel har en gräns på 16 anslutningar och 17 barnprocesser försöker ansluta, kommer en av dem att misslyckas. - Skript med buggar, som oändliga loopar, kan snabbt överbelasta en databas med anslutningsgränser.

        1. Varningar:

- Vid användning av tabellåsningar på en beständig anslutning, om skriptet inte kan släppa låset, kan efterföljande skript blockeras. - Vid användning av transaktioner kan en pågående transaktionsblock påverka efterföljande skript.

Undvik dessa problem genom att inte använda beständiga anslutningar i skript som använder tabellåsningar eller transaktioner.

        1. Viktig sammanfattning:

Beständiga anslutningar är designade för att ha en **en-till-en-kartläggning** till vanliga anslutningar. Du kan alltid ersätta beständiga anslutningar med vanliga anslutningar utan att ändra skriptets beteende, även om effektiviteten kan påverkas.

        1. Se även:

- ibase_pconnect() - ociplogon() - odbc_pconnect() - oci_pconnect() - pfsockopen() - pg_pconnect()