当前位置:Gxlcms > 数据库问题 > Linux运维 第四阶段 (四)MySQL锁、事务

Linux运维 第四阶段 (四)MySQL锁、事务

时间:2021-07-01 10:21:17 帮助过:26人阅读

运维 第四阶段 (四)MySQL锁、事务

1、相关概念:

连接管理器:接受请求、建立安全连接、认证用户等;

线程管理器:线程池,线程重用thread-reuse

解析器:解析树;

缓存:复杂性、算法、权限等;

>SELECT CURRENT_TIME();  (此命令不缓存)

并发控制问题:两个以上用户同时读写同一个文件数据,多版本并发控制MVCC,时间快照;

 

锁(最简单的并发控制机制):读锁(共享锁);写锁(独占锁、排他锁);

>HELP LOCK

>LOCK TABLES  tb_name  [READ|WRITE];

>UNLOCK;

锁粒度划分:从大到小依次,表锁(锁定整张表)、页锁(数据块,一块有多行)、行锁,mysql只支持表锁,行锁需要由存储引擎完成;锁越粗糙越容易管理,锁越精细越能实现并发性,相对内部越复杂。

注:若同时有多个用户写一张表,锁操作会在mysql内部自动完成,我们不需要加锁;在实现数据库的温备份时才需要加锁操作。

 

2、事务transaction

ACID(Atomicity;Consistency;Isolation;Durability)

Atomicity原子性:事务所引起的DB操作要么都完成,要么都不执行;

Consistency一致性:当事务执行结束之后,整个server状态没有改变,事务前的总和和事务后的总和是一致的(前提在隔离状态下执行),如:银行帐户A(3000)——》B(2000);

Isolation隔离性:事务调度(事务之间影响最小),MVCC(多版本并发控制);

Durability持久性:一旦事务成功完成,系统必须保证任何故障都不会引起事务表现出不一致性。


隔离级别有四种,从低到高依次为:

READ UNCOMMITTED读未提交;

READ COMMITTED读提交;

REPEATABLE READ可重读;(mysql默认)

SERIALIZABLE可串行。


>SHOW GLOBAL  VARIABLES  LIKE  ‘tx_isolation’;

>SELECT @@tx_isolation;  (两种方法查看隔离级别)

>SET GLOBAL|SESSION  tx_isolation=’READ-UNCOMMITTED’;  (修改隔离级别)

注:隔离级别越低,各事务间干扰大,但并发能力强;隔离级别越高,并发能力越弱,但安全性越好。隔离级别调低,可提高性能。

 

增删改查首先在内存中完成,再写到事务日志中,过段时间才同步到数据文件中(磁盘空间),所以在事务引擎上每次写操作都要执行两遍,一次从内存到事务日志中(速度快,仅记录操作过程),一次是事务日志写入数据文件中(持久)。

内存――》事务日志(撤销);事务日志――》磁盘(同步)

保证ACID的兼容性:redo  log(重做日志);undo  log(撤销日志)。

日志组:日志文件至关重要,并不是越大越好,根据事务需求。启动mysql时会同步事务日志到磁盘,不能终止,否则 mysql可能会崩溃。

事务日志尽量拿出来放另一磁盘。

 

>START TRANSACTION;  (启动事务)

>多条SQL语句执行,例:>INSERT  INTO tb_name......;  (事务中的SQL语句是整体,要么都执行,要么都不执行)

>COMMIT;>ROLLBACK;  (事务一旦提交就不能再撤了)

 

>SELECT @@autocommit;  (如没明确启动事务,autocommit能实现自动提交,每一个操作都直接提交,建议明确使用事务>START TRANSACTION;并关闭自动提交,系统性能要高的话,IO操作越少越好)

>SET  GLOBAL  autocommit=0; (关闭自动提交,永久生效可写入配置文件)

 

>HELP SAVEPOINT  (保存点,>SAVEPOINT  sp_name;

>START TRANSACTION;

>DELETE FROM  tutors  WHERE  Age<25;

>SAVEPOINT  ab;  (保存点名称不能使用数字)

>INSERT INTO  tutors  (Tname,Gender,Age)  VALUES (‘jowin’,’M’,25);

>SAVEPOINT  ac;

>ROLLBACK  TO ab;  (回滚至之前的保存点)

>COMMIT;

 

多事务同时执行(彼此之间互相不影响的方式并发,可提高吞吐量和资源利用率,并减少等待时间),事务之间的交互通过数据集。

 

并发控制所依赖的技术手段:锁(饿死-锁饥饿,要锁但申请不到;死锁)、时间戳、多版本控制和快照隔离。

 

事务的状态:活动的;部分提交的;提交的;失败的;中止的。

 

事务调度:可恢复调度;无级联调度。

 

查看事务隔离级别对事务的影响:在两个终端上进行

>SELECT @@tx_isolation;

>SET tx_isolation=’READ-UNCOMMITTED’;  (在一终端上来回切换隔离级别)

>UPDATE tb_name  SET.....;

>ROLLBACK;

>COMMIT;

>SELECT *  FROM  tb_name; (在另一终端查看)

 

 

 

本篇是学习《马哥网络视频》做的笔记。


本文出自 “Linux运维重难点学习笔记” 博客,谢绝转载!

Linux运维 第四阶段 (四)MySQL锁、事务

标签:linux运维

人气教程排行