数据库锁机制
数据库锁机制是为了保证数据的一致性,使得共享资源在被并发线程访问时变的有序的一种规则。从锁的粒度上可以分为行级锁、页级锁、表锁,从锁的方式又可以分为乐观锁和悲观锁,乐观锁是默认别人不会修改数据,只在提交时锁数据;悲观锁是默认别人都会动数据,从一开始就锁起来。 mysql不同的引擎有不同的特点所以使用的锁方式也不同,MyISAM用的是表级锁,成本低资源消耗少,但是出现的并发量大,需要将query时间变小;InnoDB用的是行级锁,粒度小,支持的并发量大,但成本高容易死锁,需要优化索引将检索的范围精确
1、定义:数据库为了保证数据的一致性,而使得共享资源在被并发访问时变得有序的一种规则
2、分类:锁分类
①、按操作划分:DML锁,DDL锁
②、按锁的粒度划分:行级锁、页级锁、表级锁
③、按锁级别划分:共享锁、排他锁
④、按加锁方式划分:自动锁、显示锁
⑤、按使用方式划分:乐观锁、悲观锁
BDB:支持页级锁和表级锁,默认是页级锁
InnoDB:支持行级锁和表级锁,默认是行级锁
MyISAM &Memory:这两个存储引擎都是采用表级锁
乐观锁:总是认为别人不会修改数据,因此没有上锁,只有在提交数据时才会上锁。一般会在数据表中添加版本号version来表示被修改的次数,只有version和数据库的version值相同时,才提交成功
悲观锁:总是认为别人会修改数据,所以都锁起来,,一次只能允许一个线程对数据进行修改,其他线程会被阻塞挂起
排他锁(写锁):事务对数据A上锁,只允许事务读取和修改对象A,其他事务不能对数据A加任何类型的锁
共享锁(读锁):如果事务对数据A上读锁,其他事物也只能对数据上读锁,而不能上写锁,
MyISAM存储引擎:表级锁
Innodb:行级锁
优化锁机制:
1、MyISAM表锁优化:优点:成本低,消耗的资源少。缺点:由于表级锁的颗粒度比较大,
所以资源争夺情况比较多,降低并发处理能力
关键是如何提高并发度,让锁定的时间较短,让query执行时间短
1⃣拆分大的query为几个小的query分布进行,2⃣建立高效的索引
2、Innodb行锁优化:优点:并发处理能力高,缺点:损耗大,
优化建议:1⃣尽可能让索引完成检索,2⃣减少基于范围的数据检索
3⃣控制事务的大小,减小锁定的资源量和时间长度
减少死锁的建议:1⃣尽可能的按访问顺序来访问 2⃣同一个事物中,尽可能做到一次锁定所有资源 3⃣升级锁定的颗粒度,通过表级锁来减少死锁产生的概率