zoukankan      html  css  js  c++  java
  • mysql 事务及innodb隔离级别

    体系结构
    查看innodb状态
    mysql> show engine innodb status G
    事务
    原子性
    • 事务的所有操作,要么全部完成,要么全部不完成。重做日志(redo log)
    一致性
    • 事务开始之前和结束之后,数据库的完整性限制未被破坏。回滚段(undo log)
    隔离性
    • 当多个事务并发访问数据库中的同一数据时,所表现出来的相互关系。锁(lock)
    持久性
    • 事务完成之后,事务所做的修改持久化保存,不会丢失。
    innodb事务隔离级别
    • READ UNCOMMITTED
      • 可以看到其他事务未提交的数据。事务1更新了数据还未提交,但是事务2居然能看到更新后的数据!这是脏读。
    • READ COMMITTED
      • 能看到其他事务提交的数据。事务1进行select,事务2进行更新并提交,事务1再select居然会看到和之前不同的数据!这是不可重复读。
      • 读取最新数据。
      • oracle默认级别
    • REPEATABLE READ
      • 一个事务里的开始点的select和任何时刻select看到的数据一样。
      • 但会有幻读。
      • MySQL默认级别
    • SERIALIZABLE
      • 读操作会隐式的加S锁,保证不同事务之间互斥。
      • 保证串行
    参数
    • innodb_lock_wait_timeout
      • 等待锁超时时间
    • innodb_rollback_on_timeout
      • 超时后是否回滚
    • Transaction_isolation(>=5.7.20)
      • 事务隔离级别
    表空间
    mysql表空间自动默认一个表一个表空间
    innodb_flush_log_at_trx_commit参数实验
    mysql> create table test_load(a int, b char(80))engine=innodb;
    mysql> delimiter //
    mysql> create procedure p_load(count int unsigned)
    -> begin
    -> declare s int unsigned default 1;
    -> declare c char(80) default repeat('a',80);
    -> while s <= count do
    -> insert into test_load select null,c;
    -> commit;
    -> set s = s+1;
    -> end while;
    -> end;
    -> //
    mysql> set global innodb_flush_log_at_trx_commit=1;
    mysql> call p_load(50000);
    Query OK, 0 rows affected (10 min 2.59 sec)
    mysql> set global innodb_flush_log_at_trx_commit=2;
    mysql> call p_load(50000);
    Query OK, 0 rows affected (2 min 36.99 sec)
    mysql> set global innodb_flush_log_at_trx_commit=0;
    mysql> call p_load(50000);
    Query OK, 0 rows affected (4 min 2.33 sec)
    dynamic
    • 把text, blob等大字段直接放在其他page中
    • 只在原page中存储20字节指针
    查看lsn号
    mysql> show engine innodb status G
  • 相关阅读:
    C#中委托和事件的区别
    Linux centos7 计划任务与日志的管理
    linux shell检查字符串是否是IP
    Linux脚本中$#、$0、$1、$@、$*、$$、$?
    Linux命令学习之shift命令
    CentOS7编写systemd服务脚本
    java数据类型转换
    centos7 升级openssh到openssh-8.3p1版本
    oracle的簇的创建
    oracle 分区表的维护
  • 原文地址:https://www.cnblogs.com/Knight7971/p/9634683.html
Copyright © 2011-2022 走看看