18.2.1 MyISAM 启动选项
以下是对mysqld的选项,可以用来更改MyISAM表的行为。对于更多信息,请见第7.1.7节,“服务器命令选项”。
表18.3 MyISAM 选项和变量参考
| Name | Cmd-Line | Option File | System Var | Status Var | Var Scope | Dynamic |
|---|---|---|---|---|---|---|
| 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节,“服务器系统变量”。
-
批量插入优化中使用的树缓存大小。
Note这是一个每个线程的限制!
-
不在写入任何
MyISAM表时刷新键缓存。Note如果您这样做,您不能从另一个程序(例如,从另一个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,恢复过程将创建以tbl_name-datetime.BAK