mysql学习

ibdata1:共享表空间
innodb_file_per_table指定每张表有自己的表空间
每张表自己的空间:数据,索引,插入缓冲bitmap,其他的数据还存在共享表空间
ibd:表空间


页:Innodb管理数据库的最小磁盘单位
常用的页:
数据页
undo页
系统页
事务数据页
插入缓冲位图页

B+树


数据库:数据库文件 .frm .MYD .MYI .idb
实例:MySql数据库由后台线程和一个共享内存区组成

一般数据库和实例是一一对应的,在集群情况下,一个数据库被多个数据实例使用
数据库实例是单进程,多线程的

连接池组件
管理服务和工具组件
SQL接口组件
...
插件式存储引擎

存储引擎是基于表的,而不是数据库

InnoDB:主要面向在线事务处理(OLTP)的应用,特点是行锁设计,支持外键,支持类似于oracal的一致性非锁定读,既默认读取操作不会产生锁,目前是默认的存储引擎
支持MVCC,同时被设计用来最有效的利用以及使用内存和cpu,高性能,高可用,高扩展性的存储引擎

后台线程|后台线程|后台线程|后台线程|后台线
InnoDB存储引擎内存池
文件|文件|文件|文件|文件|文件|文件|文件

线程类型:
Master Thread(存储引擎的主要工作)
主循环loop
后台循环
刷新循环
暂停循环
IO Thread
Purge Thread
Page Cleaner Thread

内存
1.缓冲池
缓冲池中缓存的数据页类型:索引页,数据页,undo页,插入缓冲,自适应哈希索引,InnoDB存储的锁信息,数据字典信息。索引页,数据页占很大一部分
数据库将从磁盘读取到页存放在缓冲池中,如果下次再次读取到,直接命中
如果修改:先修改缓冲池中的页,然后再以一定的频率刷新到磁盘上

可以有多个缓冲池,每个页根据哈希值平均分配到不同的缓冲池实例中
缓冲池页面大小16k,采用lru算法,优化

2.LRU list, Free List, Flush List
3.重做日志缓冲


Checkpoint技术
当事务提交时,先写重做日志,在修改页,这样发生宕机时可以用日志来恢复,这是ACID中D(持久性)的要求





MyISAM:不支持事务,表锁设计,支持全文索引,缓冲池只缓存索引文件,不缓存数据文件
MYD:存放数据文件
MYI:存放索引文件
NDB
Memory

InnoDB提供了以下约束:
Primary Key
Unique Key(唯一索引)
Foreign Key
Default
Not Null

mysql分区
RANGE分区
LIST分区
HASH分区
KEY分区

innodb几种常见的索引
B+树索引
全文索引
哈希索引

聚集索引:叶子节点上就是整行的数据
辅助索引:叶子节点没有实际的数据,指向聚集索引的数据
数据库B+树的高度2-4层,不管啥索引,底层都是B+树,每个页之间用双向链表


程序中,轻量级:互斥锁,读写锁,没有死锁检测机制

数据库中是事务,锁的是表,页,行,在commit和rollback释放,不同的事务隔离级别,释放的时间不一样,有死锁检测机制
行级锁:共享锁,排他锁

ACID
原子性
一致性
隔离性
持久性

事务的隔离级别:
读未提交
读已提交
。。。

原文地址:https://www.cnblogs.com/zzyoucan/p/12904352.html