2013-08-16 120 views
0

我有一個用PHP編寫的web應用程序,它目前在每個頁面上創建一個數據庫連接(使用mysqli_connect)從數據庫中獲取數據。PHP和多個MySQL連接

最近,我的網站已經放緩(有一些流量增加),我想知道是否創建了這麼多的連接 - 每個用戶在任何頁面上創建 - 導致速度放慢?

有沒有解決這個問題?

是否可以爲服務器創建一個可共享的連接?我知道這是可能的python,但我不知道我將如何在PHP中實現這樣的模型。

注意:我的網站是在BlueHost上......我不知道這是否也有所作爲。

+0

爲什麼認爲數據庫連接會降低您的網站? –

+0

這並不會減慢你的服務器的速度,對於任何「不是非常巨大」的流量。你看過詢問他們正在接受多少時間? –

+0

我知道在Python中與數據庫的連接有很高的開銷,而且最近我的網站速度變慢了 - 有時服務器需要20s才能加載。查詢最多需要5秒鐘。 – nggonzalez

回答

0

好了兩件事要做。

  1. 在MySQL中設置緩慢的查詢日誌,看看是否有查詢 慢。通過使用EXPLAIN命令 來識別缺少的索引等來優化這些緩慢的查詢。
  2. 安裝連接池以消除打開連接全部 時間。有關更多信息,請參閱此鏈接Connection Pooling In PHP
0

當您將它傳遞到mysqli_connect以打開持久連接時,您可以通過「p:」預先安裝主機。

0

你可以閱讀從以下鏈接持續連接:

http://us2.php.net/manual/en/features.persistent-connections.php

http://php.net/manual/en/mysqli.persistconns.php

http://us2.php.net/manual/en/function.mysql-pconnect.php

但我會強烈建議不要使用永久連接。

您將需要找出究竟是什麼放緩您的網站。

Ping一個快速加載的網站。例如。 google.com。
Ping你的網絡服務器,如果ping差異很大,你應該問BlueHost解決它。

檢查Web服務器和數據庫服務器之間是否有任何延遲。他們可能會是:

  • 在同一臺機器上(主要是無滯後)
  • 在同一本地網絡中(主要是沒有滯後,除非有一個局域網問題,請BlueHost的)不同的機器
  • 不同(可能有問題,問BlueHost他們是否可以在相同的本地網絡內移動數據庫服務器)

如果以上所有內容都很好,並且頁面仍然加載緩慢。

在數據庫工作完成後,您可以嘗試顯式調用mysqli_close()。這將立即釋放您的連接,而不是等待頁面完全執行。然後,您需要確定數據庫工作結束後什麼會減慢頁面。

您可以在慢頁面上使用mictotime()來查看哪些代碼正在減慢速度。 您可以使用此鏈接:Accurate way to measure execution times of php scripts