InnoDB体系架构总结(一)

缓冲池:
是一块内存区域,通过内存的速度来弥补磁盘速度较慢对数据库性能的影响。在数据库中读取的页数据会存放到缓冲池中,下次再读取相同页的时候,会首先判断该页是否在缓冲池中。对于数据库中页的修改操作,会首先修改在缓冲池中的页,然后再以一定的频率刷新到磁盘上。缓冲池中缓存的数据页有 索引页,数据页,UNDO页等。
show variables like 'innodb_buffer_pool_size'; #查看缓冲池大小
重做日志:
主要是用来实现事务的持久性,当系统由于不确定的原因奔溃之后,InnoDB存储引擎会使用重做日志恢复到掉电前的的状态,来保证数据的完整性。由两部分组成:一是内存中的重做日志缓冲(redo log buffer),是易失的;二是重做日志文件(redo log file),是持久的。InnoDB存储引擎会首先将重做日志信息放到缓冲区,然后以一定频率将其刷新到重做日志文件中。记录了对于InnoDB存储引擎的事务日志。
事务提交时必须先将该事务的所有日志写入重做日志文件进行持久化,待事务的COMMIT操作完才算完成。这里的日志指的就是重做日志。在InnoDB存储引擎中,由redo log 和 undo log.
show variables like 'innodb_log_buffer_size'; #查看重做日志缓冲
二进制日志:
记录了对MySQL数据库执行更改的所有操作,但是不包括SELECT和SHOW这类操作。主要用户数据复制,如主从复制中。
show variables like 'binlog_cache_size'; #二进制日志缓冲文件大小
在支持事务的存储引擎中,所有未提交的二进制日志会被记录到一个缓存中,等到该事务提交时,
会直接将缓冲中的二进制日志写入到二进制日志文件中。这个配置是由变量 binlog_cache_size 决定的。
binlog_cache_size 是基于session的。

InnoDB 事务
redo log 是InnDB保证事务ACID属性的重要机制 主要流程为
1.将数据读入InnoDB buffer pool ,并对相关记录加独占锁 2.将UNDO信息写入undo表空间的回滚段中 3.更改缓存页中的数据,并将更新记录写入redo buffer中 4.提交时,根据innodb_flush_log_at_trx_commit 的设置,将不同的方式将
redo_buffer中的更新记录刷新到InnoDB redo log file中,然后释放独占锁 5.最后 后台IO线程根据需要择机将缓存中更新过的数据刷新到磁盘文件中 #show engine innodb status 命令查看当前日志的写入情况
InnoDB内存优化
innodb_buffer_pool_size #存储表数据和索引数据的最大缓存 在保证操作系统和其它程序有足够内存可用的情况下 innodb_buffer_pool_size的值越大 缓存命中率越高 访问InnoDB表需要的磁盘I/O就越少 性能也就越高
innodb_log_buffer_size #决定InnoDB 重做日志缓存池的大小 对于可能产生大量 更新记录的大事务 可增加其大小 避免在事务提交前 就执行不必要的日志写入磁盘操作
InnoDB应用优化
作用:存储select查询的文本和结果,若下次收到相同查询,会从查询缓存中直接得到结果,而不再需要解析和查询
更新:当表结构和数据更改后,查询缓存值的相关条目被清空
InnoDB体系架构总结(一)的更多相关文章
- InnoDB体系架构(四)Master Thread工作方式
Master Thread工作方式 在前面的文章:InnoDB体系架构——后台线程 说到:InnoDB存储引擎的主要工作都是在一个单独的后台线程Master Thread中完成.这篇具体介绍该线程的具 ...
- InnoDB体系架构(三)Checkpoint技术
Checkpoint技术 前篇 InnoDB体系架构(二)内存 从缓冲池.缓冲池的管理.重做日志缓冲.额外内存缓冲这四个点介绍了InnoDB存储引擎的内存结构,而在将缓冲池的数据刷新到磁盘的过程中使用 ...
- InnoDB体系架构(二)内存
InnoDB体系架构(二)内存 上篇文章 InnoDB体系架构(一)后台线程 介绍了MySQL InnoDB存储引擎后台线程:Master Thread.IO Thread.Purge Thread. ...
- InnoDB体系架构(一)后台线程
InnoDB体系架构——后台线程 上一篇已经了解了MySQL数据库的体系结构 这一篇除了介绍InnoDB存储引擎的体系架构外,同时进一步了解InnoDB的后台线程. InnoDB存储引擎是多线程的模型 ...
- InnoDB体系架构
MySQL支持插件式存储引擎,常用的存储引擎则是MyISAM和InnoDB,通常在OLTP(Online Transaction Processing 在线事务处理)中,我们选择使用InnoDB,所以 ...
- 2.3 InnoDB 体系架构
下图简单显示了InnoDB的存储引擎的体系架构,从图可见,InnoDB储存引擎有多个内存块,可以认为这些内存块组成了一个大的内存池,负责如下工作: 维护所有进程/线程需要访问的多个内部数据结构 缓存磁 ...
- InnoDB体系架构总结(二)
事务 确保事务内的SQL都可以同步执行 要么一起成功 要么一起失败.事务有四个特性原子性 一致性,隔离性,持久性 实现方式 开始事务的时候回家记录记录一个LSN日志序列 当事务执行的时候 会首先在In ...
- MySQL技术内幕 InnoDB存储引擎 之 InnoDB体系架构
后台线程 1.Master Thread 2.IO Thread 3.Purge Thread 4.Page Cleaner Thread 内存 重做日志在以下三种情况下将重做日志缓存中的内容刷新到 ...
- MySQL--InnoDB 体系架构
InnoDB 体系架构 后台线程 Master Thread Master Thread 是一个非常核心的后台线程,主要负责将缓冲池中的数据异步刷新到磁盘,保证数据的一致性,包括脏页的刷新.合并插入缓 ...
随机推荐
- IT兄弟连 JavaWeb教程 Servlet转发
Servlet对象由Servlet容器创建,并且Servlet对象的service()方法也由容器调用,一个Servlet对象可否直接调用另一个Servlet对象的service()方法呢?答案是否定 ...
- C#递归拷贝文件夹下文件以及文件夹
public bool CopyOldLabFilesToNewLab(string sourcePath, string savePath) { if (!Directory.Exists(save ...
- layui开始时间小于结束时间
直接上代码 // var endDate= laydate.render({ // elem: '#end_time',//选择器结束时间 // type: 'datetime', // min:&q ...
- C++十进制到任意进制
#include<stdio.h> #include<string.h> #include<math.h> #include<iostream> #in ...
- Python基础知识(2)
1:if比较运算符.and.or >=:大于或者等于 <=:小于或者等于 ==:等于 !=:不等于 (<>:也是不等于,在Python2中可用.Python3中无法使用) a ...
- the little schemer 笔记(0)
the little schemer 笔记 Z.X.L 2012年08月13日 五项规则 car的规则car只对非空列表有定义. cdr的规则cdr只对非空列表有定义.任何非空列表的cdr是另外一个列 ...
- 跟我一起玩Win32开发(12):使用控件——单选按钮
今天,咱们还是接着玩“控件斗地主”,这是我原创的超级游戏,有益身心健康,玩一朝,十年少. 哦,对,脑细胞极速运动了一下,想起了一个问题,这个破问题虽然网上有很多种解决方案,但是,并没有让所有人都解决问 ...
- Fast Bit Calculations LightOJ - 1032
Fast Bit Calculations LightOJ - 1032 题意:求0到n的所有数的二进制表示中,"11"的总数量.(如果有连续的n(n>2)个1,记(n-1) ...
- Secrets CodeForces - 333A
Secrets CodeForces - 333A 题意:这个世界上只有这样面值的硬币:1,3,9,27,81,...有一个商人,某一天遇到了一个顾客,他购买了价值n的商品,发现用自己的硬币无法付给商 ...
- linux实现多台服务器文件同步
inotify-tools+rsync实时同步文件安装和配置 Linux+Nginx+PHP+MySQL+MemCached+eaccelerator安装优化记录(见 http://www.linux ...