2011年(264)
分类: Mysql/postgreSQL
2011-06-24 09:03:24
innodb_buffer_pool_size innodb_additional_pool_size innodb_log_file_size innodb_log_buffer_size innodb_flush_log_at_trx_commit (这个很管用)
上面是网上看的,我发现慢查询日志内有很多update和insert的查询,就把innodb_flush_log_at_trx_commit改成了2,效果很明显,改成0会更明显,但安全性比较差。做下面的操作启动mysqld就生效: vim /etc/my.cnf innodb_flush_log_at_trx_commit=2
也可以在mysqld运行时执行: set GLOBAL innodb_flush_log_at_trx_commit = 2
下面是mysql手册上innodb_flush_log_at_trx_commit的解释: 如果innodb_flush_log_at_trx_commit设置为0,log buffer将每秒一次地写入log file中,并且log file的flush(刷到磁盘)操作同时进行;但是,这种模式下,在事务提交的时候,不会有任何动作。如果 innodb_flush_log_at_trx_commit设置为1(默认值),log buffer每次事务提交都会写入log file,并且,flush刷到磁盘中去。如果innodb_flush_log_at_trx_commit设置为2,log buffer在每次事务提交的时候都会写入log file,但是,flush(刷到磁盘)操作并不会同时进行。这种模式下,MySQL会每秒一次地去做flush(刷到磁盘)操作。注意:由于进程调度策 略问题,这个“每秒一次的flush(刷到磁盘)操作”并不是保证100%的“每秒”。 默认值1是为了ACID (atomicity, consistency, isolation, durability)原子性,一致性,隔离性和持久化的考虑。如果你不把innodb_flush_log_at_trx_commit设置为1,你将获得更好的性能,但是,你在系统崩溃的情况,可能会丢失最多一秒钟的事务数据。当你把innodb_flush_log_at_trx_commit设置 为0,mysqld进程的崩溃会导致上一秒钟所有事务数据的丢失。如果你把innodb_flush_log_at_trx_commit设置为2,只有在操作系统崩溃或者系统掉电的情况下,上一秒钟所有事务数据才可能丢失。InnoDB的crash recovery崩溃恢复机制并不受这个值的影响,不管这个值设置为多少,crash recovery崩溃恢复机制都会工作。
另外innodb_flush_method参数也值得关注,对写操作有影响: innodb_flush_method: 设置InnoDB同步IO的方式: 1) Default – 使用fsync()。
mysql二进制轮询的问题: vi /etc/my.cnf expire-logs-days = 7 这样mysql就自动会删除超过7天的二进制日志了。 手动删除可以用PURGE MASTER LOGS,下面也是网上看到的: PURGE MASTER LOGS语法 |