MySQL占用磁盘I/O问题排查

前言:最近查一个磁盘I/O高的问题,涉及到了innodb_flush_log_at_trx_commit 和 sync_binlog 是 MySQL 的两个配置参数,前者是 InnoDB 引擎特有的。之所以把这两个参数放在一起讨论,是因为在实际应用中,它们的配置对于 MySQL 的性能有很大影响。 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。有些应用,如支付服务,对一致性和完整性要求很高,所以即使最慢,也最好设置为 1. 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. 查看配置参数 使用iostat -dxm 1命令和iotop命令查看磁盘的占用情况,配置修改后: mysql> show variables like '%sync_bin%'; +---------------+-------+...
阅读全文
其它

Markdown语法命令大全(持续整理中……)

0x00 外链教程 点击查看教程 0x01 思维导图画法 0x02 流程图画法 代码: graph TB id((开始)) id-->id4(带文本的圆角矩形) id4 --> id3>带文本的不对称的矩形> id3 --> id1{带文本的菱形} id1 --> id2((结束)) 效果如下: 节点之间的连接 A --> B A带箭头指向B A --- B A不带箭头指向B A -.- B A用虚线指向B A -.-> B A用带箭头的虚线指向B A ==> B A用加粗的箭头指向B A -- 描述 --- B A不带箭头指向B并在中间加上文字描述 A -- 描述 --> B A带箭头指向B并在中间加上文字描述 A -. 描述 .-> B A用带箭头的虚线指向B并在中间加上文字描述 A == 描述 ==> B A用加粗的箭头指向B并在中间加上文字描述 示例 mermaid graph LR A --> B A1 --- B1 A4 -.- B4 A5 -.-> B5 A7 ==> B7 A2 -- 描述 --- B2 A3 -- 描述 --> B3 A6 -. 描述 .->...
阅读全文

Mysql 参数优化

一、Mysql 源码编译参数 shell > yum -y install gcc gcc-c++ make cmake ncurses-devel zlib-devel bison shell > cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ -DMYSQL_DATADIR=/usr/local/mysql/data \ -DTMPDIR=/usr/local/mysql/data \ -DMYSQL_UNIX_ADDR=/usr/local/mysql/data/mysql.sock \ -DSYSCONFDIR=/etc/my.cnf \ -DWITH_MYISAM_STORAGE_ENGINE=1 \ -DWITH_INNOBASE_STORAGE_ENGINE=1 \ -DWITH_FEDERATED_STORAGE_ENGINE=1 \ -DDEFAULT_CHARSET=utf8 \ -DEXTRA_CHARSETS=all \ -DDEFAULT_COLLATION=utf8_general_ci ## -DCMAKE_INSTALL_PREFIX=/usr/local/mysql 指定 Mysql 安装路径 ## -DMYSQL_DATADIR=/usr/local/mysql/data 指定 Mysql 数据目录 ## -DTMPDIR=/usr/local/mysql/data 指定 Mysql 临时目录 ## -DMYSQL_UNIX_ADDR 指定 Mysql socket ## -DSYSCONFDIR=/etc/my.cnf 指定 Mysql 配置文件 ## -DWITH_MYISAM_STORAGE_ENGINE=1 安装 MyISAM 存储引擎 ## -DWITH_INNOBASE_STORAGE_ENGINE=1 安装 Innodb 存储引擎 ## -DWITH_FEDERATED_STORAGE_ENGINE=1 安装 Federated 存储引擎 ## -DDEFAULT_CHARSET=utf8 指定默认字符集为 utf8 ## -DEXTRA_CHARSETS=all 安装扩展字符集 ## -DDEFAULT_COLLATION=utf8_general_ci 默认排序规则 utf8_general_ci Cmake 参数:http://dev.mysql.com/doc/refman/5.6/en/source-configuration-options.html --------------------------------------------------------------------------------------------- 二、my.cnf 配置文件 ## global_buffers 在内存中缓存从数据文件中检索出来的数据块,可以大大提高查询和更新数据的性能 ## 计算公式:Innodb_buffer_pool_size +...
阅读全文
Linux

Linux中搭建时间服务

0x01 环境说明 Linux服务器地址:192.168.3.88 Windows客户机:192.168.3.10 0x02安装软件 话不多说,上命令: yum install ntp ntpdate -y 0x03 修改配置 话不多说,如图(增加部分用红圈圈起来): 0x034重启测试 /etc/init.d/ntpd restart Linux客户端中用如下命令测试: ntpdate -u 192.168.3.88 Windows中用如下方法测试: 收工!
阅读全文

提出一个问题往往比解决一个问题更重要

导读:“想象力能带领我们超越以往范围的把握和视野。” 爱因斯坦的成功,首先应归功于他的正确的思考和创造力。 有一次大发明家爱迪生满腹怨气地对爱因斯坦说:“每天上我这儿来的年轻人真不少,可没有一个我看得上的。” “您断定应征者合格或不合格的标准是什么?”爱因斯坦问道。 爱迪生一面把一张写满各种问题的纸条递给爱因斯坦,一面说:“谁能回答出这些问题,他才有资格当我的助手。” “从纽约到芝加哥有多少英里?”爱因斯坦读了一个问题,并且回答说:“这需要查一下铁路指南。”“不锈钢是用什么做成的?”爱因斯坦读完第二个问题又回答说:“这得翻一翻金相学手册。” “您说什么,博士?”爱迪生打断了爱因斯坦的话问道。 “看来我不用等您拒绝,”爱因斯坦幽默地说,“就自我宣布落选啦!” 爱因斯坦从自己的切身体验出发,强调不能死记住一大堆东西,而是要能灵活地进行思考。 爱因斯坦认为,正确地进行思考,是追求机会至关重要的条件。 小时候的爱因斯坦一点也看不出来有什么天才,到3岁的时候,还不会讲话。6岁上学,在学校里成绩非常差,一上课就是被批评的对象,老师还说他永远也不会有什么大的出息。大家一致认为他是一个天生的笨蛋。 但,爱因斯坦在12岁的时候,就已经决定献身于解决“那广漠无垠的宇宙”之谜。15岁那一年,由于历史、地理和语言等都没有考及格,也因为他的无礼态度破坏了秩序和纪律,他被学校开除。 爱因斯坦非常重视思考和想像。他说:“想像力比知识更重要。因为知识是有限的,而想像力包括世界上的一切,推动着进步,并且是知识进化的源泉”。他在16岁时,他喜欢做着白日梦,幻想着自己正骑在一束光上,做着太空旅行,然后思考:如果这时在出发地有一座钟,从我坐的位置看,它的时间会怎样流逝呢? 从此,他开始了他的科学远征。他设计了大量理想实验,提出了“光量子”等模型,为相对论和量子论的建立奠定了基础。 灵活地进行思考对一个人的成功是非常必要的。抱持“提出一个问题往往比解决一个问题更重要”的思想,才能不断地提出问题,并在解决这些问题的同时逐渐迈向一个个人生的高峰。
阅读全文