• 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
  • 相关阅读:
    LaTeX中表格多行显示的最简单设置方法
    获取Google音乐的具体信息(方便对Google音乐批量下载)
    移动硬盘提示格式化解决的方法,未正确删除导致不能读取文件提示格式化解决方式
    Android Service 服务(一)—— Service
    华为C8816电信版ROOT过程
    Linux crontab 命令格式与具体样例
    Python用subprocess的Popen来调用系统命令
    我的EJB学习历程
    接口和逻辑--多进程或单一进程
    uva 11354
  • 原文地址:https://www.cnblogs.com/Knight7971/p/9634683.html
Copyright © 2020-2023  润新知