php資料庫永久串連

來源:互聯網
上載者:User
永久的資料庫連接是指在指令碼結束運行時不關閉的串連。當收到一個永久串連的請求時。PHP 將檢查是否已經存在一個(前面已經開啟的)相同的永久串連。如果存在,將直接使用這個串連;如果不存在,則建立一個新的串連。所謂“相同”的串連是指用相同的使用者名稱和密碼到相同主機的串連。

對 網頁伺服器的工作和分布負載沒有完全理解的讀者可能會錯誤地理解永久串連的作用。特別的,永久串連不會在相同的串連上提供建立“使用者會話”的能力,也不提供有效建立事務的能力。實際上,從嚴格意義上來講,永久串連不會提供任何非永久串連無法提供的特殊功能。

為什嗎?

這和 網頁伺服器工作的方式有關。網頁伺服器可以用三種方法來利用 PHP 產生 web 頁面。

第一種方法是將 PHP 用作一個“外殼”。以這種方法運行,PHP 會為向 網頁伺服器提出的每個 PHP 頁面請求產生並結束一個 PHP 解譯器線程。由於該線程會隨每個請求的結束而結束,因此任何在這個線程中利用的任何資源(例如指向 SQL 資料庫伺服器的串連)都會隨線程的結束而關閉。在這種情況下,使用永久串連不會獲得任何地改變——因為它們根本不是永久的。

第二,也是最常用的方法,是把 PHP 用作多進程 網頁伺服器的一個模組,這種方法目前只適用於 Apache。對於一個多進程的伺服器,其典型特徵是有一個父進程和一組子進程協調運行,其中實際產生 web 頁面的是子進程。每當用戶端向父進程提出請求時,該請求會被傳遞給還沒有被其它的用戶端請求佔用的子進程。這也就是說當相同的用戶端第二次向服務端提出請求時,它將有可能被一個不同的子進程來處理。在開啟了一個永久串連後,所有請求 SQL 服務的後繼頁面都能夠重新使用這個已經建立的 SQL Server 串連。

最後一種方法是將 PHP 用作多線程 網頁伺服器的一個外掛程式。目前 PHP 4 已經支援 ISAPI、WSAPI 和 NSAPI(在 Windows 環境下),這些使得 PHP 可以被用作諸如 Netscape FastTrack (iPlanet)、Microsoft's Internet Information Server (IIS) 和 O'Reilly's WebSite Pro 等多線程 網頁伺服器的外掛程式。永久串連的行為和前面所描述的多過程模型在本質上是相同的。注意 PHP 3 不支援 SAPI。

如果永久串連並沒有任何附加的功能,那麼使用它有什麼好處?

答案非常簡單——效率。當用戶端對 SQL 伺服器的串連請求非常頻繁時,永久串連將更加高效。串連請求頻繁的標準取決於很多因素。例如,資料庫的種類,資料庫服務和 web 服務是否在同一台伺服器上,SQL 伺服器如何載入負載等。但我們至少知道,當串連請求很頻繁時,永久串連將顯著的提高效率。它使得每個子進程在其生命週期中只做一次串連操作,而非每次在處理一個頁面時都要向 SQL 伺服器提出串連請求。這也就是說,每個子進程將對伺服器建立各自獨立的永久串連。例如,如果有 20 個不同的子進程運行某指令碼建立了永久的 SQL 伺服器永久串連,那麼實際上向該 SQL 伺服器建立了 20 個不同的永久串連,每個進程佔有一個。

注意,如果永久串連的子進程數目超過了設定的資料庫連接數限制,系統將會產生一些缺陷。如果資料庫的同時串連數限制為 16,而在繁忙會話的情況下,有 17 個線程試圖串連,那麼有一個線程將無法串連。如果這個時候,在指令碼中出現了使得串連無法關閉的錯誤(例如無限迴圈),則該資料庫的 16 個串連將迅速地受到影響。請查閱使用資料庫的文檔,以擷取關於如何處理已放棄的及閑置的串連的方法。

在使用永久串連時還有一些特別的問題需要注意。例如在永久串連中使用資料表鎖時,如果指令碼不管什麼原因無法釋放該資料表鎖,其隨後使用相同串連的指令碼將會被永久的阻塞,使得需要重新啟動 httpd 服務或者資料庫服務。另外,在使用交易處理時,如果指令碼在事務阻塞產生前結束,則該阻塞也會影響到使用相同串連的下一個指令碼。不管在什麼情況下,都可以通過使用 register_shutdown_function() 函數來註冊一個簡單的清理函數來開啟資料表鎖,或者復原事務。或者更好的處理方法,是不在使用資料表鎖或者交易處理的指令碼中使用永久串連,這可以從根本上解決這個問題(當然還可以在其它地方使用永久串連)。

以下是一點重要的總結。永久串連是為通常串連建立一對一的分布而設計的。這意味著必須能夠保證在將永久串連替換為非永久串連時,指令碼的行為不會改變。使用永久串連將(非常)有可能改變指令碼的效率,但不改變其行為!

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.