首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 避免「表已滿」錯誤的完整指南

     編輯:MySQL 資料庫相關知識

MySQL「表已滿」錯誤的常見原因與解決方案

在使用 MySQL 時,「表已滿」錯誤可能由多種原因引發。了解各種情境下的成因與對策,能幫助您快速排除問題、保障資料庫穩定運作。

1. 臨時表超過記憶體限制(MySQL 3.23 之前版本)

若您使用的是 MySQL 3.23 之前的版本,「記憶體中」的臨時表大小超過 tmp_table_size 設定值時,就會拋出此錯誤。解決方式有三種:

  • 啟動參數加入 -O tmp_table_size=val 增加臨時表大小上限
  • 查詢前執行 SET SQL_BIG_TABLES=1
  • 啟動 MySQLd 時加入 --big-tables 參數(等同於對所有查詢啟用 SQL_BIG_TABLES)

注意: 自 MySQL 3.23 起,當記憶體臨時表超過 tmp_table_size,伺服器會自動轉換為磁碟基礎的 MyISAM 表,此問題不再發生。

2. InnoDB 表空間不足

使用 InnoDB 表時,若超出表空間大小,需透過擴充 InnoDB 表空間來解決(如新增資料檔案或調整 innodb_data_file_path)。

3. 作業系統檔案大小限制(2GB)

在僅支援 2GB 檔案的舊版作業系統上使用 ISAM 或 MyISAM 表,資料檔或索引檔達到此限制會導致錯誤。建議升級作業系統或遷移至支援大檔案的檔案系統。

4. MyISAM 內部指標大小不足

MyISAM 表若未指定 MAX_ROWS,預設使用 myisam_data_pointer_size(預設 6 字節,可支援 65,536 TB)。若指標過小,可用 ALTER TABLE 調整:

ALTER TABLE tbl_name MAX_ROWS=1000000000 AVG_ROW_LENGTH=nnn;

AVG_ROW_LENGTH 僅需對含有 BLOB/TEXT 欄位的表指定,因 MySQL 無法單靠行數估算所需空間。

檢查表最大資料/索引大小

可使用以下指令檢視:

SHOW TABLE STATUS FROM database LIKE 'tbl_name';
# 或
myisamchk -dv /path/to/table-index-file
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved