Mysql占用大量写I/O

早上收到zabbix告警,发现某台存放监控数据的数据库主机CPU的IOwait较高,一直持续较长时间。

登录服务器查看磁盘IO发现队列高达90%多,而且经常反复如此

通过iotop查看发现占用io较大的进程是mysql

登录mysql查看show processlist,发现基本上每次io队列较高时都是在insert时,以为是插入语句有问题,于是打开mysql慢查询日志,观察一段时间磁盘io仍然较高,但是发现并没有任何慢查询语句;

查找关于mysql IO问题优化资料,《【转载】sync_binlog和innodb_flush_log_at_trx_commit 浅析》说到 sync_binlog和innodb_flush_log_at_trx_commit 两个参数,这两个参数是控制MySQL 磁盘写入策略以及数据安全性的关键参数

由于这台主机作为监控服务数据库,所以在部署之初没有做太多优化,配置基本保持默认,所以在每次事务提交都对应一次写操作,导致写操作太过频繁。

于是修改sync_binlog和innodb_flush_log_at_trx_commit参数

set global sync_binlog=500;  

set global innodb_flush_log_at_trx_commit=2;

修改完sync_binlog和innodb_flush_log_at_trx_commit两个参数后,观察一段时间发现CPU的IOwait明显降低

时间: 2024-11-03 13:25:27

Mysql占用大量写I/O的相关文章

mysql 占用大量写I/O

zabbix告警,发现某台存放监控数据的数据库主机CPU的IOwait较高,一直持续较长时间. 登录服务器查看磁盘IO发现队列高达90%多,而且经常反复如此 通过iotop查看发现占用io较大的进程是mysql 登录mysql查看show processlist,发现基本上每次io队列较高时都是在insert时,以为是插入语句有问题,于是打开mysql慢查询日志,观察一段时间磁盘io仍然较高,但是发现并没有任何慢查询语句:  查找关于mysql IO问题优化资料,<[转载]sync_binlog

MYSQL存储过程怎么写

MySQL存储过程 DELIMITER $$     DROP PROCEDURE IF EXISTS HelloWorld$$   CREATE PROCEDURE HelloWorld()   BEGIN        SELECT "Hello World!";   END$$   DELIMITER ; 3,变量 DECLARE声明,SET赋值 可以在DECLARE变量时用DEFAULT设置默认值,不设则为NULL DECLARE counter INT DEFAULT 0; 

Mysql占用过高CPU时的优化手段

Mysql占用CPU过高的时候,该从哪些方面下手进行优化?占用CPU过高,可以做如下考虑:1)一般来讲,排除高并发的因素,还是要找到导致你CPU过高的哪几条在执行的SQL,show processlist语句,查找负荷最重的SQL语句,优化该SQL,比如适当建立某字段的索引:2)打开慢查询日志,将那些执行时间过长且占用资源过多的SQL拿来进行explain分析,导致CPU过高,多数是GroupBy.OrderBy排序问题所导致,然后慢慢进行优化改进.比如优化insert语句.优化group by

一个系统存储由memcache+mysql组成,写一条数据的时候,更新memcache有几种方式,

一个系统存储由memcache+mysql组成,写一条数据的时候,更新memcache有几种方式,优缺点是什么? 缓存更新(不仅仅是memceche)有2种策略 一种是写时更新 一种是读时更新 一.写时更新是指  写db成功以后  同时更新缓存 , 能有效减少穿透  但是  容易引起数据的不一致 二.读时更新是说 写完db  删除缓存,等到 需要读得时候  在重建缓存, 一致性可以保证  但是  穿透大,容易给db造成压力

Mysql 读与写函数利用学习

语句简单记忆:         select load_file();         select '一句话' into outfile '网站路径' ; 1.Mysql 读与写函数 (1) 读取函数 load_file() (2) 写入函数 into outfile '' into dumpfile '' 2.Mysql读函数使用 (1)读配置文件语句 select load_file('/etc/httpd/conf/httpd.conf') select load_file('/etc/

关于mysql占用CPU过高,问题解决

使用SHOW PROCESSLIST 查看 原因: 使用了 一个触发器 不断的去删除日志,保证每个用户的日志只有10条 去掉之后,CPU使用率从97% 降到了 17%. 利用show columns from 表名 查看 和 SQL 对比 查出 根本原因 : 删除条件里面 有一个 没有加索引,添加了索引后CPU在6%到40%波动,由于CPU单核,又加了很多触发器,所以去掉了这个 会频繁被触发的触发器. lower_case_table_names=1可以忽略表名大小写 SHOW VARIABLE

mysql占用服务器cpu过高的原因以及解决办法

排查方法 : > mysql -uroot -p      #登陆数据库 >********                    #输入数据库密码 mysql> show processlist; show processlist 命令详解: processlist命令的输出结果显示了有哪些线程在运行,可以帮助识别出有问题的查询语句. +-----+-------------+--------------------+-------+---------+-------+--------

MySQL 基础知识梳理学习(五)----详解MySQL两次写的设计及实现

一 . 两次写提出的背景或要解决的问题 两次写(InnoDB Double Write)是Innodb中很独特的一个功能点.因为Innodb中的日志是逻辑的,所谓逻辑就是比如插入一条记录时,它可能会在某一个页面(这条记录最终被插入的位置)的多个偏移位置写入某个长度的值,例如页头的记录数.槽数.页尾槽数据.页中的记录值等.这些本是一些物理操作,而Innodb为了节省日志量及其它原因,设计为逻辑处理的方式,即在一个页面上插入一条记录时,对应的日志内容包括表空间号.页面号.将被记录的各个列的值等内容,

MySQL占用内存过大的问题解决

MySQL竟然变化这么大了,记忆里还是40MB左右的软件. 现在去官网下载都300多MB了……oracle在干啥呢…… 安装完以后一启动,内存直接告警. 打开任务管理器一看,mysqld.exe竟然占用内存400多MB,我的Eclipse才300多MB…… 好吧,找到了原因,为了数据库本身的较好的性能,在启动的时候预先“霸占”了大量的内存. 根据百度的结果,可以通过修改MySQL的配置文件对它进行优化. ① my.ini文件在哪里? 如果是像我一样windows下默认安装的,可以在C:\Prog