MySQL数据库锁定机制

MySQL数据库锁定机制

ID:43325223

大小:295.05 KB

页数:17页

时间:2019-10-01

MySQL数据库锁定机制_第1页
MySQL数据库锁定机制_第2页
MySQL数据库锁定机制_第3页
MySQL数据库锁定机制_第4页
MySQL数据库锁定机制_第5页
资源描述:

《MySQL数据库锁定机制》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、MySQL激腸痔碱室机制MySQL数薦痔衢室机制简介•彳亍级锁定(row-level)行级锁定最大的特点就是锁定对彖的颗粒度很小,也是H前各大数据库管理软件所实现的锁定颗粒度最小的。由于锁定颗粒度很小,所以发生锁定资源争用的概率也最小,能够给予应用程序尽可能大的并发处理能力而提高一些需要高并发应用系统的整体性能。虽然能够在并发处理能力上面有较大的优势,但是行级锁定也因此带来了不少弊端。由丁•锁定资源的颗粒度很小,所以每次获取锁和释放锁需要做的事情也更多,带來的消耗自然也就更大了。此外,行级锁定也最容易发牛死锁。•表级锁定(table-level)和行级锁従相反,表级别的锁従是MySQL

2、各存储引擎中最大颗粒度的锁宦机制。该锁定机制最大的特点是实现逻辑IF-常简单,带来的系统负面影响最小。所以获取锁和释放锁的速度很快。由于表级锁一次会将整个表锁定,所以可以很好的避免怵I扰我们的死锁问题。当然,锁定颗粒度人所带來最人的负面彩响就是岀现锁定资源争川的概率也会最高,致使并大度大打折扣。•页级锁定(pagcTevel)页级锁定是MySQL屮比较独特的一种锁定级别,在其他数据库管理软件屮也并不是太常见。页级锁定的特点是锁定颗粒度介于行级锁定与表级锁之间,所以获取锁定所需要的资源开销,以及所能提供的并发处理能力也同样是介于上面二者Z间。另外,页级锁定和行级锁定一样,会发生死锁。在数

3、据库实现资源锁定的过程中,随着锁定资源颗粒度的减小,锁定相同数据量的数据所需要消耗的内存数量是越來越多的,实现算法也会越來越复杂。不过,随着锁定资源颗粒度的减小,应用程序的访问请求遇到锁等待的可能性也会随之降低系统整体并发度也随之捉升。在MySQL数据库屮,使用表级锁定的主要是MylSAM,Memory,CSV等一些非事务性存储引擎,而使用行级锁定的主要是Innodb存储引擎和NDBCluster存储引擎,页级锁定主要是BerkeleyDB存储引擎的锁定方式。MySQL的如此的锁定机制主要是由丁•其最初的历史所决定的。在最初,MySQL希望设计一种完全独立于各种存储引擎的锁定机制,而H

4、.在早期的MySQL数据库中,MySQL的存储引擎(MylSAM和Momery)的设计是建立在“任何表在同一吋刻都只允许单个线程对其访问(包括读)”这样的假设之上。但是,随着MySQL的不断完善,系统的不断改进,在MySQL3.23版本开发的时候,MySQL开发人员不得不修正Z前的假设。因为他们发现一个线程正在读某个表的时候,另一个线程是可以对该表进行insert操作的,只不过只能INSERT到数据文件的最尾部。这也就是从MySQL从3.23版本开始提供的我们所说的ConcurrentInserto当出现ConcurrentInsertZ后,MySQL的开发人员不得不修改Z前系统中的锁

5、定实现功能,但是仅仅只是增加了对ConcurrentTnsert的支持,并没有改动整体架构。可是在>1、久之后,随曹BerkeleyDB存储引擎的引入,之而的锁定机制遇到了更大的挑战。因为BerkeleyDB存储引擎并没有MylSAM和Memory存储引藥同一时刻只允许单一线程访问某一个表的限制,而是将这个单线程访问限制的颗粒度缩小到了单个page,这又一次迫便MySQL开发人员不得不再一次修改锁定机制的实现。由于新的存储引擎的引入,导致锁定机制不能满足耍求,让MySQL的人意识到已经不可能实现一种完全独立的满足各种存储引擎要求的锁定实现机制。如果因为锁定机制的拙劣实现而导致存储引擎的

6、整体性能的下降,肯定会严重打击存储引擎提供者的积极性,这是MySQL公司非常不愿意看到的,因为这完全不符合MySQL的战略发展思路。所以工程师们不得不放弃了最初的设计初衷,在锁定实现机制屮作岀修改,允许存储引擎自己改变MySQL通过接口传入的锁定类型而H行决定该怎样锁定数据。各神餡机制分柝在整体了解了MySQL锁定机制Z后,这一节我们将详细分析MySQL自身提供的表锁定机制和其他储引擎实自身实现的行锁定机制,并通过MylSAM存储引擎和Innodb存储引擎实例演示。表级锁定MySQL的表级锁定主要分为两种类型,一种是读锁定,另一种是写锁定。在MySQL中,主耍通过四个队列来维护这两种锁

7、定「两个存放当前正在锁定中的读和写锁定信息,另外两个存放等待中的读写锁定信息,如下:•Currentread-lockqueue(lock->read)•Pendingread-lockqueue(lock->read_wait)•Currentwrite-lockqueue(lock->write)•Pendingwrite-lockqueue(lock->write_wait)当前持冇读锁的所冇线程的相关信息都能够在Currentread-

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。