Mysql 笔记二

Mysql 笔记二

Table of Contents

  • 1. 前言
  • 2. Master Thread 工作方式
    • 2.1. 主循环(loop)
    • 2.2. 后台循(backgroup loop)
    • 2.3. 刷新循环(flush loop)
    • 2.4. 暂停循环(suspend loop)
  • 3. InnoDB关键特性
    • 3.1. 插入缓冲(Insert Buffer)
    • 3.2. 两次写(Double Write)
    • 3.3. 自适应哈希索引(Adaptive Hash Index),默认开启
    • 3.4. 异步IO(Async IO)
    • 3.5. 刷新邻接页(Flush Neighbor Page)
  • 4. Mysql 启动、关闭、恢复
    • 4.1. innodb _fast _shutdown
    • 4.2. innodb _force Srecovery

1 前言

2 Master Thread 工作方式

Master Thread是最高级别的线程,控制着内存的管理

2.1 主循环(loop)

loop循环是主要的循环,大多操作是在这个循环中完成的,有两大操作:每秒操作和每10秒操作

  • 每一秒操作

    • 日志缓冲刷新到磁盘(总是)
    • 合并插入缓冲(可能)
    • 至多刷新100个InnoDB缓冲池中的脏页(可能)
    • 如果当前没有用户活动,切换到backgroup loop
  • 每十秒操作
    • 刷新100个脏页到磁盘(可能)
    • 合并最多5个插入缓冲(总是)
    • 将日志刷新到磁盘(总是)
    • 删除无用undo页(总是)
    • 刷新100个或者10个脏页到磁盘(总是)

2.2 后台循(backgroup loop)

  • 删除无用的Undo页 (总是 )
  • 合并20个插入缓冲 (总是)
  • 跳到主循环(总是)
  • 不断刷新100个页直到符合条件(可能)

2.3 刷新循环(flush loop)

2.4 暂停循环(suspend loop)

3 InnoDB关键特性

3.1 插入缓冲(Insert Buffer)

  • 运用插入缓冲的两个条件:

    • 索引是辅助索引(Secondary index)
    • 索引不是唯一的(Unique)
  • 聚集索引、非聚集索引
  • 对于非聚集索引的更新中,因为要离散寻找,所以会比较慢。所以Insert Buffer做的操作是:
    • 先判断插入的非聚集引页是否在缓存池中,在,则直接插入
    • 不在,则先放一个Insert Buffer
    • 再以一定频率进行Insert Buffer和辅助引页子节点合并

这通常能将多个插入合并到一个操作中,大大提高了非聚集引插入的性能 用命令可查看:

 mysql> show engine innodb status\G;
 *************************** 1. row ***************************
Type: InnoDB
Name:
Status:
=====================================
141027 21:38:14 INNODB MONITOR OUTPUT
=====================================
Per second averages calculated from the last 8 seconds
-----------------
.....
-------------------------------------
INSERT BUFFER AND ADAPTIVE HASH INDEX
-------------------------------------
Ibuf: size 1, free list len 0, seg size 2, 0 merges
merged operations:
insert 0, delete mark 0, delete 0
discarded operations:
insert 0, delete mark 0, delete 0
Hash table size 276707, node heap has 0 buffer(s)
0.00 hash searches/s, 0.00 non-hash searches/s

3.2 两次写(Double Write)

  • why Double Write 当发生宕机时,有些页是16K的,可能只写了8K,导致了部分失效。重做日志是针对页来说的,如果这个页本来就已经失效了,重做也没意义。所以发生这种情况,我们一个页的副本来还原该页,再重做。这就是Double Write
  • Double Write 架构 double write由两部分组成,一部分是内存中的double write buffer,大小为2M,另一部分是物理磁盘上共享表空间的2个区,同样为2M。对缓冲池的脏页进行刷新时,并不直接写磁盘,而是先将脏页复制到内存中的double write buffer,之后通过doublewrite buffer再分两次,每次1M顺序地定入共享表空间的物理磁盘,再马上同步磁盘。 观察命令:
mysql> show global status like ‘innodb_dblwr%‘\G;
*************************** 1. row ***************************
			 Variable_name: Innodb_dblwr_pages_written
			 Value: 0
*************************** 2. row ***************************
			 Variable_name: Innodb_dblwr_writes
			 Value: 0
			 2 rows in set (0.00 sec)

3.3 自适应哈希索引(Adaptive Hash Index),默认开启

  • what is AHI InnoDB存储引擎会监控对表上各索引页的查询,如果观察到建立哈希索引可以带来速度提升,则建立哈希索引。AHI 是通过缓冲池的B=树页构造,建立速度很快
  • AHI要求
    • 对页的连续访问模式是一样的。访问模式一样指的是查询条件一样
    • 以该模式访问了100次
    • 页通过该模式访问了N次,其中N=页中记录*1/16

3.4 异步IO(Async IO)

没什么好说的,异步的好处不用说

3.5 刷新邻接页(Flush Neighbor Page)

当刷新一个脏页时,检测该页所在的区的所有页,如果是脏页,一起刷。

4 Mysql 启动、关闭、恢复

4.1 innodb _fast _shutdown

在关闭时,参数innodb _fast _shutdown影响行为,参数可取值0、1、2,默认为1

  • 0:表示MYSQL关闭时,要完成所有的full purge的merge insert buffer,刷新所有的脏页。如果对 MySQL升级,这个参数必须调0
  • 1:默认值,不完成full purge和merge insert buffer,在缓冲池中的一些数据脏页还是会刷新回磁盘
  • 2:不完成 full purge ,merge insert buffer,也不刷新缓冲池,而是将日志都写入日志文件,下次启动进行恢复操作(recovery)

4.2 innodb _force Srecovery

影响恢复情况,默认为0

  • 1:忽略检查到的corrupt页
  • 2:阻止Master Thread运行
  • 3:不进行事务的回滚操作
  • 4:不进行插入缓冲的合并操作
  • 5:不查看撤销日志,装未提交的事务视为已提交
  • 6:不进行前滚操作

Date: <2014-10-28 周二>

Author: eqyun

Created: 2014-10-28 周二 13:25

Emacs 24.3.1 (Org mode 8.2.10)

Validate

时间: 2024-10-05 11:11:00

Mysql 笔记二的相关文章

马哥学习笔记二十六——MySQL主从复制

配置MySQL复制基本步骤: 一.master 1.启用二进制日志 log-bin = master-bin log-bin-index = master-bin.index 2.选择一个惟一server-id server-id = {0-2^32} 3.创建具有复制权限的用户 REPLICATION SLAVE REPLICATION CLIENT 二.slave 1.启用中继日志 relay-log = relay-log relay-log-index = 2.选择一个惟一的server

MySQL学习笔记_12_Linux下C++/C连接MySQL数据库(二) --返回数据的SQL

 Linux下C++/C连接MySQL数据库(二) --返回数据的SQL 引: 返回数据的SQL是指通过查询语句从数据库中取出满足条件的数据记录 从MySQL数据库值哦功能检索数据有4个步骤: 1)发出查询 2)检索数据 3)处理数据 4)整理所需要的数据 用mysql_query()发出查询,检索数据可以使用mysql_store_result()或mysql_use_result(),取决与怎样检索数据,接着是调用mysql_fetch_row()来处理数据,最后,还必须调用mysql_

老男孩培训视频听课笔记二(在51cto上听的)

centos 5.8 文本安装过程    引导采用默认,引导不用设置密码    网络配置,根据实际情况配置,网关是网络出口的地址,一般为wlan出口的路由器的地址或者是代理服务器的内网IP    DNS简单解说图:      主机名--时区--root密码    选择自定义系统安装包--最小化(安全方便工作,建议安装以下的组)      ·base-- 基础      ·editors-编辑器      ·development librarays--开发库      ·development

《卓有成效的程序员》----读书笔记二

六大方面对比Launchy和TypeAndRun(TAR) 对于快速启动工具,很多人都有自己的偏好,多次听到朋友介绍Launchy的好,虽然自己一直在使用着TAR,还是克制不住对于好软件的渴求,下载Launchy进行试用.很多软件都是有一个试用期的,也许新的软件确实不错,但是你习惯了以前使用的那个软件.今天就比较客观的将Launchy和TAR进行一下对比,从界面.上手速度到功能.自定义,以及软件的稳定性.占用资源进行详细的比较. [界面美观]Launchy:毫无疑问这是它的强项.1.0正式版自带

Caliburn.Micro学习笔记(二)----Actions

Caliburn.Micro学习笔记(二)----Actions 上一篇已经简单说了一下引导类和简单的控件绑定 我的上一个例子里的button自动匹配到ViewModel事件你一定感觉很好玩吧 今天说一下它的Actions,看一下Caliburn.Micro给我们提供了多强大的支持 我们还是从做例子开始 demo的源码下载在文章的最后 例子1.无参数方法调用 点击button把textBox输入的文本弹出来 如果textbox里没有文本button不可点,看一下效果图 看一下前台代码 <Stac

《逻辑思维简易入门》(第2版) 阅读笔记二

<逻辑思维简易入门>(第2版) 阅读笔记二 本周阅读的是<逻辑思维简易入门>的第三章,也就是说,本书的第一部分就已经读完了. 第三章.信念的优点 信念和负信念是人们在接受一个事物时一种心理态度,延伸来说也就是对事物的认知态度.因为我们在研究 逻辑思维的时候,都有一个前提:“以正常情况以及说话者真诚”,所以有人如果对于一件事物不做回应,我们可以认为这是一种既不相信,也不怀疑的的态度. 信念的优缺点有很多,在书中主要介绍了下面几种: 1.准确性 好的信念实在准确的表达事实,同样真的信念

2. 蛤蟆Python脚本学习笔记二基本命令畅玩

2. 蛤蟆Python脚本学习笔记二基本命令畅玩 本篇名言:"成功源于发现细节,没有细节就没有机遇,留心细节意味着创造机遇.一件司空见惯的小事或许就可能是打开机遇宝库的钥匙!" 下班回家,咱先来看下一些常用的基本命令. 欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/48092873 1.  数字和表达式 看下图1一就能说明很多问题: 加法,整除,浮点除,取模,幂乘方等.是不是很直接也很粗暴. 关于上限,蛤蟆不太清楚

Emacs 笔记二

Emacs 笔记二 Table of Contents 1. 前言 2. emacs基本操作(常用快捷键) 3. emacs模式讲解 4. emacs缓冲区 5. org mode 5.1. 列表 5.2. 快键键 5.3. 内嵌元素(插入代码什么的) 5.4. 表格 1 前言 最近在学着写博客,发现MarkDown真乃神器,于是去找了很多markdown的工具,发现作业部落 最好的那个,而无意间又发现了org-mode火爆到极致 非常被人推崇,其实作业部落 已经是能很完美的满足我的需求了,但是

《Programming in Lua 3》读书笔记(二十二)

日期:2014.8.6 PartⅣ The C API 26 Extending Your Application 使用Lua很重要的一点是用来做配置语言.配合主语言做一些功能的配置. 26.1 The Basics 有的时候程序需要配置一些功能信息,很多时候可能有许多别的方法比用lua做配置要更简单:如使用环境变量或者读取文件,读取文件涉及到文件的解析.如果使用Lua进行配置的话,相当于用lua文件替代了要读取的如csv.txt文件等. 使用Lua进行配置的时候,就需要使用Lua API去控制