通过配置Mysql参数提⾼写⼊速度(整理)
1) innodb_buffer_pool_size
如果⽤Innodb,那么这是⼀个重要变量。相对于MyISAM来说,Innodb对于buffer size更敏感。MySIAM可能对于⼤数据量使⽤默认的
key_buffer_size也还好,但Innodb在⼤数据量时⽤默认值就感觉在爬了。 Innodb的缓冲池会缓存数据和索引,所以不需要给系统的缓存留空间,如果只⽤Innodb,可以把这个值设为内存的70%-80%。和 key_buffer相同,如果数据量⽐较⼩也不怎么增加,那么不要把这个值设太⾼也可以提⾼内存的使⽤率。
2) innodb_additional_pool_size
这个的效果不是很明显,⾄少是当操作系统能合理分配内存时。但你可能仍需要设成20M或更多⼀点以看Innodb会分配多少内存做其他⽤途。
3) innodb_log_file_size
对于写很多尤其是⼤数据量时⾮常重要。要注意,⼤的⽂件提供更⾼的性能,但数据库恢复时会⽤更多的时间。我⼀般⽤64M-512M,具体取决于服务器的空间。
4) innodb_log_buffer_size
默认值对于多数中等写操作和事务短的运⽤都是可以的。如果经常做更新或者使⽤了很多blob数据,应该增⼤这个值。但太⼤了也是浪费内存,因为1秒钟总会 flush(这个词的中⽂怎么说呢?)⼀次,所以不需要设到超过1秒的需求。8M-16M⼀般应该够了。⼩的运⽤可以设更⼩⼀点。
5) innodb_flush_log_at_trx_commit (这个很管⽤)
抱怨Innodb⽐MyISAM慢 100倍?那么你⼤概是忘了调整这个值。默认值1的意思是每⼀次事务提交或事务外的指令都需要把⽇志写⼊(flush)硬盘,这是很费时的。特别是使⽤电池供电缓存(Battery backed up cache)时。设成2对于很多运⽤,特别是从MyISAM表转过来的是可以的,它的意思是不写⼊硬盘⽽是写⼊系统缓存。⽇志仍然会每秒flush到硬盘,所以你⼀般不会丢失超过1-2秒的更新。设成0会更快⼀点,但安全⽅⾯⽐较差,即使MySQL挂了也可能会丢失事务的数据。⽽值2只会在整个操作系统挂了时才可能丢数据。
6) innodb_flush_method:设置InnoDB同步IO的⽅式
1) Default – 使⽤fsync()。
2) O_SYNC 以sync模式打开⽂件,通常⽐较慢。
3) O_DIRECT,在Linux上使⽤Direct IO。可以显著提⾼速度,特别是在RAID系统上。避免额外的数据复制和double buffering(mysql buffering 和OS buffering)
7)保持 thread_cache 在⼀个相对较⾼的数字,⼤约 16 – 防⽌打开连接时缓慢。
8)分配⼀个极⼩的数量给 max_connections 参数 – 太多的连接会⽤尽RAM并锁定MySQL服务。
9)将 innodb_autoextend_increment 配置由于默认8M 调整到 128M
此配置项作⽤主要是当tablespace 空间已经满了后,需要MySQL系统需要⾃动扩展多少空间,每次tablespace 扩展都会让各个SQL 处于等待状态。增加⾃动扩展Size可以减少tablespace⾃动扩展次数。
注:修改完配置之后重启可能失败,这时需要删除 /var/lib/mysql/ ⽬录下的两个ib_logfile⽂件命令rm -fr /var/lib/mysql/ib_logfile* 然后执⾏重启命令(rvice mysqld restart))重启执⾏mysql –uroot -p进⼊mysql 利⽤命令show variables like '%storage%';查看参数是否已被修改。