MySQL技术内幕-InnoDB存储引擎-读书笔记(一)

MySQL技术内幕-InnoDB存储引擎-读书笔记(一)

作为php开发,使用mysql总是少不了的

博客链接 http://itsong.net/articles/466.html

第一章 MySQL体系结构和存储引擎

  • MySQL被设计为一个单进程多线程架构的数据库
  • ./mysql --help | grep my.cnf 可以查看mysql数据库实例启动时,它会在哪些位置查找配置文件。
  • 配置文件中有一个datadir参数,指定了数据库所在的路径。默认为/usr/local/mysql/data
  • 体系结构,mysql由以下几部分组成:连接池组件,管理服务和工具组件,sql接口组件,查询分析器组件,优化器组件,缓冲cache组件,插件式存储引擎,物理文件。
  • InnoDB存储引擎,支持事务,行锁,支持外键,默认读操作不产生锁
  • MyISAM存储引擎,不支持事务,表锁,全文索引
  • unix域套接字访问mysql,-S /tmp/mysql.sock

第二章 InnoDB存储引擎

  • 后台线程有7个,4个IO,1个master thread,一个锁监控线程,1个错误监控线程。master thread几乎实现了所有功能。
  • 4个IO线程为,insert buffer thread,log thread,read thread,write thread。
  • 引擎内存分为:缓冲池buffer pool(最大),重做日志缓冲池redo log buffer,以及额外的内存池additional memory pool。
  • 按页(每页16K)读到缓冲池,LRU算法保留缓存数据。先改缓冲池中的页-脏页,再按一定频率将脏页刷新flush到文件show engine innodb status可以看缓冲池具体使用情况。
  • 缓冲池缓存的数据页类型有:索引页,数据页,undo页,插入缓冲,自适应哈希索引,innodb存储的锁信息,数据字典信息等。索引页和数据页最大。
  • 日志缓冲将重做日志信息先放入这个缓冲区,按一定频率刷新到重做日志文件。
  • master thread线程优先级最高,分为几个循环:主循环,后台循环,刷新循环,暂停循环。
  • 主循环,每秒一次的操作包括日志缓冲刷到磁盘,即使事务没提交(所以大事务也很快),合并插入缓冲(可能),至多刷新100个innodb缓冲池中的脏页到磁盘(可能),如果没有用户活动,切换到后台循环(可能)。
  • 合并插入缓冲并不是每秒都发生,判断当前一秒内io次数是否小于5次,io压力小则执行合并插入缓冲。
  • 缓冲池中脏页比例大于90%,做磁盘同步操作,将100个脏页写入磁盘
  • 主循环,每10秒的操作,刷新100个脏页到磁盘(可能),合并至多5个插入缓冲(总是),将日志缓冲刷新到磁盘(总是),删除无用的undo页(总是),刷新100个或者10个脏页到磁盘(总是),产生一个检查点(总是)。
  • 判断过去10秒磁盘io是否小于200次,ok则刷100个脏页到磁盘。
  • 看脏页比例,超过70%,刷新100个脏页,如果小于70%,刷新10个脏页。
  • 后台循环,删除无用的undo页(总是),合并20个插入缓冲(总是),跳回到主循环(总是),不断刷新100个页,直到符合条件。
  • 调整innodb_max_dirty_pages_pct可以加快刷新脏页的频率,保证磁盘io的负载,比如75-80
  • 关键特性:插入缓冲,两次写double write,自适应哈希索引adaptive hash index。
  • 插入缓冲的使用需要满足两个条件:索引是辅助索引,索引不是唯一的。
时间: 2024-10-21 13:23:52

MySQL技术内幕-InnoDB存储引擎-读书笔记(一)的相关文章

MySQL技术内幕-InnoDB存储引擎-读书笔记(二)

MySQL技术内幕-InnoDB存储引擎-读书笔记(二) 作为php开发,使用mysql总是少不了的 系列文章博客链接 http://itsong.net/articles/466.html 第三章 文件 mysql与innodb几个类型的文件 参数文件,配置路径.初始化参数.内存大小等 日志文件,包括错误日志,二进制日志,慢查询日志,查询日志 socket文件,用unix域套接字,unix domain socket来进行连接时需要的文件,这一般是本机连接,比通常tcp快 pid文件,进程id

mysql技术内幕InnoDB存储引擎-阅读笔记

mysql技术内幕InnoDB存储引擎这本书断断续续看了近10天左右,应该说作者有比较丰富的开发水平,在源码级别上分析的比较透彻.如果结合高可用mysql和高性能mysql来看或许效果会更好,可惜书太厚,还在啃当中,希望能早点读完……. 应该说与oracle相比,mysql数据库还是相对比简单,以后还是深入学习下oracle去. 搞数据库也比搞应用运维相对单纯,不用知道各种应用架构,不用写各种脚本工具,只要掌握这个软件就足够了.当然希望自己的知识还是全面一些好.

《mysql技术内幕 InnoDB存储引擎(第二版)》阅读笔记

一.mysql架构 mysql是一个单进程多线程架构的数据库. 二.存储引擎 InnoDB: 支持事务 行锁 读操作无锁 4种隔离级别,默认为repeatable 自适应hash索引 每张表的存储都是按主键的顺序记性存放 支持全文索引(InnoDB1.2.x - mysql5.6) 支持MVCC(多版本并发控制)实现高并发 MyISAM: 不支持事务 表锁 支持全文索引 三.InnoDB体系架构 1.后台线程 Master Thread 负责将缓冲池中的数据异步刷新到磁盘,保证数据的一致性 IO

《MySQL技术内幕InnoDB存储引擎》读书笔记 第一章

Mysql体系结构和存储引擎 1.1 定义数据库和实例 数据库:物理操作系统文件或其他形式文件类型的集合.    数据库文件可以使frm,MYD,MYI,ibd结尾的文件. 实例:MySQL数据库由后台线程以及一个共享内存区组成.    数据库实例才是真正用于操作数据库文件的. 实例与数据库的关系通常是一一对应的,在集群情况下可能存在一个数据库被多个数据实例使用的情况. MySQL被设计为一个单进程多线程架构的数据库,这点与SQL Server比较类似,但与Oracle多进程的架构有所不同(Or

《MySQL技术内幕 InnoDB存储引擎 》学习笔记

第1章  MySQL体系结构和存储引擎 1.3 MySQL存储引擎 数据库和文件系统最大的区别在于:数据库是支持事务的 InnoDB存储引擎: MySQL5.5.8之后默认的存储引擎,主要面向OLTP(联机事务处理,面向基本的.日常的事务处理) 支持事务,支持外键.支持行锁(有的情况下也会锁住整个表).非锁定读(默认读取操作不会产生锁) 通过使用MVCC来获取高并发性,并且实现sql标准的4种隔离级别,默认为可重复读级别 使用一种被称成next-key locking的策略来避免幻读(phant

Mysql技术内幕——InnoDB存储引擎

一.mysql体系结构和存储引擎 1.1.数据库和实例的区别 数据库:物理操作系统或其他形式文件类型的集合.在mysql下数据库文件可以是frm,myd,myi,ibd结尾的文件. 数据库实例:由数据库后台进程/线程以及一个共享内存区组成.数据库实例才是真正用来操作数据库文件的. mysql数据库是单进程多线程的程序,与sql server比较类似.也就是说,Mysql数据库实例在系统上的表现就是一个进程. 1.2.mysql的体系结构 mysql由连接池组件.管理服务和工具组件.sql接口组建

MySQL技术内幕 InnoDB存储引擎 之 InnoDB体系架构

后台线程 1.Master Thread 2.IO Thread 3.Purge Thread 4.Page Cleaner Thread  内存 重做日志在以下三种情况下将重做日志缓存中的内容刷新到外部磁盘的重做日志文件: Master Thread 每一秒将重做日志缓存刷新到重做日志文件: 每个事务提交时会将重做日志缓存刷新到重做日志文件: 当重做日志缓冲池剩余空间小于1/2时,重做日志缓冲刷新到重做日志文件: 原文地址:https://www.cnblogs.com/elontian/p/

InnoDb 体系架构和特性 (Innodb存储引擎读书笔记)

后台线程 Master Thread 核心后台线程,主要负责将缓冲池的数据异步刷新到磁盘.例如脏页的刷新,插入缓冲的合并,undo 页的回收等. 每秒一次的操作: 日志缓冲刷新到磁盘,即使该事务还没有提交.该操作总是会发生,这个就是为了再大的事务,提交时间都很短. 当IO压力很小时(1s内发生的IO次数小于5% innodb_io_capacity)合并5% innodb_io_capacity 的插入缓冲. 当脏页比例大于 innodb_max_dirty_pages_cnt, 刷新 inno

《MySQL技术内幕——SQL编程》读书笔记(二)——数据类型

对数据类型的选择将影响与数据库交互的应用程序的性能. 1.通常来说,如果一个页内可以存放尽可能多的行,那么数据库的性能就越好,因此选择一个正确的数据类型至关重要. 2.另一方面,如果在数据库中创建表时选择了错误的数据类型,那么后期的维护成本可能非常大,用户需要花大量时间进行ALTER TABLE 操作. 1. 数据类型 1. UNSIGNED 将数字类型无符号化. 例如: INT 的类型范围是 -2147483648 ~ 2147483647 INT UNSIGNED 的 类型范围是 0 ~ 4