MySQL_锁机制

数据库锁机制确保了数据一致性,包括行级锁、页级锁、表级锁以及乐观锁和悲观锁。MyISAM使用表级锁,适合并发量小的情况,而InnoDB则使用行级锁,支持更高并发。乐观锁在提交时才锁定,悲观锁一开始就锁定。针对不同引擎,可通过优化索引、控制事务大小等手段减少锁定资源和时间,避免死锁。
摘要由CSDN通过智能技术生成

数据库锁机制

数据库锁机制是为了保证数据的一致性,使得共享资源在被并发线程访问时变的有序的一种规则。从锁的粒度上可以分为行级锁、页级锁、表锁,从锁的方式又可以分为乐观锁和悲观锁,乐观锁是默认别人不会修改数据,只在提交时锁数据;悲观锁是默认别人都会动数据,从一开始就锁起来。 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⃣升级锁定的颗粒度,通过表级锁来减少死锁产生的概率

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值