2014-05-10 69 views
0

在我的網站上,當用戶打開他的個人資料或任何其他頁面時(幾乎所有頁面都使用來自mysql的數據),我的網站在加載頁面時使大約50個連接到mysql。我的開發服務器上運行基本操作系統就是這種情況。持久的mysql連接的優點

當我開始瞭解mysql中的持久連接時,我感到困惑。如果我要在VPS上運行此網站(啓動時RAM低),並考慮到大量mysql連接產生的開銷,將使用持久連接提高我的網站性能?

目前,我開始和結束每個功能的連接。有沒有更好的方式連接到MySQL?

而且,考慮到如果100個用戶同時使用我的網站,如果每個網頁大約有50-60個連接,性能如何?

+3

_「我的網站在加載頁面時會與mysql建立大約50個連接」_ _ - _one_請求中的意思是?如果是這樣,你已經明確地實施了錯誤的;你的腳本應該打開_一個連接,並完成它所要做的所有事情。但是這與持久連接無關 - 這些連接是通過_different_ requests保持開放的,並且這對於簡單頁面來說不是必需的。 – CBroe

+0

@CBroe我明白了。目前,我在每個功能中啓動和結束連接,並且每頁都使用各種功能,因爲它們很常見。在頁面本身開始連接,然後將連接處理程序傳遞給函數會更好嗎?那樣它只會使連接正確?這會提高性能嗎? (我猜開銷會減少) –

回答

1

你問,所以我會回答。你做錯了。您應該通過使用通用函數建立單個數據庫連接來開始每個頁面請求(每個可從外部訪問的.php文件)的處理,然後您應該重用該連接。

因爲您可能正在使用內置於您的php數據庫訪問庫的自動連接池,並且您尚未擴展應用程序,所以您正在逃避這一切。

使用此多連接策略時,您將無法將其擴展得很遠,因爲添加用戶時確實執行得非常糟糕。

有很多基於開放源代碼php的web應用系統的例子,你可以看看。 WordPress是一個例子。你會發現,其中大部分是通過打開數據庫連接並將其句柄存儲在全局變量中開始的。

你問:

根據CBroe的評論,我改變了我的策略。其實,我是 使用多個數據庫連接,但功能是一樣的(不要 問爲什麼lol)。因此,如果我在開始時打開連接,然後將 處理程序傳遞給該函數,那會是一種改進嗎?

是的,那樣會好的。您需要避免攪動連接以獲得最佳性能。

如果您需要連接到多個不同的數據庫,則可以全部打開它們。但聽起來你只需要打一個數據庫。

PHP在將處理程序傳遞給函數時沒有顯着的開銷,所以不用擔心。

+0

根據CBroe的評論,我改變了我的策略。實際上,我使用多個數據庫連接,但功能相同(不要問爲什麼lol)。因此,如果我在開始時打開連接,然後將處理程序傳遞給函數,那會是一種改進嗎? –

+0

我把它做成了一個社區wiki頁面。 –

+0

我明白了。對於堆棧溢出我還是個新手,所以我並不是很瞭解所有的東西,但這不是關鍵。 當我將處理程序傳遞給函數時,它是否會產生(任何)開銷?因爲我沒有通過參考來傳遞它,我想呢? –

0

正如奧爾瓊斯奇妙地解釋的那樣,我在開始時打開了連接,並且我的連接從每頁50-60下降到每頁1。儘管我沒有看到我的本地開發服務器上的性能發生了任何變化,但它在服務器上運行時肯定會有很大的改進。我沒有必要使用持久連接。