InnoDB存储引擎
InnoDB是事务安全的MySQL存储引擎,设计上采用了类似于oracle数据库的架构.通常来说,InnoDB存储引擎是OLTP应用中核心表的首选存储引擎
InnoDB简介
概述
第一个完整支持ACID事务的MySQL存储引擎,特点是行锁设计,支持MVCC,支持外键,提供一致性非稳定读,同时被设计用来最有效的利用以及使用内存的CPU.
体系架构
维护所有进程/线程需要访问的多个内部数据结构
缓存磁盘上的数据,方便快速地读取,同时在堆磁盘文件的数据修改之前在这里缓存
重做日志缓冲
后台线程主要作用是负责刷新内存池中的数据,保证缓冲池中的内存缓存的是最近的数据.此外将已修改的数据文件刷新到次哦按文件,同时保证在数据库发生异常的情况下InnoDB能恢复到正常运行状态
后台线程
master thread
一个非常核心的后台线程,主要负责将缓冲池中的数据异步刷新到磁盘,保证数据一致性,包括脏页的刷新,合并插入缓冲,UNDD页的回收
IO thread
负责IO请求的回调
purge thread
事务被提交后,其所使用的UNdolog可能不再需要,因你那次需要purge thread来回收已经使用并分配的undo页
内存
缓冲池
一块内存区域,通过内存的速度来弥补磁盘速度较慢对数据库性能的影响.缓冲池的大小直接影响着数据库的整体性能
文件
参数文件
MySQL实例可以不需要参数文件,以文本方式进行存储的,分为动态参数和静态参数
日志文件
记录MySQL数据库的各种类型活动,常见的有:错误日志,二进制日志,慢查询日志,查询日志
错误日志
对MySQL 的启动,运行,关闭过程进行了记录
慢查询日志
可帮助DBA定位可能存在问题的SQL语句,从而进行SQL语句层面的优化,可以设置阈值
查询日志
记录了所有对MySQL数据库请求的信息,无论这些其你去是否得到了正确的执行
二进制日志
记录了对MySQL数据库执行更改的所有操作,但是不包括select和show这类操作
表
索引组织表
根据主键顺序组织存放的,若创建表时没有创建主键,则InnoDB引擎会自动判断并创建主键.
_rowid可以用于查看单个列为主键的情况,对也多列组成的主键无能为力
InnoDB逻辑存储结构
所有数据被逻辑地存放在表空间中,表空间由段,区,页组成
索引与算法
索引是应用程序设计和开发的一个重要方面,但是索引太多,对程序性能可能会受到影响,索引太少,对查询性能又会长生影响,故需要找到一个平衡点,这对程序应能至关重要.
InnoDB存储引擎索引概述
B+数索引:目前关系型数据库中查找最为常用和最为有效的索引,类似于二叉树,根据键值对快速找到数据,B+树不是一个二叉树,该索引你能找到的是被查找数据行所在的页,然后通过页读入到内存你,再在内存中查找,最后得到要查找的数据
全文索引
哈希索引:InnoDB引擎支持的哈希索引是自适应的,它会根据表的使用情况自动为表生成哈希索引
锁
锁是数据库系统区别于文件系统的一个关键特性.锁机制用于管理对共享资源的并发访问.
InnoDB引擎中的锁分为共享锁和排他锁
性能调优
选择合适的CPU
InnoDB引擎一般都应用于OLTP的数据库应用,这种应用特点:永华操作的并发量大;事务处理的时间比较短;查询的语句较为简单,一般都走索引;复杂的查询较少;
OLAP是CPU密集型操作,OLTP是IO密集型操作
内存的重要性
内存的大小是最能直接反映数据库的性能.
硬盘对数据库性能的影响
固态硬盘和传统硬盘
合理设置RAID
基本思想:把多个相对便宜的硬盘组合起来,成为一个磁盘数组,使其性能达到甚至产国一个价格昂贵,容量巨大的硬盘
作用:增强数据集成度;增强容错功能;增加处理量和容量
操作系统的选择
Linux是MySQL数据库服务器中最常用的操作系统.
Windows操作系统在MySQL数据库应用中也非常普及.
选择合适的基准测试工具
sysbench
测试方式:CPU性能;磁盘IO性能;调度程序性能;内存分配及传输速度;POSIX线程性能;数据库OLTP基准测试