0%

正威網路行銷工作室,專注於基隆、台北與全台客製化網頁設計,提供專業 RWD 響應式、SEO 搜尋引擎優化、品牌形象設計與網站維護託管服務。

搜尋文章
聯絡資訊
地址基隆市仁二路 220 號 5 樓
追蹤我們

Joomla 儲存文章失敗「The table '#__finder_tokens' is full」:智慧搜尋造成的錯誤與解法

jooomla儲存失敗,錯誤如下: The table '#__finder_tokens' is full

在 Joomla 後台儲存文章,特別是很長的文章時,跳出錯誤、文章存不進去:

純文字
The table '#__finder_tokens' is full

錯誤訊息裡的 #__ 是 Joomla 資料表前綴的代號,實際的資料表名稱會像 abc_finder_tokens 這樣,前綴每個網站不同(寫在 configuration.php 的 $dbprefix)。

為什麼會出現這個錯誤?

問題出在 Joomla 的智慧搜尋(Smart Search):

  1. 為了讓網站的搜尋功能找得到文章,每次儲存文章時,「Content - Smart Search」(內容 - 智慧搜尋)外掛會自動替這篇文章建立索引:把內容拆成一個一個詞,先放進 #__finder_tokens 等暫存資料表處理。
  2. 為了處理速度,這些暫存資料表使用 MySQL 的 MEMORY 引擎,資料放在記憶體裡,大小受 MySQL 的 max_heap_table_size 設定限制。
  3. 文章很長、詞很多時,暫存資料表塞滿了,MySQL 回報「table is full」,Joomla 的儲存動作也跟著失敗。

所以這不是文章本身有問題,也不是資料庫壞掉,而是建立索引這一步超過了主機的限制。

先把文章存起來:暫時停用智慧搜尋外掛

急著要發佈文章的話:

  1. 到後台「系統」的外掛管理(System → Plugins),搜尋「Smart Search」。
  2. 把「Content - Smart Search」停用。注意不是「Smart Search - Content」這類名稱倒過來的外掛,那些是各種內容類型的索引外掛,先不用動。
  3. 回去儲存文章,這時不會建立索引,就能正常存檔。

代價是:停用期間儲存的文章不會更新到搜尋索引裡,網站的搜尋功能可能找不到它們。處理完下面的根本解法,記得把外掛打開,並重建索引。

根本解法

方法一:網站用不到站內搜尋,就不必開智慧搜尋

很多形象網站、公司網站根本沒有放搜尋框,智慧搜尋建立的索引完全用不到,卻在每次存檔時佔用資源。確認網站沒有搜尋模組、選單也沒有搜尋頁之後,可以讓「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] 區塊調整,重新啟動資料庫後生效:
INI / php.ini
[mysqld]
max_heap_table_size = 64M
tmp_table_size = 64M

數值要依主機的記憶體大小決定,不是越大越好。

另外:太長的文章也可以拆開

一篇文章長到塞滿資料表,對讀者來說通常也太長了。把超長的內容拆成幾篇、彼此加上連結,閱讀體驗和網頁載入速度都會比較好。

極少數情況下,「table is full」是主機的硬碟或資料庫空間真的滿了,這時要請主機商確認空間用量。

最後:重建搜尋索引

問題解決、把「Content - Smart Search」重新啟用之後:

  1. 到「元件 → 智慧搜尋」(Components → Smart Search)。
  2. 按上方的「索引」(Index)按鈕,讓 Joomla 重新掃描所有內容。
  3. 完成後到前台搜尋剛才那篇文章,確認找得到。

索引過程中如果又出現同樣的錯誤,代表上面的調整還不夠,需要再調低門檻或放寬 MySQL 的限制。

延伸閱讀

資料庫、主機限制這類問題,常常要同時懂 Joomla 和主機設定才找得到原因。正威網路行銷是 25 年經驗的基隆網頁設計工作室,提供網站維護託管,也服務台北與全台客戶,歡迎來聊聊。

分享這篇文章

返回文章列表更多「joomla技術教學」文章

發表留言

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

讓我們一起打造
您的專屬網站!