mysql 原理 ~ 线程与IO
一 简介:今天来聊聊具体的线程和IO
二 具体线程与作用
1 master thread mysql的主要工作触发线程
1 redo and binlog日志
2 合并插入缓冲。
3 脏页的刷新
4 undo页回收
5 产生一个ckp点
2 IO THREAD
insert buffer thread->insert buffer merges插入缓冲线程 1个
log thread -> asynchronous log flushes 日志线程 1个
read thread -> read-ahead负责数据块的读取) 读线程 4个
write thread -> flushing of dirty buffers(负责数据库的写入) 写线程 4个
3 innodb_purge_threads
1 脏页清理线程 2 undo段的回收 3 对delete标记数据进行清除
三 涉及到的主要IO
线程部分
IO THREAD部分
目标部分
事务
1 dirty pages 2 log cache 3 insert buffer
查询
1 normal pages
参数部分
dirty page
write_io_thread 写线程 (多核cpu能更好利用)
innodb_io_capacity 一次刷新脏页的数量
innodb_adaptive_flushing 是否临脏页刷新
redo cache
innodb_flush_log_at_trx_commit 刷新到磁盘的redo event事务数量
binlog cache
sync_log 刷新到磁盘的binlog event事务数量
通用
read_io_thread 读线程 (多核cpu能更好利用)
innodb_flush_method
四 名词解析
1 IO操作三要素 read / write/ sync
2 同步IO 在同步文件IO中,线程启动一个IO操作然后就立即进入等待状态,直到IO操作完成后才醒来继续执行 例如redo的刷新,负责线程 master thread
异步IO 异步文件IO方式中,线程发送一个IO请求到内核,然后继续处理其他的事情,内核完成IO请求后,将会通知线程IO操作完成了。 如果IO请求需要大量时间执行的话,异步文件IO方式可以显著提高效率 (缩写 aio) 例如脏页的刷新,负责线程 io thread
请记住
1 master thread和 io thread是独立的,并非相互干涉
2 mysql利用AIO的方式大大提高了处理效率
五 flush_method 补充
1 O_DIRECT 数据文件的写入操作是直接从mysql innodb buffer到磁盘的,并不用通过操作系统的缓冲,而真正的完成也是在flush这步,日志还是要经过OS缓冲
2 fdatasync模式:写数据时,write这一步并不需要真正写到磁盘才算完成(可能写入到操作系统buffer中就会返回完成),真正完成是flush操作,buffer交给操作系统去flush,并且文件的元数据信息也都需要更新到磁盘。。
mysql 原理 ~ 线程与IO的更多相关文章
- Replication基础(六) 复制中的三个线程(IO/SQL/Dump)
Reference: https://blog.csdn.net/sun_ashe/article/details/82181811?utm_source=blogxgwz1 简介在MySQL复制技 ...
- MySQL Replication 线程(理解详细过程)
Replication 线程 Mysql 的Replication 是一个异步的复制过程,从一个Mysql instace(我们称之为Master)复制到另一个Mysql instance(我们称之S ...
- MySQL Error Log 中IO写入瓶颈的警告分析
周末在一台MySQL实例上频繁做大批量的写入测试,无意中发现MySQL的errorlog中频繁出现如下的Note:page_cleaner: 1000ms intended loop took *** ...
- MySQL服务器线程数的查看方法详解
本文实例讲述了MySQL服务器线程数的查看方法.分享给大家供大家参考,具体如下: mysql重启命令: ? 1 /etc/init.d/mysql restart MySQL服务器的线程数需要在一个合 ...
- 查看MySQL的线程
通过两张表查看MySQL的线程:information_schema.processlist 和 performance_schema.threads processlist是information_ ...
- Linux ulimit和动态修改MySQL最大线程数限制
ulimit是限制进程对资源的使用但软件资源限制变化不大,特别是process/file,分别对应nproc和nofilenproc可用 ulimit -u 查询:nofile可用 ulimit -n ...
- mysql后台线程详解
1.mysql后台线程 mysql后台线程主要用于维持服务器的正常运行和完成用户提交的任务,主要包括:master thread,read thread,write thread,redo log t ...
- mysql主从架构,IO、SQL线程运行为YES,从库没有同步数据
mysql基于binlog主从复制架构,IO.SQL线程运行为YES,从库没有同步数据 Slave_IO_Running: Yes Slave_SQL_Running: Yes Replicate_D ...
- 备忘录--关于线程和IO知识
因为自己还在出差中,没时间深入学习,最近工作里又有对一些技术的思考,所以这里记录下来,等回去有时间可以按照这个思路进行学习,这里主要起到备忘的作用. 1.线程难学难在我们没有理解操作系统里的线程设计机 ...
随机推荐
- PHP中的数据结构:DS扩展
PHP7以上才能安装和使用该数据结构扩展,安装比较简单: 1. 运行命令 pecl install ds 2. 在php.ini中添加 extension=ds.so 3. 重启PHP或重载配置 在这 ...
- (set)MG loves gold hdu6019
MG loves gold Time Limit: 3000/1500 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others) ...
- cookie猜数字游戏(上)---------------思路分析(踩坑)
说明:用户第一次请求页面的时候,同时会产生一个随机数,用户点提交表单的时候,会将输入的数字与第一次请求产生的数字进行一个对比. 问题一:如何保存用户每次提交的数据 我们常见的在服务器中保存数据的方式是 ...
- PHP三元运算符
:条件 ? 结果1 : 结果2 <?php$a=10; $b=20;$c=$a>$b?($a-$b):($a+$b);//说明:如果变量a大于变量b则执行问号后面的,否则就执行:冒 ...
- javaMail简介(一)
一:开发javaMail用到的协议 SMTP(simple Message Transfer Protocal):简单消息传输协议.发送邮件时使用的协议,描述了数据该如何表示,默认端口为:25 POP ...
- jupyter notebook的安装与使用
一.jupyter notebool介绍 Jupyter Notebook是Ipython的升级版,而Ipython可以说是一个加强版的交互式 Shell,也就是说,它比在terminal里运行pyt ...
- python 基础技巧
多个字典合并 >>> d1 = {'name' : 'revotu', 'age' : 99} >>> d2 = {'age' : 24, 'sex' : 'mal ...
- ffmpeg的各种黑科技
获取音频的时长 /** * 获取视频文件的时长 * @param ffmpegPath 是ffmpeg软件存放的目录,sourceFile是目标文件 * @return */ public Strin ...
- ruby----%使用法
%{String} 用于创建一个使用双引号括起来的字符串,这个表示法与%Q{String}完全一样 result = %{hello} puts "result is: #{result} ...
- CSS常用选择器的认识
---恢复内容开始--- 前言:在CSS中选择器的种类有很多很多,但是在实际的工作中,我们经常会用到的分为两大类:基础选择器和复合选择器这两个大类,学习选择器的目的就是为了在复杂的页面中能够快速定位到 ...