mysqlbinlog参数设置
故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了。mysql是什么系统
2.Binlog 相关參数及优化策略。
binlog_cache_size
Binlog_cache_disk_use
Binlog_cache_use
max_binlog_cache_size
max_binlog_size
reverse函数c语言sync_binlog
“binlog_cache_size":在事务过程中容纳⼆进制⽇志SQL语句的缓存⼤⼩。
cmd查看端口号命令⼆进制⽇志缓存是server⽀持事务存储引擎⽽且server启⽤了⼆进制⽇志(—log-bin选项)的前提下为每⼀个client分配的内存,注意,是每⼀个Client都能够分配设置⼤⼩的binlogcache空间。假设读者朋友的系统中常常会出现多语句事务的华,能够尝试添加该值的⼤⼩,以获得更有的性能。如何自己开发游戏>打开网址404显示nginx
当然,我们能够通过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都记录进⼊当前⽇志,直到该事务结束。这⼀点和的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时报或其他许多。
版权声明:本⽂博主原创⽂章,博客,未经同意不得转载。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论