下列 mysqld 的選項可用於變更 MyISAM 資料表的行為。如需其他資訊,請參閱 第 7.1.7 節,〈伺服器命令選項〉。
表 18.3:MyISAM 選項和變數參考
| 名稱 | 命令列 | 選項檔案 | 系統變數 | 狀態變數 | 變數範圍 | 動態 |
|---|---|---|---|---|---|---|
| bulk_insert_buffer_size | 是 | 是 | 是 | 兩者 | 是 | |
| concurrent_insert | 是 | 是 | 是 | 全域 | 是 | |
| delay_key_write | 是 | 是 | 是 | 全域 | 是 | |
| have_rtree_keys | 是 | 全域 | 否 | |||
| key_buffer_size | 是 | 是 | 是 | 全域 | 是 | |
| log-isam | 是 | 是 | ||||
| myisam-block-size | 是 | 是 | ||||
| myisam_data_pointer_size | 是 | 是 | 是 | 全域 | 是 | |
| myisam_max_sort_file_size | 是 | 是 | 是 | 全域 | 是 | |
| myisam_mmap_size | 是 | 是 | 是 | 全域 | 否 | |
| myisam_recover_options | 是 | 是 | 是 | 全域 | 否 | |
| myisam_sort_buffer_size | 是 | 是 | 是 | 兩者 | 是 | |
| myisam_stats_method | 是 | 是 | 是 | 兩者 | 是 | |
| myisam_use_mmap | 是 | 是 | 是 | 全域 | 是 | |
| tmp_table_size | 是 | 是 | 是 | 兩者 | 是 |
下列系統變數會影響 MyISAM 資料表的行為。如需其他資訊,請參閱 第 7.1.8 節,〈伺服器系統變數〉。
用於大量插入最佳化的樹狀快取大小。
注意這是每個執行緒的限制!
不要在任何
MyISAM資料表的寫入之間清除索引緩衝區。注意如果這麼做,當資料表正在使用時,您不應該從另一個程式 (例如從另一個 MySQL 伺服器或使用 myisamchk) 存取
MyISAM資料表。這麼做有索引損毀的風險。使用--external-locking無法消除此風險。MySQL 在重新建立
MyISAM索引時 (在REPAIR TABLE、ALTER TABLE或LOAD DATA期間) 允許使用的暫存檔最大大小。如果檔案大小會大於此值,則會改為使用索引快取建立索引,速度會比較慢。該值以位元組為單位。設定損毀
MyISAM資料表自動復原的模式。設定復原資料表時使用的緩衝區大小。
如果您啟動 mysqld 並設定 myisam_recover_options 系統變數,則會啟用自動復原。在這種情況下,當伺服器開啟 MyISAM 資料表時,它會檢查資料表是否標記為損毀,或資料表的開啟次數變數是否不為 0,並且您正在執行伺服器時停用了外部鎖定。如果符合任一條件,則會發生下列情況
伺服器會檢查資料表是否有錯誤。
如果伺服器發現錯誤,它會嘗試進行快速資料表修復 (使用排序且不重新建立資料檔案)。
如果由於資料檔案中的錯誤 (例如,重複索引鍵錯誤) 而導致修復失敗,則伺服器會再次嘗試,這次會重新建立資料檔案。
如果修復仍然失敗,伺服器會使用舊的修復選項方法再次嘗試一次 (逐列寫入而不排序)。此方法應該能夠修復任何類型的錯誤,而且磁碟空間需求低。
如果復原無法從先前完成的陳述式中復原所有列,而且您未在 myisam_recover_options 系統變數的值中指定 FORCE,則自動修復會中止並在錯誤記錄中顯示錯誤訊息
Error: Couldn't repair table: test.g00pages如果您指定 FORCE,則會改為寫入類似這樣的警告
Warning: Found 344 of 354 rows when repairing ./test/g00pages如果自動復原值包含 BACKUP,復原程序會建立名稱格式為 的檔案。您應該有一個 cron 指令碼,自動將這些檔案從資料庫目錄移到備份媒體。tbl_name-datetime.BAK