
在 Joomla 後台儲存文章,特別是很長的文章時,跳出錯誤、文章存不進去:
The table '#__finder_tokens' is full錯誤訊息裡的 #__ 是 Joomla 資料表前綴的代號,實際的資料表名稱會像 abc_finder_tokens 這樣,前綴每個網站不同(寫在 configuration.php 的 $dbprefix)。
為什麼會出現這個錯誤?
問題出在 Joomla 的智慧搜尋(Smart Search):
- 為了讓網站的搜尋功能找得到文章,每次儲存文章時,「Content - Smart Search」(內容 - 智慧搜尋)外掛會自動替這篇文章建立索引:把內容拆成一個一個詞,先放進
#__finder_tokens等暫存資料表處理。 - 為了處理速度,這些暫存資料表使用 MySQL 的 MEMORY 引擎,資料放在記憶體裡,大小受 MySQL 的
max_heap_table_size設定限制。 - 文章很長、詞很多時,暫存資料表塞滿了,MySQL 回報「table is full」,Joomla 的儲存動作也跟著失敗。
所以這不是文章本身有問題,也不是資料庫壞掉,而是建立索引這一步超過了主機的限制。
先把文章存起來:暫時停用智慧搜尋外掛
急著要發佈文章的話:
- 到後台「系統」的外掛管理(System → Plugins),搜尋「Smart Search」。
- 把「Content - Smart Search」停用。注意不是「Smart Search - Content」這類名稱倒過來的外掛,那些是各種內容類型的索引外掛,先不用動。
- 回去儲存文章,這時不會建立索引,就能正常存檔。
代價是:停用期間儲存的文章不會更新到搜尋索引裡,網站的搜尋功能可能找不到它們。處理完下面的根本解法,記得把外掛打開,並重建索引。
根本解法
方法一:網站用不到站內搜尋,就不必開智慧搜尋
很多形象網站、公司網站根本沒有放搜尋框,智慧搜尋建立的索引完全用不到,卻在每次存檔時佔用資源。確認網站沒有搜尋模組、選單也沒有搜尋頁之後,可以讓「Content - Smart Search」保持停用。
Joomla 4/5 已經沒有舊版的「搜尋」(Search)元件,站內搜尋就是靠智慧搜尋;要保留搜尋功能的話,請用下面的方法。
方法二:調低智慧搜尋的記憶體資料表門檻
智慧搜尋在暫存的資料量超過一定筆數時,會自動把暫存資料表從記憶體改成存在硬碟上。這個門檻在「元件 → 智慧搜尋」(Components → Smart Search)右上角的「選項」(Options)裡,英文介面的名稱是「Memory Table Limit」,通常在「索引」(Index)分頁。
把數值調低,就會比較早切換到硬碟,不容易在記憶體塞滿之前出錯。調低之後建立索引會稍微慢一點,但對一般網站幾乎感覺不到。如果你的 Joomla 版本找不到這個選項,就用方法三。
方法三:請主機商放寬 MySQL 的記憶體資料表上限
MEMORY 資料表的大小上限由 MySQL 的 max_heap_table_size 決定,通常會和 tmp_table_size 一起調整。
- 虛擬主機:一般使用者不能改 MySQL 設定。寫信給主機商,附上錯誤訊息,請他們評估調高
max_heap_table_size。 - VPS、自己管理的主機:在 MySQL/MariaDB 設定檔的
[mysqld]區塊調整,重新啟動資料庫後生效:
[mysqld]
max_heap_table_size = 64M
tmp_table_size = 64M數值要依主機的記憶體大小決定,不是越大越好。
另外:太長的文章也可以拆開
一篇文章長到塞滿資料表,對讀者來說通常也太長了。把超長的內容拆成幾篇、彼此加上連結,閱讀體驗和網頁載入速度都會比較好。
極少數情況下,「table is full」是主機的硬碟或資料庫空間真的滿了,這時要請主機商確認空間用量。
最後:重建搜尋索引
問題解決、把「Content - Smart Search」重新啟用之後:
- 到「元件 → 智慧搜尋」(Components → Smart Search)。
- 按上方的「索引」(Index)按鈕,讓 Joomla 重新掃描所有內容。
- 完成後到前台搜尋剛才那篇文章,確認找得到。
索引過程中如果又出現同樣的錯誤,代表上面的調整還不夠,需要再調低門檻或放寬 MySQL 的限制。
延伸閱讀
資料庫、主機限制這類問題,常常要同時懂 Joomla 和主機設定才找得到原因。正威網路行銷是 25 年經驗的基隆網頁設計工作室,提供網站維護託管,也服務台北與全台客戶,歡迎來聊聊。







發表留言
還沒有人留言,歡迎第一個分享你的想法或問題。留言經審核後才會顯示,Email 不會公開。