默认是开启的,且只是适用于linux平台,需要libaio库。在其他的类unix平台上,innodb使用的是同步I/O。
由于历史的原因,在windows平台上innodb只使用异步I/O。
在同步I/O情况下,查询线程将I/O请求放入队列,innodb后台线程会便利请求队列,每次处理一个请求。并行处理的请求个数受到后台线程的数量控制(参数innodb_read_io_threads)。
native AIO情况下,查询线程直接将I/O请求分发给 *** 作系统,从而避免的后台线程数量对并发数的控制。innodb后台线程只需要等待 *** 作系统对IO请求的处理反馈信息。
native AIO优点是可以扩展,对于I/O高的系统,通过show engine innodb status可以看到很多挂起的读写线程。磁盘控制器影响I/O性能。
native AIO的另一个优点就是可以进行I/O merge *** 作。
native AIO潜在的不足是,对于高I/O系统缺少对I/O写请求分发的控制。有些场景下,太多的I/O写请求分发给 *** 作系统,可能会导致I/O读饥荒,这取决于系统可以同时处理I/O活动的能力。
您好,很高兴为您解答!
mysql是以文件的形式存储的;
mysql的IO是指数据库文件的读写,也就是检索数据和插入数据。
希望我的回答对您有用!
现象是,系统里的java连接mysql超时了,
于是去mysql的机器,查看/var/log/messages日志,查对应的时间点的情况
发现mysql被阻塞了blocked for more than 120 seconds,mysql的io非常之高,用top查看系统的负载也到达了50的样子
用mpstat查看cpu情况
好明显,都在等io
用iostat查看io情况,%util的值,一直在80%,99%之间变化
以为磁盘有问题,用dd测下速看看
从上面的结果看,也还好,没问题
以为可能磁盘有坏道,用下面命令也扫了一遍,没问题
结果也没有坏的块,这个过程,很耗时。
用show processlist命令查看mysql正在忙着什么,一看,也没什么任务在执行的
想看看mysql,研究写哪个文件时,最耗时的
从上面结果来看,xxl_job是最耗时的。知道点眉目了,因为公司的定时任务是用的xxljob,定时任务里,有每几秒执行的任务,我猜它的日志记录一定很大,于是查看一下
我的天,这个表的记录有千万!!!这些记录,没做定时任务来清理,由于都是一些没用的记录,所以这个表的数据我全清了
清了之后,再用iostat查看
%util一下子就降下来了,用iotop查看mysql进程的io也下降了
cpu的iowait也下降了
定义一个事件,让mysql定时清理30天前的日志记录
记录一下,希望对有需要的朋友也起一点提示
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)