您的位置:首页 > 数据库 > MySQL

【高性能Mysql】读书笔记

2017-06-20 11:16 281 查看

读写锁

读写锁是为了保证数据的一致性

读锁(共享锁)

写锁(排他锁)

锁粒度:一种提高共享资源并发性的方式是让锁对象有选择性,只要锁定会修改的数据,锁定的数据量越小并发性越大。Mysql不同存储引擎的都可以实现自己的锁策略和锁粒度。

表锁:对表进行写操作(insert,update,delete)时需要先获得写锁,这样会阻塞其他用户对该表的读写操作。只有没有写锁时,才能对表进行读操作。alter table就是使用的表锁,而忽略存储引擎自己方式实现的锁。

行锁:最大成都实现并发操作,同时带来巨大的锁消耗。(InnoDB,XtraDB)

事务

事务就是一组原子性的Sql查询

语法:

START TRANSACTION;
sql...
COMMIT;


事务的4大特性ACID

原子性:最小单位

一致性:所有sql成功之后才会commit

隔离性:未执行完事务对其他事务是不可见的

持久性:commit成功就是保存到数据库

隔离级别

SQL标准中定义了4种隔离级别,较低级别的隔离通常可以执行更高的并发,系统的开销也更低。

READ UNCOMMITTED:脏读,不可重复读,幻读

READ COMMITTED:不可重复读,幻读

REPEATABLE READ:幻读

SERIALIZABLE(可串行化):加锁读

死锁

死锁是指二个或多个事务对同意资源上相互占用,并请求锁定对方占用的资源,导致的恶性循环现象。

数据库系统实现了各种死锁检测和死锁超时机制,越复杂的系统越能检测到死锁的循环依赖,并立即返回一个错误。虽然有效,但会导致非常慢的查询。InnoDB目前处理死锁的方法是,将持有最少行级锁的事务进行回滚。

死锁产生的原因:数据冲突,存储引擎实现的方式导致。

Mysql中的事务

自动提交(AUTOCOMMIT):每一个sql默认就是一个事务

show VARIABLES like ‘AUTOCOMMIT’

ON代表启用

在事务中混合使用事务型和非事务型的表(如InnoDB和MyISAM),会导致MyISAM表无法回滚。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mysql