我正在開發一個網站,我相信每天的訪問量約為 70k,並且它使用了大量查詢,這些查詢使用了UNION's
大約45 個不同的表,這些表的範圍通常為每個表中約15k 行到約500k行。
我們已經盡可能地優化了query cache
,但是每當其中一個表發生更改並且必須刪除快取中的資料時,伺服器就會開始鎖定,並且 mysqltmp dir
會填滿,並且伺服器負載會變得非常高,並且必須執行以下操作解決該問題的方法:
- 停止mysql(負載恢復正常)
- 修復資料庫表
- 從 mysql 清除緩存
- 刷新記憶體快取
- 再次修復資料庫表
- 重啟mysql
我知道複製可能是最好的想法,但也可能是最昂貴的。所以想知道是否Sphinx
利用http://sphinxsearch.com/會有很多幫助嗎?
我之前在另一個網站上使用過它,這樣我就可以在 INNODB 表上進行全文搜索,因此對它的工作原理有一點了解,但不確定它如何處理這樣的事情。
它使用自己的快取方法嗎?因為不想改變這一點,但仍然會遇到與 Sphinx 相同的問題。
編輯:下面是螢幕截圖EXPLAIN
(缺少第一行,螢幕截圖程式有問題)
更新:網站現在每天只有 30/k 訪客。
答案1
你應該識別並解決資料庫問題,每天 70k 的訪問量並不算多,MySQL 能夠處理這麼多的工作。您應該下載並使用mysqlreport
類似的工具來分析和調整 MySQL MyISAM 和 InnoDB 緩衝區的使用情況(如果您仍在使用 MyISAM,我還建議切換到 InnoDB)。下一步是在 MySQL 中啟用慢查詢日誌記錄,並使用pt-query-digest
工具和EXPLAIN
MySQL 命令每天分析慢查詢日誌。可能您的資料庫缺少適當的索引。