其实,我不是专业的DB管理同学,甚至算不上会了解。只是在最近的工作中,遇到了DB server端优化的契机,所以把这些手段记录下来:
通过调整这个参数的值,可以让DB更给力:
这两个参数的含义:
1. sync_binlog
设置为1,this makes MySQL synchronize the binary log's contents to disk each time it commits a transaction。
设置为1000,那么意味着缓存里缓存了1000条数据,如果此时server宕机或OS crash,那么缓存里的数据就会丢失。这可能就是“速度”的代价。
具体设置成多少,要看应用上的“承受”能力及mysql server的“靠谱”程度,折衷进行考虑。
2. innodb_flush_log_at_trx_commit
设置为1,每次事务提交,都把日志写入硬盘(真的flush磁盘),这是很费时的。特别是使用电池供电缓存(Battery backed up cache)时。
设置为2,每次事务提交,不是直接flush写磁盘,而是先写入缓存。日志仍会持续flush进磁盘,只是这个频率和节奏由OS负责,一般是1-2s一刷。
设置为0,log buffer每秒就会被刷写日志文件到磁盘,提交事务的时候不做任何操作。话说会更快一点,但安全方面较差。
总的来说,
设为1,保证了完整的ACID性。设置成更高的值,可以
换取更高的性能,但是在系统崩溃的时候,将会丢失大约1秒的数据。
设为2,只有在操作系统崩溃或者断电的时候才会丢失最后1秒的数据。InnoDB在做恢复的时候会忽略这个值。
设为0,mysqld进程崩溃的时候,就会丢失最后1秒的事务。