老男孩-标杆班级-MySQL-lesson05-存储引擎 (主要是 事务和 锁)

https://www.jianshu.com/p/4a344bb75d36(简书连接地址)

1.标准事务控制语句

begin / start transaction;  开启事务
commit; 提交事务
rollback;   回滚事务

2. 自动提交功能

在autocommit=1 的时候, 没有begin(没有显示的开启事务)
在你执行dml语句时, 会自动在这个DML之前加一个beginbegin; --> 自动
delete ...
commit; ---> 自动

begin;  ---> 自动
update 。。。。。
commit; ---> 自动

应用场景:
autocommit, 一般使用于飞交易类业务场景

方案1:
 autocommit =0; commit, 手工提交才生效
方案2:
  autocommit=1;
  每次想要发生事务型操作。
  begin 和 commit 都是红狗操作

设置方法:
(1)临时生效:
mysql>  set global autocommit=0;
重新开启会话生效
(2)永久生效
vim /etc/my.cnf
autocommit=0
重启数据库生效

3.隐式事务控制语句

4. 隐式回滚

会话关闭
数据库宕机
事务执行语句失败

5. InnoDB 事务的ACID如何保证

redo log 重做日志
数据页存储位置: 
       ibd: 
       buffer pool
  LSN:   日志序列号
  WAL
  脏读
  CKPT
  TXID
  UNDO: ibdatal ,存储了事务工作过程中的回滚信息

7. 隔离级别和锁机制

作用: 主要是提供I 的特性, 另外对于C的特性也要保证
  a. transaction_isolation 事务隔离性介绍
     RU: 读未提交
     RC: 读已提交
     RR: 可重复复读
     SR: 可串行化
读是什么意思:
   这里的读不代表select, 而指得是存储引擎的读,是page的读取
   b. 隔离级别说明
   RU: 读未提交(READ-UNCOMMITED)
     出现的问题: 脏页读,不可重复读, 幻读 
   RC: 读已提交 (READ-COMMITED)
     出现的问题: 不可重复读, 幻读
   RR:可重复读 (REPEATABLE READ)
   出现的问题: 有可能出现幻读,通过一些手段100% 防止
   SR: 可串行化 (SERIALIZABLE)
   串行化事务, 以上问题都能规避,但是不利于事务的并发
  c.参数修改
  mysql> select @@transaction_isolation;
  临时调整;
  mysql> set global transaction_isolation = 'read-uncommited';
  重启会话生效
  永久修改;
   vim /etc/my.cnf
   transaction_isolation= 'read-uncommitted'
  
  d. 例子演示:
    脏读
     对于脏读,在生产业务中是不允许的
    不可重复读现象
      对于事务的隔离性和数据最终一致性要求比较高的业务
    幻觉
      在一个事务窗口中,更新操作,出现了别的插入数据的 幻行
  
 调整成transaction_isolation = 'REPEATABLE-READ'
  1.防止不可重复读现象:
    利用的就是 Undo 的一致性快照读。 MVCC中重要功能
  2. 通过RP, 已经可以解决99以上的幻读的,为了更加严谨,加入GAP锁,next-lock
     
  
   

8 MySql 的锁机制

1.1 作用
保证事务之间的隔离性, 也保证数据的一致性
保证资源不会争用
锁时候属于资源的,不是某个事务的特性
1.2 锁类型

   资源: 
         内存锁: mutex ,latch  (了解)
          对象锁: 
          			MDL(元数据锁),   : 修改元数据时, DDL
          			Table_lock : 		  表锁, DDL, 备份(FTWRL全局表锁)lock table x read, 也有可能升级为表锁		               					
          			 record(row) lock :  行锁, 索引锁, 锁定聚簇索引
          			 GAP:     间隙锁 , RR 级别,普通辅助索引间隙锁
          			 Next-lock:    下一键锁    GAP+ record

    功能分类:
    	IS : 意向共享锁, 表级别
    	S:    共享锁,读锁,  行级别  
    	IX: 意向排他锁,   表级别
    	X:   排他锁, 写锁 , 行级别
         
    	

在这里插入图片描述

8. 事务的一致性ACID的C 的特性

   A: 原子性, UNDO, REDO
   D: 持久性, commit的数据, Rddo(WAL)
   I: 隔离性,  ISOLATION_Level, Lock, MVCC(UNDO)
   C: 一致性, 
   所以C的特性是以上所有特性都来保证一致性的。
写一致性: UNDO, REDO, ISO, LOCK
读一致性: ISOLATION LEVEL, MVCC(UNDO)
数据夜的一致性:
   double write buffer

9. 存储引擎核心参数

双一标准之一: redo log 刷写参数

  (a)innodb_flush_log_at_trx_commit= 1/0/2
 
  (b)innodb_flush_method=fsync/O_DIRECT/O_DYNC
  作用: 控制向磁盘刷数据的时是否用OS Cache
  fsync的特性: 
     buffer pool 的数据写磁盘的时候,需要经历OS Cache ,然后写入磁盘
     redo buffer: 的数据写磁盘的时候,需要经历OS Cache ,然后写入磁盘
   O_DYNC:
      buffer pool 的数据写磁盘的时候,需要先经历os cache ,然后在写入磁盘
      redo buffer 的数据写磁盘的时候,直接写到磁盘,跨过OS Cache
O_DIRECT:
   buffer pool 的数据写磁盘的时候,直接写到磁盘
    redo buffer: 的数据写磁盘的时候,需要经历OS Cache ,然后写入磁盘

建议使用o_direct,最好配合固态硬盘



(c)innodb_buffer_pool_size 
 作用: 数据缓冲区的总大小。缓冲数据页和索引页,是mysql 最大的内存区域。
 默认 128M
 管方建议: 80-90% 物理内存
 生产建议: 75% 一下, 按需分配

show engine innodb status

set global innodb_buffer_pool_size= 402653184;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值