2010-05-25 62 views
2

我正在運行一個php/mysql驅動的網站,訪問量很大,我正在考慮在共享內存中緩存結果集的可能性,以減少數據庫負載。
但是,現在MySQL的查詢緩存已啓用,它似乎做得非常好,因爲如果禁用查詢緩存,則CPU的使用將立即跳轉到100%。
鑑於這種情況,我不知道在PHP中共享內存中本地緩存結果集(甚至是生成的HTML代碼)是否會帶來顯着的性能提升。MySQL查詢緩存vs應用程序層中的緩存結果集

有沒有人在這方面有過任何經驗? PS:請避免建議像memcached這樣的重炮解決方案。現在我正在尋找簡單的解決方案,不需要太多時間來實施,部署和維護。

編輯:
我看到我對memcached的評論偏離實際點,這是在應用層的緩存數據庫查詢是否會導致明顯的服務表現影響,考慮到這些查詢的結果都已經是答案緩存在數據庫級別。

+1

您的數據使用情況如何?大部分讀取和寫入很少,還是有很多寫入活動? – 2010-05-25 17:41:50

+1

CPU使用率達到100%是可疑的。大多數數據庫最終都會綁定IO,而不是綁定CPU。 – 2010-05-25 18:05:44

+0

有很多寫操作,但我設法安排表格,以便大多數查詢表格的修改次數減少。這就是爲什麼MySQL的查詢緩存工作得很好。 – GetFree 2010-05-25 18:07:41

回答

3

我知道你不想聽到關於memcached的消息,但它是你想要做的最好的解決方案之一。根據您的網站使用情況,性能可能會有大幅提升。通過簡單地在我的數據庫會話處理程序上使用memcached的會話處理程序,我可以減少一半的負載,並減少30%以上的請求服務時間。

實際上,memcached是一個簡單的解決方案。它已經與PHP集成(如果你已經加載了擴展),它幾乎不需要配置(我只需在我的Linux機器上添加memcached作爲服務,這是在一個或兩個shell命令中完成的)。

我會建議在會話緩存中存儲會話數據(以及任何可用於緩存的內容)。對於動態頁面(比如堆棧溢出主頁),我建議緩存輸出幾秒鐘以防氾濫。

0

體面的單箱解決方案是基於文件的緩存,但您必須手動將其清除。除此之外,你可以使用APC,這是非常快速和內存(仍然必須自己過期)。

但是,只要擴展一臺Web服務器,您就需要一個共享緩存,它是memcached。你爲什麼如此堅持不部署這個?這並不難,它只是爲您節省時間。你現在可以開始使用memcache並完成它,或者你現在可以使用上面的方法之一,然後最終切換到memcache,從而導致更多的工作。此外,您不必處理運行cronjob或其他醜陋的黑客攻擊來獲得緩存過期功能:它可以爲您提供緩存過期功能。

mysql查詢緩存很好,但它不是沒有issues。其中最重要的一點是,每次源數據更改時都會自動過期,這可能不是您想要的。