phpBB3 引發的 MySQL slow query
發表於 : 2025-08-05, 13:25
原因為 session_user_id = 1 (匿名訪客) 的 session 記錄不知何故大量積存,系統不會自動清除老舊的 session.# Time: 2025-08-02T23:18:54.068242Z
# Query_time: 18.208121 Lock_time: 0.000048 Rows_sent: 1 Rows_examined: 23407
SET timestamp=1754176734;
SELECT COUNT(session_id) AS sessions
FROM phpbb_sessions
WHERE session_user_id = 1
AND session_time >= 1754169515;
而且原先使用 engine 為 MyISAM. 改為 InnoDB 及加入新的 index 執行時間即可大量縮短.而且也成功解決 CPU 運行 95%+ ~ 100% 的問題.
代碼: 選擇全部
ALTER TABLE phpbb_sessions
ADD INDEX idx_user_time (session_user_id, session_time);
代碼: 選擇全部
DELETE FROM phpbb_sessions
WHERE session_time < UNIX_TIMESTAMP() - 3600*24; -- 刪除超過1天的舊session
代碼: 選擇全部
-- 轉換為 InnoDB (支援行級鎖)
ALTER TABLE phpbb_sessions ENGINE=InnoDB;
-- 重組表優化空間
OPTIMIZE TABLE phpbb_sessions;