mysql僵⼫链接_mysql的学习
1、主从复制、读写分离
2、MYSQL+keepalive
3、分库分表
4、mysql⼀个库能承载(1000万~2000万)条记录
⾏锁:
读锁:共享锁
写锁:排它锁
select 不加锁(会忽略任意锁,不会阻塞)
锁冲突会阻塞的
update、delete、insert会默认加写锁
mysql的页⼤⼩16kb
缓冲池默认页的⼤⼩是16kb
mvcc机制
间隙锁与健隙锁
隐藏列:row_id,事务id,回滚指针
⾃增主键有什么好处:b+树的迁移和分裂,空间变⼤,导致页变多了就是导致树的⾼度增加,每页存的指针书变少B+树⾼度1~3
B+树的⾸页可以缓冲在内存⾥⾯,所以只需要最多进⾏2次IO操作
联合索引是怎么实现的:
utf8
utf8mb4
order  by,group by和索引的关系
当提交事务时,先写重做⽇志,再修改页。
1、缓冲池:LRU list、FREE list、FLUSH list
2、重做⽇志缓冲(Checkpoint)
3、两次写操作(主要是解决磁盘⽂件被破坏以后的解决办法)mysql怎么读英语
MyISAM:
b.frm :描述表结构⽂件,字段长度等
b.MYD(MYData):数据信息⽂件,存储数据信息(如果采⽤独⽴表存储模式)
b.MYI(MYIndex):索引信息⽂件。
innodb:
b.frm :描述表结构⽂件,字段长度等
如果采⽤独⽴表存储模式,data\a中还会产⽣b.ibd⽂件(存储数据信息和索引信息)
如果采⽤共存储模式的,数据信息和索引信息都存储在ibdata1中
MYSQL读取数据,⼀次从磁盘读取⼀页到内存
MYSQL写回数据,⼀次把内存中的⼀页数据刷新到磁盘(checkpoint机制)
缓冲池的管理:
LRU页、Free页、unzip_LRU页、Flush页
重做⽇志缓冲(每1s向重做⽇志⽂件刷新⼀次)
1、每1s
2、事务提交时
3、重做⽇志缓冲空间⼩于2/1时
额外的内存池:
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
checkpoint刷新脏页到磁盘的机制
sharp checkpoint刷新全部脏页
fuzzy checkpoint刷新⼀部分脏页
缓冲池中缓冲的数据页类型有:数据页、索引页、undo页、插⼊缓冲、⾃适应hash索引、innodb存储的锁信息、数据字典信息
数据页、索引页、undo页会受到LRU列表的管理,其他的也是不受LRU算法的管理的
缓冲的页列表:LRU页列表、unzip_LRU页列表、Free页列表
LRU页列表的页被修改后,称之为脏页
matlab如何输入列矩阵Flush列表中的页被称之为脏页
内存包括缓冲池、重做⽇志缓冲、额外的内存池
重做⽇志缓冲(向重做⽇志⽂件刷新策略)
1、每1s
2、事务提交时
3、重做⽇志缓冲空间⼩于2/1时
事务提交时,先做重写⽇志,再修改页。
重做⽇志出现不可⽤的情况是因为当前数据库对重做⽇志的设计都是循环使⽤的。
innodb是通过LSN号来标记版本的(页有LSN号、重做⽇志有LSN号、checkpoint有LSN号)
innodb插⼊缓冲关键特性:插⼊缓冲(辅助索引插⼊且索引不是唯⼀的)、两次写、⾃适应hash索引、异步IO、刷新邻接页
⾃增主键的好处:聚簇索引是按主键进⾏排序的
聚簇索引是按主键进⾏排序的,其他索引不是按照主键进⾏排序的,因此插⼊索引的时候是离散的
Change buffer是对insert buffer的升级版(对象⾮唯⼀的辅助索引)(数据结构就是⼀颗B+树)
double write(两次写增加可靠性);重做⽇志是在物理页没有损坏的情况下,如果物理页发⽣了锁坏,则需要通过double write进⾏恢复double write+重做⽇志(才可以彻底解决可靠性问题)
binlog会记录所有存储引擎下的⽇志,binlog记录的是逻辑⽇志,只在事务提交之前写⼊
redolog只记录innodb下的⽇志,⽽redolog记录的是物理页的修改情况,每1s就写⼊⼀次
在innodb中,表是根据主键顺序组织存放的
表空间是由段、区、页组成的
段包括数据段、索引段、回滚段
区是由连续页空间组成的,每个区的⼤⼩是1MB,⼀个区有64个页
页内部是通过链表来串联⾏记录的
B+数索引只能到记录所在的页,然后会把整个页加载到内存,从页中再具体的记录
页内的数据结构(page directory⼆分查+recorder header链表查)
每页的Page  Directory中的槽是按照主键的顺序存放的,(那么就可以进⾏⼆分法查了)
数据库的B+树的特点是⾼扇出性
联合索引在什么情况下可以⽤到:(1)只有where语句;(2)where+order by;(3)where+group  by;(4)聚合操作也会⾛索引,因为这样⼦减少了IO访问磁盘的次数(覆盖索引)
在SQL查询中也可以强制使⽤某⼀个索引(1)FORCE INDEX(索引);(2)USE INDEX(索引)
意向锁以为者事务希望在更细粒度上进⾏加锁。
MVCC机制是通过undo⽇志来实现的。(快照机制)
MYSQL对⾏的查询采⽤的是Next-Key锁,但是如果查询的索引含有唯⼀属性时,就会退化为Record-Lock
1、快照读(通过MVCC解决幻读)
2、当前读(通过next-key解决幻读)
在可重复读事务隔离级别下⾯:采⽤next-key来加锁
在提交读事务隔离级别下⾯:采⽤record-lock加锁shell脚本函数
redo  log⽤来保证事务的持久性和原⼦性
undo log⽤来保证⾷物的⼀致性(实现事务回滚以及MVCC的功能)
redo  log是物理⽇志,回复速度要⽐(bin  log,undo log这种逻辑⽇志快得多)
undo log也会产⽣redo log
MYSQL的两阶段提交(先写redolog再写binlog)
MYSQL的乐观锁与悲观索的实现:(以现⾦扣减为例⼦来说明)
tfat什么意思
悲观锁的实现:
1、开启事务
2、select  cash    from    table  where  id =#{id}  for  update;
3、update  table  set cash=cash-#{cash}  where id=#{id}  and  cash>=#{cash};
4、关闭事务
乐观锁的实现(增加⼀个字段版本或者时间戳):linux离线安装mysql8
1、select  cash,version    from    table  where  id =#{id};
phenomenal
2、update  table  set cash=cash-#{cash},version = version +1  where id=#{id}  and  cash>=#{cash}  and  version = # {version};
MYSQL集的搭建:
1、在主库和备库分别创建账户并赋予⼀定的权限
2、主库上配置唯⼀的(server_id,bin_log
3、备库上配置(server_id,bin_log,relay_log,log_slave_updates,read_only)
4、CREATE MASTER  TO和START SLAVE
MYSQL的优化
1、索引下推
逻辑读与物理读的区别和怎么知道执⾏逻辑读和物理读的时间:
1、物理读的单位(16k的物理页)
2、逻辑读的单位(数据库的每⼀⾏)

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。