2017-02-24 101 views
0

我有建立在Codeigniter(PHP 5.5 - MYSQLi 5.6)上的Rest api。 針對單個Api調用觸發8個查詢。調用其他API時連接數增加,連接數不會減少。Mysql連接正在迅速增加,包括查詢

對於4個用戶,查詢和連接增加到25-32。我不知道如何減少連接&查詢。

  • 我有這樣的情景 - MY_MODEL延伸CI_MODEL和USER_DB延伸MY_MODEL和USER_MODEL extedning的USER_DB。我懷疑構造函數鏈中有任何問題。請建議

    1. 連接&查詢正在迅速增加。
    2. 已使用Config文件中的永久連接無用。
    3. 如何減少mysqli連接&查詢被觸發。
    4. 我是否必須在每次api呼叫後強行關閉連接,還是應該將它留給Codeigniter。

    enter image description here

+0

剛剛擺脫pconnect –

回答

0

pconnect是真的在你的情況,那就是你的設置是使用的持久連接。在這種情況下,無論何時創建新連接,連接數都會增加。在這種情況下,您需要關閉連接。你也可以將pconnect設置爲false,但是在你做之前你需要考慮它。在某些情況下,您可能需要持續連接。在這裏看到:

Advantages/Disadvantages of pconnect option in CodeIgniter

+0

讓我檢查和恢復這一點。我會按照建議嘗試一下這個封閉的場景。我可以關閉類的析構函數中的連接嗎? – Sabarish

+0

你根本不明白什麼是持久連接 –

+0

@Sabarish哪個類的析構函數?你能告訴我它的名字並簡要描述它嗎? –

-1

如果你運行你的裸阿帕奇PHP的,你這樣做是錯誤的。

鑑於許多小型查詢的典型Web工作負載,數據庫將處於最佳狀態,每個內核有1-2個線程。如果你讓它增長到10或更多,首先它會消耗更多的內存,然後你將需要擔心更多的鎖定。

由於類似的原因,您的web服務器將會變得更加靈活,每個核心有1-3個PHP進程,而不是幾百個。

設置一個簡單的方法是使用lighttpd或nginx等服務器以fastcgi模式運行php。這些服務器將處理長時間緩慢的HTTP連接,收集請求數據,然後快速運行PHP代碼,緩衝響應,並釋放php解釋器和數據庫連接,同時通過客戶端的HTTP連接緩衝響應。

然後,您可以將lighttpd配置中fastcgi進程的數量設置爲小一點,例如每個核心3個。這也限制了你持久的數據庫連接。

當然,你應該優化你的SQL查詢!但既然你不給任何有關的信息...

+0

我會將服務器更改爲lighttpd或nginx作爲所需服務器。在析構函數中關閉連接是一個好習慣。請建議。 – Sabarish

+1

既然你要使用持久連接,我相信這是不需要的。 – peufeu

+0

我爲數據庫做了一個singleton類,並且連接數急劇減少,並且我在My_model構造函數處連接到數據庫,移動到一個sigleton函數,現在對於1000個用戶,只有16個連接被創建。謝謝你們,真的很感謝你的迴應。 – Sabarish