mysql8配置参数优化_⾼性能的MySQL(8)优化服务器配置
⼀IO
有⼀些配置项影响着MySQL怎样同步数据到磁盘以及如何做恢复操作,这写操作对性能影响很⼤,因为都设计到昂贵的I/O操作,通常保证数据⽴刻并且⼀致的写到磁盘是很昂贵的,有的时候不得不冒⼀点险,延迟持久化到磁盘,来增加并发和减少I/O等待。
⼀、InnoDB I/O配置
对于常见的应⽤,InnoDB⽇志⽂件⼤⼩、InnoDB怎样刷新⽇志缓冲,以及怎样执⾏I/O⽐较重要。
a、InnoDB事务⽇志
InnoDB使⽤⽇志来减少提交事务时的开销,⽇志记录了事务,就⽆须在每个事务提交时把缓冲池刷新到磁盘中了。⼀旦⽇志安全写到磁盘,事务就持久化了,这是必须的,因为⽇志有固定的⼤⼩,⽽且是环形⽅式写,写到尾部,会重现跳到开头继续写。InnoDB使⽤⼀个后台线程智能刷新这些变更到数据⽂件。
整体的⽇志⽂件⼤⼩受控于innodb_log_file_size和innodb_log_files_in_group两个参数,默认情况下只有2个5MB的⽂件,对⾼性能⼯作来说,⾄少需要⼏百MB或者上GB。
要修改⽇志⽂件⼤⼩,必须完全⼲净的关闭MySQL,否则数据就⽆法恢复了,最好先备份旧的⽇志⽂件。
当InnoDB变更任何数据时,会写⼀条变更记录到内存⽇志缓冲区。在缓冲区满的时候,事务提交的时候,或者每⼀秒,InnoDB都会刷新缓冲区的内容到磁盘⽇志⽂件。如果有⼤事务,增加⽇志缓冲区(默认1MB)⼤⼩可以减少I/O,变量innodb_log_buffer_size控制,⼏⼗上百MB都可以。
作为⼀个经验法则,⽇志⽂件的全部⼤⼩,应该⾜够容纳服务器⼀个⼩时的活动内容。
当InnoDB把⽇志缓冲刷新到⽇志⽂件时,会先锁住缓冲区,刷新完成,移动剩下的条⽬到缓冲区前⾯。
⽇志缓冲必须刷新到持久化存储,以确保提交的事务完全被持久化了。如果和持久相⽐更在乎性能可以修改innodb_flush_log_at_trx_commit来控制刷新频率,有如下的值
0:
把⽇志缓冲写到⽇志⽂件,并且每秒刷新⼀次,但是事务提交时不做任何时。
1:
把⽇志缓冲写到⽇志⽂件,并且每次事务提交都刷新到持久化存储。
2:
每次提交时把⽇志缓冲写到⽇志⽂件,但是不刷新,InnoDB每秒做⼀次刷新。
在⼤部分操作系统中,把缓冲写到⽇志只是简单的把数据从InnoDB的内存缓冲转移到操作系统的缓存,么有真正的持久化。
把⽇志刷新到持久化存储意味着InnoDB请求操作系统把数据刷出缓存,并确认写到磁盘了,这是⼀个阻塞I/O的调⽤,知道数据被全部写完。
使⽤innodb_flush_method选项可以配置InnoDB如何跟踪⽂件系统相互作⽤。有如下⼏个值可以设置,但不⼀⼀介绍了。
1、fdatasync
2、0_DIRECT
3、ALL_0_DIRECT
4、0_DSYNC
5、还有⼏个windows下的配置。
InnoDB把数据保存到表空间内。配置表空间,通过innodb_data_file_path可以定制表空间⽂件,这写⽂件都放在
innodb_data_home_dir指定⽬录下:innodb_data_home_dir = /var/lib/mysql/
innodb_data_file_path = ibdata1:1G;ibdata2:2G;
为了允许表空间在超过了分配空间时还能增长,可以配置最后⼀个⽂件⾃动扩展ibdata3:1G:autoexten
d:max:2G
限制最多扩展到2G。
管理⼀个单独的表空间有点⿇烦,innodb_file_per_table选项可以让InnoDB为每张表使⽤⼀个⽂件。存储为”表名.ibd“的⽂件,这个在之前的分区技术⾥已经做过试验了,有实际的截图,⼤家可以看看。虽然易于管理,但是也有缺点:
每张表使⽤⾃⼰的表空间,移除表空间实际上需要InnoDB锁定和扫描缓冲池,查属于这个表的空间的页⾯,在⼀个庞⼤的缓冲池主哦姑娘,这个⾮常慢。但是Percona Server有⼀个修复的选项 innodb_lazy_drop_table。
⼆、MyISAM的I/O配置
MyISAM通常每次写操作都会把索引变更刷新到磁盘,所以批量操作会更快⼀些,lock table是⼀种办法。
通过设置delay_key_write变量也可以延迟索引的写⼊,这样修改的键缓冲知道表关闭才会被刷新,可能的配置如下:
下载mysql服务端命令
OFF:
每次写操作后刷新键缓冲,除⾮表被lock tables锁定了。
ON:
打开延迟键写⼊,只对delay_key_write选项创建的表有效。
ALL:
所有MyISAM表都会延迟键写⼊。
另外除了MyISAM索引的I/O还可以配置MyISAM怎样尝试从损坏中修复
myisam_recover选项可以控制,可以设置的值如下:
DEFAULT(或者不设置):
尝试修复任何被标记为崩溃或者么有标记为完全关闭的表。
BACKUP:
将数据⽂件备份到.BAK⽂件,以便随后进⾏检查。
FORCE:
即使.MYD⽂件中丢失的数据超过⼀⾏,也让恢复继续。
QUICK:
除⾮有删除块,否则跳过恢复。块中已经删除的⾏也会占⽤空间,但是可以被后⾯的insert语句重⽤。
我们建议打开这个选项,尤其是只有⼀些⼩的MyISAM表时,服务器运⾏⼀些损坏的MyISAM表是很危险的。然⽽如果表很⼤,这是个低效的做法,⽐较好的主意是启动后⽤check tables和repair tables命令来做。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。