Mysql 笔记二


Mysql 笔记二

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

Mysql 笔记二的更多相关文章

  1. MySql笔记(二)

    目录 MySQL笔记(二) 一幅画,一次瞬间的回眸,就在那次画展上,那个眼神,温柔的流转,还是那干净的皮鞋,一尘不染,俊朗的眉宇性感的唇,悄悄走近,牵手一段浪漫 MySQL笔记(二) 13.条件查询 ...

  2. MySql笔记二:命令简介

    从笔记二开始讲解一些简单的命令,这些我在SQL Server里面都讲过了,什么主键,约束啥的数据库这些都是相通的,所以MySql这里,不讲,粗略过一遍. 使用命令框登录MySql mysql -u r ...

  3. MySQL笔记二

    Ø function 函数 函数的作用比较大,一般多用在select查询语句和where条件语句之后.按照函数返回的结果, 可以分为:多行函数和单行函数:所谓的单行函数就是将每条数据进行独立的计算,然 ...

  4. MySQL--高性能MySQL笔记二

    人们通常使用varchar(15):来存储IP地址,然而它们其实是32位无符号整数,不是字符串,所以应该使用无符号整数存储IP地址,MySQL 提供 INET_ATON() 和 INET_NTOA() ...

  5. python3.4学习笔记(二十五) Python 调用mysql redis实例代码

    python3.4学习笔记(二十五) Python 调用mysql redis实例代码 #coding: utf-8 __author__ = 'zdz8207' #python2.7 import ...

  6. MySQL笔记汇总

    [目录] MySQL笔记汇总 一.mysql简介 数据简介 结构化查询语言 二.mysql命令行操作 三.数据库(表)更改 表相关 字段相关 索引相关 表引擎操作 四.数据库类型 数字型 字符串型 日 ...

  7. Django学习笔记二

    Django学习笔记二 模型类,字段,选项,查询,关联,聚合函数,管理器, 一 字段属性和选项 1.1 模型类属性命名限制 1)不能是python的保留关键字. 2)不允许使用连续的下划线,这是由dj ...

  8. python3.4学习笔记(二十四) Python pycharm window安装redis MySQL-python相关方法

    python3.4学习笔记(二十四) Python pycharm window安装redis MySQL-python相关方法window安装redis,下载Redis的压缩包https://git ...

  9. JDBC学习笔记二

    JDBC学习笔记二 4.execute()方法执行SQL语句 execute几乎可以执行任何SQL语句,当execute执行过SQL语句之后会返回一个布尔类型的值,代表是否返回了ResultSet对象 ...

随机推荐

  1. Guava google缓存机制

    易百教程java学习http://www.yiibai.com/v3.php?app=all

  2. shell中if的各种判断

    shell编程中使用到得if语句内判断参数 –b当file存在并且是块文件时返回真 -c当file存在并且是字符文件时返回真 -d当pathname存在并且是一个目录时返回真 -e当pathname指 ...

  3. 计算机基础+python初阶

    今日内容: 1.计算机基础知识 2.python简介 3.快速入门 今日内容: 一.计算机基础 1. 计算机什么组成的 输入输出设备 cpu 硬盘 内存 中央处理器 处理各种数据 相当于人的大脑 内存 ...

  4. Leetcode之回溯法专题-51. N皇后(N-Queens)

    Leetcode之回溯法专题-51. N皇后(N-Queens) n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击. 上图为 8 皇后问题的一种解法. 给 ...

  5. The Best Path(HDU5883)[欧拉路]2016青岛online

    题库链接:http://acm.hdu.edu.cn/showproblem.php?pid=5883 欧拉回路裸题,第一次接触欧拉路的我是真的长见识了^-^ 懂了欧拉路这道题就是没什么问题了,欧拉路 ...

  6. C#开发BIMFACE系列9 服务端API之获取应用支持的文件类型

    系列目录     [已更新最新开发文章,点击查看详细] BIMFACE最核心能力之一是工程文件格式转换.无需安装插件,支持数十种工程文件格式在云端转换,完整保留原始文件信息.开发者将告别原始文件解析烦 ...

  7. KVC&KVO&运行时

    运行时:要先了解程序运行的三个阶段 1.编译阶段:clang将OC代码转换成C++,查看运行机制调用的方法 2.链接阶段:与我们使用到得库文件进行链接 3.运行阶段:我们要谈的运行时主要针对这个阶段, ...

  8. 洛谷P1661 & yzoj 1650 扩散 题解

    题意 先讲一下一种容易陷入误区错误思路 要使时间最小,就去找相对于每个点的最短曼哈顿距离,然后取最大值,时间就是(maxn+1)/2. 代码 #include<cstring> #incl ...

  9. WebStorm调节控制台字体

    File --> Settings --> Editor --> Colors & Fonts --> Console Font

  10. 调度系统Airflow的第一个DAG

    Airflow的第一个DAG 考虑了很久,要不要记录airflow相关的东西, 应该怎么记录. 官方文档已经有比较详细的介绍了,还有各种博客,我需要有一份自己的笔记吗? 答案就从本文开始了. 本文将从 ...