MySQL数据库锁机制的相关原理

在一个update和insert操作频繁的表中,少量数据测试的时候运行良好,在实际运营中,因数据量比 较大(21万条记录),会出现死锁现象,用show processlist查看,可以看到一个update语句状态是 Locked,一个delete语句状态是Sending data。查看了一下参考手册,把锁定相关的资料整理下来,以便 自己记录和追踪该问题的解决情况:

MySQL 5.1支持对MyISAM和MEMORY表进行表级锁定,对BDB表进行页级锁定,对InnoDB 表进行行级锁定 。在许多情况下,可以根据培训猜测应用程序使用哪类锁定类型最好,但一般很难说出某个给出的锁类型 就比另一个好。一切取决于应用程序,应用程序的不同部分可能需要不同的锁类型。为了确定是否想要使 用行级锁定的存储引擎,应看看应用程序做什么并且混合使用什么样的选择和更新语句。例如,大多数 Web应用程序执行许多选择,而很少进行删除,只对关键字的值进行更新,并且只插入少量具体的表。基 本MySQL MyISAM设置已经调节得很好。

在MySQL中对于使用表级锁定的存储引擎,表锁定时不会死锁的。这通过总是在一个查询开始时立即请 求所有必要的锁定并且总是以同样的顺序锁定表来管理。

对WRITE,MySQL使用的表锁定方法原理如下:

◆ 如果在表上没有锁,在它上面放一个写锁。

◆否则,把锁定请求放在写锁定队列中。

对READ,MySQL使用的锁定方法原理如下:

◆如果在表上没有写锁定,把一个读锁定放在它上面。

◆否则,把锁请求放在读锁定队列中。

当一个锁定被释放时,锁定可被写锁定队列中的线程得到,然后是读锁定队列中的线程。

这意味着,如果你在一个表上有许多更新,select语句将等待直到没有更多的更新。

如果insert 语句不冲突,可以自由为MyISAM 表混合并行的insert 和select 语句而不需要锁定。

InnoDB 使用行锁定,BDB 使用页锁定。对于这两种存储引擎,都可能存在死锁。这是因为,在SQL语 句处理期间,InnoDB 自动获得行锁定,BDB 获得页锁定,而不是在事务启动时获得。

行级锁定的优点:

· 当在许多线程中访问不同的行时只存在少量锁定冲突。

· 回滚时只有少量的更改。

· 可以长时间锁定单一的行。

时间: 2024-08-29 06:30:27

MySQL数据库锁机制的相关原理的相关文章

轻松掌握MySQL数据库锁机制的相关原理

在MySQL中对于使用表级锁定的存储引擎,表锁定时不会死锁的.这通过总是在一个查询开始时立即请求所有必要的锁定并且总是以同样的顺序锁定表来管理. 在一个update和insert操作频繁的表中,少量数据测试的时候运行良好,在实际运营中,因数据量比较大(21万条记录),会出现死锁现象,用show processlist查看,可以看到一个update语句状态是Locked,一个delete语句状态是Sending data.查看了一下参考手册,把锁定相关的资料整理下来,以便自己记录和追踪该问题的解决

Mysql数据库锁定机制详细介绍_Mysql

前言 为了保证数据的一致完整性,任何一个数据库都存在锁定机制.锁定机制的优劣直接应想到一个数据库系统的并发处理能力和性能,所以锁定机制的实现也就成为了各种数据库的核心技术之一.本章将对MySQL中两种使用最为频繁的存储引擎MyISAM和Innodb各自的锁定机制进行较为详细的分析. MySQL锁定机制简介 数据库锁定机制简单来说就是数据库为了保证数据的一致性而使各种共享资源在被并发访问访问变得有序所设计的一种规则.对于任何一种数据库来说都需要有相应的锁定机制,所以MySQL自然也不能例外.MyS

mysql数据库锁的产生原因及解决办法_Mysql

数据库和操作系统一样,是一个多用户使用的共享资源.当多个用户并发地存取数据 时,在数据库中就会产生多个事务同时存取同一数据的情况.若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性.加锁是实现数据库并 发控制的一个非常重要的技术.在实际应用中经常会遇到的与锁相关的异常情况,当两个事务需要一组有冲突的锁,而不能将事务继续下去的话,就会出现死锁,严 重影响应用的正常执行. 在数据库中有两种基本的锁类型:排它锁(Exclusive Locks,即X锁)和共享锁(Share Lock

MySQL数据库账户授权的相关管理解析 (1)

MySQL管理员应该知道如何设置MySQL用户账号,指出哪个用户可以连接服务器,从哪里连接,连接后能做什么.MySQL 3.22.11开始引入两条语句使得这项工作更容易做:GRANT语句创建MySQL用户并指定其权限,而REVOKE语句删除权限.两条语句扮演了mysql数据库的前端角色,并提供与直接操作这些表的内容不同的另一种方法.CREATE和REVOKE语句影响4个表:授权表 内容 user 能连接服务器的用户以及他们拥有的任何全局权限 db 数据库级权限 tables_priv 表级权限

MySQL数据库账户授权的相关管理解析 (1)(2)

1.1 谁能连接,从那儿连接? 你可以允许一个用户从特定的或一系列主机连接.有一个极端,如果你知道降职从一个主机连接,你可以将权限局限于单个主机: GRANT ALL ON samp_db.* TO boris@localhost IDENTIFIED BY "ruby"GRANT ALL ON samp_db.* TO fred@res.mars.com IDENTIFIED BY "quartz" (samp_db.*意思是"samp_db数据库的所有

MySQL数据库之锁的详解

锁是计算机协调多个进程或线程并发访问某一资源的机制.在数据库中,除传统的计算资源(如CPU.RAM.I/O等)的争用以外,数据也是一种供许多用户共享的资源.如何保证数据并发访问的一致性.有效性是所有数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一个重要因素.从这个角度来说,锁对数据库而言显得尤其重要,也更加复杂.本章我们着重讨论MySQL锁机制的特点,常见的锁问题,以及解决MySQL锁问题的一些方法或建议. MySQL锁概述 相对其他数据库而言,MySQL的锁机制比较简单,其最显著

Mysql教程:对MySQL中的锁机制的总结

原文链接:http://blog.chinaunix.net/u/29134/showart_1087632.html 今天来简单总结一下MySQL的锁机制,不妥的欢迎拍砖! 1.对于MySQL来说,有三种锁的级别:页级.表级.行级. 页级的典型代表引擎为BDB. 表级的典型代表引擎为MyISAM,MEMORY以及很久以前的ISAM. 行级的典型代表引擎为INNODB. 2.我们实际应用中用的最多的就是行锁了. 行级锁的优点如下: 1).当很多连接分别进行不同的查询时减小LOCK状态. 2).如

并发编程(四):也谈谈数据库的锁机制

首先声明,本次文章基本上都是从其他人的文章中或者论坛的回复中整理而来.我把我认为的关键点提取出来供自己学习.所有的引用都附在文后,在这里也就不一一表谢了. 第二个声明,我对于Internel DB并没有研究过,所使用的也是简单的写写SQL,截止到现在最多的一个经验也就是SQL的性能调优,具体点就是通过Postgresql的执行计划,来调整优化SQL语句完成在特定场景下的数据库调优.对于锁,由于数据库支持的锁机制已经能够满足平时的开发需要.因为所从事的行业并不是互联网,没有实时性高并发的应用场景,

介绍了Oracle数据库锁的种类及研究

本文通过对Oracle数据库锁机制的研究,首先介绍了Oracle数据库锁的种类,并描述了实际应用中遇到的与锁相关的异常情况,特别对经常遇到的由于等待锁而使事务被挂起的问题进行了定位及解决,并对死锁这一比较严重的现象,提出了相应的解决方法和具体的分析过程. 数据库是一个多用户使用的共享资源.当多个用户并发地存取数据时,在数据库中就会产生多个事务同时存取同一数据的情况.若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性. 加锁是实现数据库并发控制的一个非常重要的技术.当事务在对某