一.myisam的IO调优
1.myisam通常在每次写入后把索引的改变刷写到磁盘上.所以批处理通常会更快点.做到这点,可以通过LOCK TABLES,他可以把写入控制到对表解锁.
还可以用delay_key_write变量来延迟索引的写入,如果使用他,只有在表关闭的时候写入键缓存.它有以下选项:
OFF 每次索引改变后,写入磁盘
ON 延迟键开启,但只针对使用DELAY_KEY_WRITE选项创建的表有效
ALL 所有myisam表都是用延迟键写入
延迟键开启,通常不能带来性能上的飞跃,在数据量小,读取命中率较好并且写入命中率较差的时候效果最好.但也带来一些负面影响
a.服务器崩溃并且数据没被刷写到磁盘上,索引就会损坏.
b.mysql需要更多的时间来关闭表
c.FLUSH TABLES可能需要更多的时间
d.查询要等待键缓存区释放空间而停止
2.myisam配置从损坏中恢复
myisam_recover(命令行参数是myisam_recover_options)控制了myisam查找和修复表的方式
有以下值:
DEFAULT:默认或不设置,只恢复
BACKUP:把数据文件备份到.BAK文件中
FORCE:即使.MYD丢失数据多于一行,恢复也会继续
QUICK:除非有删除的数据才会跳过恢复.
可以使用多重设置,中间用逗号隔开,比如BACKUP,FORCE
二.innodb的IO调优
1.innodb日志文件总体大小由innodb_log_file_size和innodb_log_files_in_group控制,并且他们对写入影响极大.默认值分别是5m和10m.
2.控制缓冲大小的变量是innodb_log_buffer_size,默认是1m,推荐设置值是1m到8m
3.innodb_flush_method可以配置innodb实际与文件系统进行交互的方式
4.配置表空间
innodb_data_file_path定义表空间文件
innodb_data_home_dir定义在目录中
innodb_data_file_path = ibdata1:1G;ibdata2:1G;ibdata3:1G
上面的例子在3个文件中创建了3GB表空间
下面的例子限制延伸文件最大为2GB
...ibdata3:1G:autoextend:max:2G
5.使用innodb_file_per_table使每个表使用一个文件,以表名.ibd保存数据.但坏处是表空间的碎片都放在了.ibd中,这对于很小的表尤其会成为一个问题.因为innodb的页面大小是16kb,即使表只有1kb,也会需要至少16kb的磁盘空间
三.myisam的并发调优
1.可以使用concurrent_insert变量配置myisam的并发插入行为,
0 不允许并发插入
1 默认值,只要表中没有空缺,允许并发插入
3 强制并发插入到表尾
四.innodb并发调优
1.控制并发的的方式是使用innodb_thread_concurrency变量,它限制了有多少线程进入内核.0为不限制
并发 = cpu数量*磁盘数量*2
2.innodb_commit_concurrency决定了某一时刻有多少线程提交,但innodb_thread_concurrency被设置为一个较小值,造成大量线程不佳时,可以设置该值