总的来说,Mysql各存储引擎使用了三种类型的锁定机制:行锁定,页级锁定和表级锁定。下面我们简要进行分析这三种锁定的特点和各自的优劣。
Mysql锁定简介
行级锁定(row-level)
行级锁定最大的特点就是锁定对象的颗粒度很小,也是目前个大数据库管理软件实现锁定颗粒最小的,由于锁定颗粒度很小,所以发生锁定资源争用的概率也最小。尽最大可能的并发处理能力提高一些需要高并发应用的整体性能。
表级锁定(table-level)
和行级锁定相反,表级别的锁定是mysql各存储引擎中最大颗粒度的锁定机制。特点是实现逻辑非常简单,带来系统负面影响最小。所获取锁和释放锁的速度很快。由于表锁定会将这个表锁定,所以可以很好的避免困扰我们的死锁问题。
页级锁定(page-level)
页级锁定是mysql中比较独特的一种锁定级别,在其他数据库管理软件中也并不是很常见。特点是锁定力度在行和表之间。
各种锁定机制
表级锁定
Myssql表级锁定主要分为两种类型,一种是读锁定,另一种是写锁定。
行锁定
行锁定不是mysql自己实现的锁定方式,由其他存储引擎自己实现。
MyISam表锁定优化
1缩短锁定时间
缩短锁定之间,听起来很容易,实际上做起来并不简单。唯一的办法就是让我们的query执行时间尽可能的短
- 尽量减少大的复杂query,见复杂query分拆成几个小的query分布进行
- 尽可能的建立足够高校的索引,让数据检索更迅速
- 尽量让myisam存储引擎的表只存放必要信息,控制字段类型
- 利用合适的机会优化myisam表数据文件
2分离能并行的操作
读写互相阻塞的表锁,可能认为是不能并行化了。但是MyISam存储还有一个非常有用的特性,就是并发插入的(Concurrent Insert)
可以开启纵隔参数选项,有三个参赛,0,1和2,1和2是支持并发插的
Innodb行锁优化
要想合理利用Innodb行锁定,做到扬长避短,必须做好以下工作
a)尽可能的让所有的数据检索都通过索引来完成,从而避免innodb因为无法通过索引键加锁而升级为表锁定
b)尽可能的减少基于范围的数据检索过滤条件,避免因为间隙锁带来负面影响
c)尽量控制事务的大小,减少锁定资源量和锁定时间长度
d)尽量使用较低级别事务隔离度,减少因为事务隔离级别所带来的附加成本。
小结:
以上为简单介绍myslq的锁定,分析mysql中使用广泛的锁定方式。认识如何避免和优化锁。