10bet网址
MySQL 5.7参考手册
相关的文档10bet官方网站 本手册下载
PDF (Ltr)- 36.3 mb
PDF (A4)- 36.3 mb
手册页(TGZ)- 235.4 kb
手册页(邮政编码)- 347.1 kb
信息(Gzip)- 3.3 mb
信息(邮政编码)- 3.3 mb
本手册节选

8.6.3优化REPAIR TABLE语句

修理表MyISAM表与using类似myisamchk对于修复操作,一些相同的性能优化应用:

  • myisamchk具有控制内存分配的变量。您可以通过设置这些变量来提高其性能,如第4.6.3.6节,“myisamchk内存使用情况”

  • 修理表,同样的原理也适用,但是因为修复是由服务器完成的,所以您可以设置服务器系统变量而不是myisamchk变量。此外,除了设置内存分配变量外,还增加myisam_max_sort_file_size系统变量增加了修复使用更快的文件排序方法的可能性,并避免了通过键缓存方法进行的较慢的修复。在检查确保有足够的空闲空间保存表文件的副本之后,将该变量设置为系统的最大文件大小。包含原始表文件的文件系统中必须有可用的空闲空间。

假设一个myisamchk表修复操作使用以下选项来设置它的内存分配变量:

——key_buffer_size=128M——myisam_sort_buffer_size=256M——read_buffer_size=64M——write_buffer_size=64M

其中的一些myisamchk变量对应服务器系统变量:

myisamchk变量 系统变量
key_buffer_size key_buffer_size
myisam_sort_buffer_size myisam_sort_buffer_size
read_buffer_size read_buffer_size
write_buffer_size 没有一个

每个服务器系统变量都可以在运行时设置,其中一些变量(myisam_sort_buffer_sizeread_buffer_size)除了全局值之外,还有一个会话值。设置会话值将限制更改对当前会话的影响,并且不会影响其他用户。更改仅限全局变量(key_buffer_sizemyisam_max_sort_file_size)也会影响其他用户。为key_buffer_size,您必须考虑到缓冲区是与这些用户共享的。例如,如果您设置myisamchkkey_buffer_size变量为128MB,您可以设置相应的key_buffer_size大于该值的系统变量(如果尚未设置为更大的值),允许其他会话中的活动使用键缓冲区。但是,更改全局键缓冲区大小将使缓冲区失效,导致磁盘I/O增加,并降低其他会话的速度。避免此问题的另一种方法是使用单独的键缓存,将表中的索引分配给它,并在修复完成时释放它。看到第8.10.2.2节,“多键缓存”

综上所述,a修理表操作可以执行如下操作来使用类似于myisamchk命令。这里分配了一个单独的128MB密钥缓冲区,并且假设文件系统允许至少100GB的文件大小。

SET SESSION myisam_sort_buffer_size = 256*1024*1024;SET SESSION read_buffer_size = 64*1024*1024;SET GLOBAL myisam_max_sort_file_size = 100*1024*1024*1024;全球repair_cache设置。key_buffer_size= 128*1024*1024; CACHE INDEXtbl_name在repair_cache;将索引加载到缓存中tbl_name;修理表tbl_name;全球repair_cache设置。key_buffer_size = 0;

如果您打算更改全局变量,但希望仅在类的持续时间内这样做修理表操作,将其值保存在用户变量中,并在之后恢复它。例如:

SET @old_myisam_sort_buffer_size = @@GLOBAL.myisam_max_sort_file_size;SET GLOBAL myisam_max_sort_file_size = 100*1024*1024*1024;修复表SET GLOBAL myisam_max_sort_file_size = @old_myisam_max_sort_file_size;

影响的系统变量修理表可以在服务器启动时全局设置,如果您希望这些值在默认情况下生效。例如,将这些行添加到服务器my.cnf文件:

[mysqld] myisam_sort_buffer_size=256M key_buffer_size=1G myisam_max_sort_file_size=100G

这些设置不包括read_buffer_size.设置read_buffer_size全局设置为较大的值对所有会话都是如此,并且可能会由于有多个并发会话的服务器内存分配过多而导致性能下降。