文件首頁
MySQL 9.0 參考手冊
相關文件 下載本手冊
PDF (美式信紙) - 40.0Mb
PDF (A4) - 40.1Mb
Man Pages (TGZ) - 258.2Kb
Man Pages (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


6.6.4.6 myisamchk 記憶體用量

當您執行 myisamchk 時,記憶體配置非常重要。myisamchk 使用的記憶體不會超過其記憶體相關變數設定的值。如果您要在非常大的資料表上使用 myisamchk,您應該先決定要讓它使用多少記憶體。預設值是只使用約 3MB 來執行修復。透過使用更大的值,您可以讓 myisamchk 執行得更快。例如,如果您有超過 512MB 的可用 RAM,您可以使用如下的選項(除了您可能指定的任何其他選項):

myisamchk --myisam_sort_buffer_size=256M \
           --key_buffer_size=512M \
           --read_buffer_size=64M \
           --write_buffer_size=64M ...

使用 --myisam_sort_buffer_size=16M 對於大多數情況來說可能已足夠。

請注意,myisamchk 會在 TMPDIR 中使用暫存檔案。如果 TMPDIR 指向記憶體檔案系統,則很容易發生記憶體不足錯誤。如果發生這種情況,請使用 --tmpdir=dir_name 選項執行 myisamchk,以指定位於有更多空間的檔案系統上的目錄。

在執行修復操作時,myisamchk 也需要大量的磁碟空間

  • 資料檔案大小的兩倍(原始檔案和副本)。如果您使用 --quick 進行修復,則不需要此空間;在這種情況下,只會重新建立索引檔案。此空間必須與原始資料檔案位於相同的檔案系統上,因為副本是在與原始檔案相同的目錄中建立的。

  • 用於取代舊索引檔案的新索引檔案的空間。舊索引檔案會在修復操作開始時被截斷,因此您通常會忽略此空間。此空間必須與原始資料檔案位於相同的檔案系統上。

  • 當使用 --recover--sort-recover 時(但不使用 --safe-recover 時),您需要在磁碟上有空間用於排序。此空間會配置在暫存目錄中(由 TMPDIR--tmpdir=dir_name 指定)。以下公式會產生所需的空間量

    (largest_key + row_pointer_length) * number_of_rows * 2

    您可以使用 myisamchk -dv tbl_name 檢查索引鍵的長度和 row_pointer_length (請參閱 第 6.6.4.5 節,「使用 myisamchk 取得資料表資訊」)。row_pointer_lengthnumber_of_rows 值是資料表描述中的 Datafile pointerData records 值。若要判斷 largest_key 值,請檢查資料表描述中的 Key 行。Len 欄位表示每個索引鍵部分的位元組數。對於多欄索引,索引鍵大小是所有索引鍵部分的 Len 值總和。

如果您在修復期間遇到磁碟空間問題,您可以嘗試使用 --safe-recover 而不是 --recover