1.mysql有许多系统变量,可以设置,系统变量设置不同,不同的系统将导致执行状态。

故mysql提供两组命令,分别查看系统设置和执行状态。

1、系统设置:

SHOW [GLOBAL | SESSION] VARIABLES [like_or_where]

SHOW VARIABLES shows the values of MySQL system variables.

2、执行状态:

SHOW [GLOBAL | SESSION] STATUS [like_or_where]

SHOW STATUS provides server status information.

备注:SHOW XXX 可能会显示非常多内容。类似Linux下内容太多了,往往须要grep来过滤,那么mysql也考虑到了这点,使用LIKE字句能够过滤。

在安装完MySQL之后。肯定是须要对MySQL的各种參数选项进行一些优化调整的。

尽管MySQL系统的伸缩性非常强,既能够在有非常充足的硬件资源环境下高效的执行,也能够在极少资源环境下非常好的执行。但无论如何,尽可能充足的硬件资源对MySQL的性能提升总是有帮助的。在这一节我们主要分析一下MySQL的日志(主要是Binlog)对系统性能的影响。并依据日志的相关特性得出对应的优化思路。

日志产生的性能影响

因为日志的记录带来的直接性能损耗就是数据库系统中最为昂贵的IO资源。

在之前介绍MySQL物理架构的章节中,我们已经了解到了MySQL的日志包含错误日志(ErrorLog),更新日志(UpdateLog)。二进制日志(Binlog)。查询日志(QueryLog),慢查询日志(SlowQueryLog)等。当然。更新日志是老版本号的MySQL才有的。眼下已经被二进制日志替代。

在默认情况下,系统只打开错误日志。关闭了其它全部日志,以达到尽可能降低IO损耗提高系统性能的目的。可是在一般略微重要一点的实际应用场景中,都至少须要打开二进制日志。由于这是MySQL非常多存储引擎进行增量备份的基础,也是MySQL实现复制的基本条件。有时候为了进一步的性能优化,定位运行较慢的SQL语句。非常多系统也会打开慢查询日志来记录运行时间超过特定数值(由我们自行设置)的SQL语句。

普通情况下,在生产系统中非常少有系统会打开查询日志。由于查询日志打开之后会将MySQL中运行的每一条Query都记录到日志中,会该系统带来比較大的IO负担,而带来的实际效益却并非非常大。一般仅仅有在开发測试环境中,为了定位某些功能详细使用了哪些SQL语句的时候,才会在短时间段内打开该日志来做对应的分析。所以,在MySQL系统中。会对性能产生影响的MySQL日志(不包含各存储引擎自己的日志)主要就是Binlog了。

2.Binlog 相关參数及优化策略。

binlog_cache_size

Binlog_cache_disk_use

Binlog_cache_use

max_binlog_cache_size

max_binlog_size

sync_binlog

“binlog_cache_size":在事务过程中容纳二进制日志SQL语句的缓存大小。

二进制日志缓存是server支持事务存储引擎而且server启用了二进制日志(—log-bin选项)的前提下为每一个client分配的内存,注意,是每一个Client都能够分配设置大小的binlogcache空间。假设读者朋友的系统中常常会出现多语句事务的华,能够尝试添加该值的大小,以获得更有的性能。

当然,我们能够通过MySQL的下面两个状态变量来推断当前的binlog_cache_size的状况:Binlog_cache_use和Binlog_cache_disk_use。

Binlog_cache_disk_use:表示由于我们binlog_cache_size设计的内存不足导致缓存二进制日志用到了暂时文件的次数

Binlog_cache_use :表示 用binlog_cache_size缓存的次数

当相应的Binlog_cache_disk_use 值比較大的时候 我们能够考虑适当的调高 binlog_cache_size 相应的值

show global status like 'bin%';

上述语句我们能够得到当前 数据库binlog_cache_size的使用情况

mysql> show status like 'binlog_%';

+-----------------------+-----------+

| Variable_name         |
Value     |

+-----------------------+-----------+

| Binlog_cache_disk_use | 0         |

| Binlog_cache_use      |
120402264 |

+-----------------------+-----------+

“max_binlog_cache_size”:和"binlog_cache_size"相相应,可是所代表的是binlog可以使用的最大cache内存大小。

当我们运行多语句事务的时候。max_binlog_cache_size假设不够大的话,系统可能会报出“Multi-statementtransactionrequiredmorethan'max_binlog_cache_size'bytesofstorage”的错误。

“max_binlog_size”:Binlog日志最大值,一般来说设置为512M或者1G,但不能超过1G。

该大小并不能很严格控制Binlog大小。尤其是当到达Binlog比較靠近尾部而又遇到一个较大事务的时候。系统为了保证事务的完整性。不可能做切换日志的动作,仅仅能将该事务的全部SQL都记录进入当前日志,直到该事务结束。这一点和Oracle的Redo日志有点不一样,由于Oracle的Redo日志所记录的是数据文件的物理位置的变化,并且里面同一时候记录了Redo和Undo相关的信息,所以同一个事务是否在一个日志中对Oracle来说并不关键。

而MySQL在Binlog中所记录的是数据库逻辑变化信息,MySQL称之为Event。实际上就是带来数据库变化的DML之类的Query语句。

“sync_binlog”:这个參数是对于MySQL系统来说是至关重要的,他不仅影响到Binlog对MySQL所带来的性能损耗,并且还影响到MySQL中数据的完整性。

对于“sync_binlog”參数的各种设置的说明例如以下:

sync_binlog=0,当事务提交之后。MySQL不做fsync之类的磁盘同步指令刷新binlog_cache中的信息到磁盘,而让Filesystem自行决定什么时候来做同步。或者cache满了之后才同步到磁盘。

sync_binlog=n。当每进行n次事务提交之后,MySQL将进行一次fsync之类的磁盘同步指令来将binlog_cache中的数据强制写入磁盘。

在MySQL中系统默认的设置是sync_binlog=0,也就是不做不论什么强制性的磁盘刷新指令。这时候的性能是最好的,可是风险也是最大的。

由于一旦系统Crash。在binlog_cache中的全部binlog信息都会被丢失。而当设置为“1”的时候,是最安全可是性能损耗最大的设置。由于当设置为1的时候。即使系统Crash。也最多丢失binlog_cache中未完毕的一个事务,对实际数据没有不论什么实质性影响。从以往经验和相关測试来看。对于高并发事务的系统来说,“sync_binlog”设置为0并设置为1该系统写入的性能差距可能高达5时报或其他许多。

版权声明:本文博主原创文章,博客,未经同意不得转载。

mysql binlog参数设置的更多相关文章

  1. 生产环境mysql的参数设置不一样,好好的程序,又出错

    一.概述 报错信息如下: org.springframework.jdbc.BadSqlGrammarException: ### Error querying database.  Cause: c ...

  2. java 项目开启mysql binlog参数后报500错误:

    问题: Cannot execute statement: impossible to write to binary log since BINLOG_FORMAT = STATEMENT and ...

  3. mysql配置参数设置和进程管理

    # For advice on how to change settings please see # http://dev.mysql.com/doc/refman/5.7/en/server-co ...

  4. MySQL wait_timeout参数设置与网上常见错误小纠

    discard connection com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link fail ...

  5. MySQL的常见存储引擎介绍与参数设置调优

    MySQL常用存储引擎之MyISAM 特性: 1.并发性与锁级别 2.表损坏修复 check table tablename repair table tablename 3.MyISAM表支持的索引 ...

  6. MySQL的常见存储引擎介绍与参数设置调优(转载)

    原文地址:http://www.cnblogs.com/demon89/p/8490229.html MySQL常用存储引擎之MyISAM 特性: 1.并发性与锁级别 2.表损坏修复 check ta ...

  7. (4.6)mysql备份还原——深入解析二进制日志(2)binlog参数配置解析

    关键词:binlog配置,binlog参数,二进制日志配置,二进制文件参数配置 关键词:binlog缓存,binlog 刷新 0.bin写入流程 写binlog流程如下:# 数据操作buffer po ...

  8. MySQL Binlog常用参数

    ====================================================================== MySQL Binlog常用参数 log_bin 设置此参 ...

  9. MySQL参数设置

    InnoDB配置 从MySQL 5.5版本开始,InnoDB就是默认的存储引擎并且它比任何其它存储引擎的使用要多得多.那也是为什么它需要小心配置的原因. 1 innodb_file_per_table ...

随机推荐

  1. 原生AJAX如何异步提交数据?

    AJAX概述 AJAX:Asynchronous Javascript And XML,异步的JS和XML.2001,Google为了改进搜索的用户体验,提出了GoogleSugguest效果,正式提 ...

  2. UIView属性clipsTobounds的应用

    view添加view,并剪边(UIView属性clipsTobounds的应用) 如题,有两个view: view1,view2 view1添加view2到其中,如果view2大于view1,或者vi ...

  3. Timer.4 - Using a member function as a handler

    In this tutorial we will see how to use a class member function as a callback handler. The program s ...

  4. [core java学习笔记][第四章对象与类]

    4.3 用户自定义类 4.3.1 类数组的声明 需要两次new Employee[]=staff=new Employedd[3]; staff[0]=new Employedd(参数列表); sta ...

  5. UISegmentedControl判断点击第几项

    UISegmentedControl 关于UISegmentedControl判断当前点击的是第几项,找了很久,终于再老外的博客上找到了,在委托中 UISegmentedControl *Seg=se ...

  6. jquery怎么获取URL的参数

    function request(paras) {                var url = location.href;                var paraString = ur ...

  7. JavaScript中String对象的match()、replace() 配合正则表达式使用

    正则表达式由来已久,查找替换功能非常强大,但模板难记复杂. JavaScript中String对象的match().replace()这2个方法都要使用正则表达式的模板.当模板内容与字符串不相匹配时, ...

  8. Xcode的代码片段快捷方式-Code Snippet Library(代码片段库)

    最近换了新电脑,装上Xcode敲代码发现很多以前攒的Code Snippet忘记备份了,总结了一下Code Snippet的设置方法,且行且添加,慢慢积累吧. 如下图:   Title - Code ...

  9. 简单实用的HTML代码

    简单实用的HTML代码 一.HTML各种命令的代码: 1.文本标签(命令) <pre></pre> 创建预格式化文本 <h1></h1> 创建最大的标题 ...

  10. 基于jQuery UI的tabs选项卡美化

    很多朋友对JS望而生畏,但听很多朋友说jQuery很简单,因此开始使用jQuery,使用之后发现,只会写简单的功能,复杂的功能还是不太会写或者总是担心自己写的有性能问题,对前端人员来说只能通过不断学习 ...