mysql学习之3——Mysql锁定机制简介

来源:互联网 发布:如何加入淘宝客团队 编辑:程序博客网 时间:2024/05/01 15:34

         最近公司的架构师经常提到关于数据库死锁的相关解决方案,貌似讲的都听懂了,但是让我自己现在去设计一套解决死锁的方案,还不敢说真懂呢。趁此机会,学习一下数据库锁相关的知识。

          学习的老套路,百度一下。呵呵,首先贴几篇百度来的文章,感觉具有参考价值的;

           http://blog.csdn.net/andyxm/article/details/44810313       

           http://www.jb51.net/article/58039.htm(重点推荐,《mysql性能调优与架构设计》第七章内容)

          http://www.linuxidc.com/Linux/2015-01/111605.htm

          以下是经过参考学习网络和书本的一些笔记、总结以及感悟。

1、为什么要使用锁:

        为了保证数据的一致完整性,任何一个数据库都存在锁定机制。锁定机制的优劣直接应想到一个数据库系统的并发处理能力和性能,所以锁定机制的实现也就成为了各种数据库的核心技术之一。

        个人理解:之所以会有一致性、完整性概念,就是为了保证并发时候的数据的准确,用java术语来讲就是保证线程安全。锁就是为了并发而出现的。

2、mysql三种锁机制简单对比

锁级别锁颗粒开销加锁速度锁冲突概率死锁并发行级锁最小最大最慢最低最容易最高页级锁中中中中会中表级锁大小快最高不会最低

3、行级锁定(row-level)(innodb、ndb cluster存储引擎)

行级锁定最大的特点就是锁定对象的颗粒度很小,也是目前各大数据库管理软件所实现的锁定颗粒度最小的。由于锁定颗粒度很小,所以发生锁定资源争用的概率也最小,能够给予应用程序尽可能大的并发处理能力而提高一些需要高并发应用系统的整体性能。

虽然能够在并发处理能力上面有较大的优势,但是行级锁定也因此带来了不少弊端。由于锁定资源的颗粒度很小,所以每次获取锁和释放锁需要做的事情也更多,带来的消耗自然也就更大了。此外,行级锁定也最容易发生死锁。


我们经常提到的排它锁、共享锁,就是行级锁的锁类型啦。

innodb实现行级锁,是采用间隙锁的方式,间隙锁同时也解决了幻读的出现,但是带来的问题是性能的下降。

间隙锁:是通过在指向数据记录的第一个索引键之前和最后一个索引键之后的空域空间上标记锁定信息而实现的。

innodb行级锁和oracle行级锁的区别也就在于实现方式上。

Oracle锁定数据是通过需要锁定的某行记录所在的物理block上的事务槽上表级锁定信息。


对于Innodb所使用的行级锁定,系统中是通过一组详细的状态变量来记录的,如下:

showstatuslike'innodb_row_lock%';

|Innodb_row_lock_current_waits|0|
|Innodb_row_lock_time|490578|
|Innodb_row_lock_time_avg|37736|
|Innodb_row_lock_time_max|121411|
|Innodb_row_lock_waits|13|


4、表级锁定(table-level)(myisam、memery、csv等非事务性存储引擎)

和行级锁定相反,表级别的锁定是MySQL各存储引擎中最大颗粒度的锁定机制。该锁定机制最大的特点是实现逻辑非常简单,带来的系统负面影响最小。所以获取锁和释放锁的速度很快。由于表级锁一次会将整个表锁定,所以可以很好的避免困扰我们的死锁问题。

当然,锁定颗粒度大所带来最大的负面影响就是出现锁定资源争用的概率也会最高,致使并大度大打折扣。


表级锁共有11钟锁定类型:IGNORE、UNLOCK、READ、WRITE、READ_WITH_SHARED_LOCKS、READ_HIGH_PRIORITY、READ_NO_INSERT、WRITE_ALLOW_WRITE、WRITE_ALLOW_READ、WRITE_CONCURRENT_INSERT、WRITE_DELAYED、WRITE_LOW_PRIORITY、WRITE_ONLY

锁类型session1读session1写session2读session2写读锁√×√×写锁√√××     

5、页级锁定(page-level)(berkeleydb存储引擎)

页级锁定是MySQL中比较独特的一种锁定级别,在其他数据库管理软件中也并不是太常见。页级锁定的特点是锁定颗粒度介于行级锁定与表级锁之间,所以获取锁定所需要的资源开销,以及所能提供的并发处理能力也同样是介于上面二者之间。另外,页级锁定和行级锁定一样,会发生死锁。



0 0
原创粉丝点击