MySQL参数:innodb_flush_log_at_trx_commit和sync_binlog

innodb_flush_log_at_trx_commit和sync_binlog是MySQL的两个配置参数,前者是InnoDB引擎特有的。在实际应用中,它们的配置对于MySQL的性能有很大影响。

1.innodb_flush_log_at_trx_commit

innodb_flush_log_at_trx_commit参数指定了InnoDB在事务提交后的日志写入频率。这么说其实并不严谨,不同取值具有不同的意义和表现。

①.当innodb_flush_log_at_trx_commit取值为0的时候,log buffer会每秒写入到日志文件并刷写(flush)到磁盘。但每次事务提交不会有任何影响,也就是log buffer的刷写操作和事务提交操作没有关系。在这种情况下,MySQL性能最好,但如果mysqld进程崩溃,通常会导致最后1s的日志丢失。

②.=1时,每次事务提交时,log buffer会被写入到日志文件并刷写到磁盘。这也是默认值。这是最安全的配置,但由于每次事务都需要进行磁盘I/O,所以也最慢。

③.=2时,每次事务提交会写入日志文件,但并不会立即刷写到磁盘,日志文件会每秒刷写一次到磁盘。这时如果mysqld进程崩溃,由于日志已经写入到系统缓存,所以并不会丢失数据;在操作系统崩溃的情况下,通常会导致最后 1s 的日志丢失。

上面说到的「最后1s」并不是绝对的,有的时候会丢失更多数据。有时候由于调度的问题,每秒刷写(once-per-second flushing)并不能保证 100% 执行。对于一些数据一致性和完整性要求不高的应用,配置为2就足够了;如果为了最高性能,可以设置为 0。有些应用,如支付服务,对一致性和完整性要求很高,所以即使最慢,也最好设置为

2.sync_binlog

sync_binlog是MySQL的二进制日志(binary log)同步到磁盘的频率。MySQL server在binary log每写入sync_binlog次后,刷写到磁盘。

如果autocommit开启,每个语句都写一次binary log,否则每次事务写一次。

①.默认值是=0,不主动同步,而依赖操作系统本身不定期把文件内容flush到磁盘。设为1最安全,在每个语句或事务后同步一次binary log,即使在崩溃时也最多丢失一个语句或事务的日志,但因此也最慢。

②.大多数情况下,对数据的一致性并没有很严格的要求,所以并不会把sync_binlog配置成1. 为了追求高并发,提升性能,可以设置为 100 或直接用0. 而和innodb_flush_log_at_trx_commit一样,对于支付服务这样的应用,还是比较推荐sync_binlog=1.

MySQL性能优化(一)的更多相关文章

  1. Mysql - 性能优化之子查询

    记得在做项目的时候, 听到过一句话, 尽量不要使用子查询, 那么这一篇就来看一下, 这句话是否是正确的. 那在这之前, 需要介绍一些概念性东西和mysql对语句的大致处理. 当Mysql Server ...

  2. Mysql性能优化三(分表、增量备份、还原)

    接上篇Mysql性能优化二 对表进行水平划分 如果一个表的记录数太多了,比如上千万条,而且需要经常检索,那么我们就有必要化整为零了.如果我拆成100个表,那么每个表只有10万条记录.当然这需要数据在逻 ...

  3. [MySQL性能优化系列]提高缓存命中率

    1. 背景 通常情况下,能用一条sql语句完成的查询,我们尽量不用多次查询完成.因为,查询次数越多,通信开销越大.但是,分多次查询,有可能提高缓存命中率.到底使用一个复合查询还是多个独立查询,需要根据 ...

  4. [MySQL性能优化系列]巧用索引

    1. 普通青年的索引使用方式 假设我们有一个用户表 tb_user,内容如下: name age sex jack 22 男 rose 21 女 tom 20 男 ... ... ... 执行SQL语 ...

  5. MySQL性能优化:索引

    MySQL性能优化:索引 索引提供指向存储在表的指定列中的数据值的指针,然后根据您指定的排序顺序对这些指针排序.数据库使用索引以找到特定值,然后顺指针找到包含该值的行.这样可以使对应于表的SQL语句执 ...

  6. mysql 性能优化方向

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...

  7. MySQL性能优化总结

    一.MySQL的主要适用场景 1.Web网站系统 2.日志记录系统 3.数据仓库系统 4.嵌入式系统 二.MySQL架构图: 三.MySQL存储引擎概述 1)MyISAM存储引擎 MyISAM存储引擎 ...

  8. MYSQL性能优化的最佳20+条经验

    MYSQL性能优化的最佳20+条经验 2009年11月27日 陈皓 评论 148 条评论  131,702 人阅读 今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数 ...

  9. [MySQL性能优化系列]LIMIT语句优化

    1. 背景 假设有如下SQL语句: SELECT * FROM table1 LIMIT offset, rows 这是一条典型的LIMIT语句,常见的使用场景是,某些查询返回的内容特别多,而客户端处 ...

  10. mysql 性能优化方案

    网 上有不少MySQL 性能优化方案,不过,mysql的优化同sql server相比,更为麻烦与复杂,同样的设置,在不同的环境下 ,由于内存,访问量,读写频率,数据差异等等情况,可能会出现不同的结果 ...

随机推荐

  1. Qt SizePolicy 属性

    控件的sizePolicy说明控件在布局管理中的缩放方式.Qt提供的控件都有一个合理的缺省sizePolicy,但是这个缺省值有时不能适合 所有的布局,开发人员经常需要改变窗体上的某些控件的sizeP ...

  2. Stack and Heap 堆和栈的区别

    在和计算机内存打交道时,我们一定会碰到堆和栈,这两个东西很容易搞混,那么现在就来梳理一下二者的关系. 栈是用来静态分配内存的而堆是动态分配内存的,它们都是存在于计算机内存之中. 栈的分配是在程序编译的 ...

  3. tp框架中表单数据的接收

    在thinkphp框架中,接收传过来的表单数据.如果一个一个处理,当数据多时,不显示.也可以用循环.最好的是使用create函数,接受所有的数据.代码行大大减少.很方便.

  4. pox目录中的交换机mac地址学习模块 l2_multi源码

    # Copyright 2012-2013 James McCauley # # Licensed under the Apache License, Version 2.0 (the "L ...

  5. Web 在线文件管理器学习笔记与总结(15)剪切文件夹 (16)删除文件夹

    (15)剪切文件夹 ① 通过rename($oldname,$newname) 函数实现剪切文件夹的操作 ② 需要检测目标文件夹是否存在,如果存在还要检测目标目录中是否存在同名文件夹,如果不存在则剪切 ...

  6. 学会查看tomcat的日志文件

    1.Tomcat的启动日志写出了几乎所有的启动历史记录, 包括部署项目,deploy项目.用了什么log日志记录软件,启动的tomcat引擎是什么,正在部署什么项目deploying

  7. 使用PHP获取网站Favicon的方法

    使用PHP获取网站Favicon的方法 Jan022014 作者:Jerry Bendy   发布:2014-01-02 23:18   分类:PHP   阅读:4,357 views   20条评论 ...

  8. BCP 命令

    bcp 实用工具 我们可以通过如下BCP命令(注意不能有回车)将其导出为XML文件,并保存: BCP "SELECT TOP 30 [bom_no],[LEVEL] FROM [sqladm ...

  9. php--某个字符在字符串中的位置比较

    <?php $haystack = 'helloe'; $needle = 'e'; $pos = stripos($haystack, $needle); echo "\n" ...

  10. jq tab

    <div id="outer"> <ul id="tab"> <li class="current">t ...