mysql 开发进阶篇系列 12 锁问题(隔离级别下锁的差异)

1. innodb在不同隔离级别下的一致性读及锁的差异
  不同的隔离级别下,innodb处理sql 时采用的一致性读策略和需要的锁是不同的,同时,数据恢复和复制机制的特点,也对一些sql的一致性读策略和锁策略有很大影响。对于许多sql, 隔离级别越高,innodb给记录集的锁就越严格(龙其是使用范围条件的时候),产生的锁冲突的可能性也就越高,对并发性事务处理性能的影响也就越大。因此,在应用中,应该尽量使用较低的隔离级别,减少锁争用。通常使用Read Commited隔离级别就足够了, 对于一些确实需要更高隔离级别的事务,可能在程序中执行 SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ 或SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE 动态来改变隔离级别。 

  下面重点看下REPEATABLE READ与Read commited 锁申请的不同区别,在增删改查上申请的锁都是一致的,但在事务中锁释放的时间是不一样的这点需要注意。


SQL


条件


Read uncommited


Read commited


Repeatable read


serializable


Select


=


None locks


Consisten read/

None locks


Consisten read/

None locks


Share locks


范围


None locks


Consisten read/

None locks


Consisten read/

None locks


Share next-key


Update


=


X(排它锁)


X


X


X


范围


X next-key


X next-key


X next-key


X next-key


Insert


X


X


X


X


REPLACE


无键冲突


X


X


X


X


键冲突


X next-key


X next-key


X next-key


X next-key


Delete


=


X


X


X


X


范围


X next-key


X next-key


X next-key


X next-key


Select ..from

Lock in share mode


=


Share locks


Share locks


Share locks


Share locks


范围


Share locks


Share locks


Share next-key


Share next-key


Select ..from

For update


=


X


X


X


X


范围


X


Share locks


X next-key


X next-key


Insert into..

Select ..


Innodb_locks_unsafe

_for_binlog=off


Share next-key


Share next-key


Share next-key


Share next-key


Innodb_locks_unsafe

_for_binlog=on


None locks


Consisten read/

None locks


Consisten read/

None locks


Share next-key


Create table..

Select ..


Innodb_locks_unsafe

_for_binlog=off


Share next-key


Share next-key


Share next-key


Share next-key


Innodb_locks_unsafe

_for_binlog=on


None locks


Consisten read/

None locks


Consisten read/

None locks


Share next-key

原文地址:https://www.cnblogs.com/MrHSR/p/9403316.html

时间: 2024-11-05 14:50:40

mysql 开发进阶篇系列 12 锁问题(隔离级别下锁的差异)的相关文章

mysql 开发进阶篇系列 47 xtrabackup (完全备份恢复,恢复后重启失败总结)

一. 完全备份恢复说明 xtrabackup二进制文件有一个xtrabackup --copy-back选项,它将备份复制到服务器的datadir目录下.下面是通过 --target-dir 指定完全备份文件的目录,还原到datadir目录下. xtrabackup --copy-back --target-dir=/data/backups/ 可以使用xtrabackup --move-back选项恢复备份.这个选项类似于xtrabackup --copy-back,唯一的区别是它将文件移动到

mysql 开发进阶篇系列 55 权限与安全(安全事项 )

一. 操作系统层面安全 对于数据库来说,安全很重要,本章将从操作系统和数据库两个层面对mysql的安全问题进行了解. 1. 严格控制操作系统账号和权限 在数据库服务器上要严格控制操作系统的账号和权限,在安装mysql时就要重视安全问题. (1) 锁定mysql用户. (2) 其它任何用户都采取独立的账号登录,管理员通过mysql专有用户管理mysql服务,或者通过 root su到mysql用户下进行管理. (3) mysql用户目录下,除了数据文件目录,其它文件和目录属主都改为root. 我本

mysql 开发进阶篇系列 20 MySQL Server(innodb_lock_wait_timeout,innodb_support_xa,innodb _log_*)

1. innodb_lock_wait_timeout mysql 可以自动监测行锁导致的死锁并进行相应的处理,但是对于表锁导致的死锁不能自动监测,所以该参数主要用于,出现类似情况的时候等待指定的时间后回滚.系统默认值是50秒.用户可以根据业务自行设置.生产环境不推荐使用过大的 innodb_lock_wait_timeout 参数值. -- 查看事务超时时间 SHOW VARIABLES LIKE 'innodb_lock_wait_timeout'; 也可以对当前会话进行超时设置如: set

mysql 开发进阶篇系列 14 锁问题(避免死锁,死锁查看分析)

一. 概述 通常来说,死锁都是应用设计问题,通过调整业务流程,数据库对象设计,事务大小,以及访问数据库的sql语句,绝大部分死锁都可以避免,下面介绍几种避免死锁的常用 方法. 1. 在应用中,如果不同的程序并发操作多个表,应尽量约定以相同的顺序来访问表,这样可以大大降低产生死锁的机会.按顺序对表进行操作,是很常用的一种避免死锁的操作. 比如:有二个不一样的存储过程,同时在对一个表进行复杂的删改操作.这种情况可以考虑先让一个执行完成,再让另一个在执行. 2. 在程序中以批量方式处理数据的时候,如果

mysql 开发进阶篇系列 6 锁问题

一.概述 在数据库中,数据是属于共享资源,为了保证并发访问的一致性,有效性,产生了锁.接下来重点讨论mysql锁机制的特点,常见的锁问题,以及解决mysql锁问题的一些方法或建议. 相比其他数据库,mysql 锁机制比较简单,显著的特点是 不同的存储引擎支持不同的锁机制.在innodb中支持行锁和表锁,默认行锁. mysql 的三种锁归纳如下: 表级锁:开销小,加锁快,不会出现死锁,锁定粒度大,发生锁冲突的概率最高,并发度最低. 行级锁:开销大,加锁慢:会出现死锁,锁定粒度最小,发生锁冲突的概率

mysql 开发进阶篇系列 13 锁问题(关于表锁,死锁示例,锁等待设置)

一. 什么时候使用表锁 对于INNODB表,在绝大部分情况下都应该使用行锁.在个别特殊事务中,可以考虑使用表锁(建议). 1. 事务需要更新大部份或全部数据,表又比较大,默认的行锁不仅使这个事务执行效率低,可能造成其他事务长时间锁等待和锁冲突,这种情况考虑使用表锁来提高事务的执行速度(具我在sql server中的经历,该大表有上100w,删除40w,表锁有时会造成长时间未执行完成. 还是使用分批来执行好). 2. 事务涉及多个表,比较复杂,很可能引起死锁,造成大量事务回滚.这种情况可以考虑一次

mysql 开发进阶篇系列 41 mysql日志之慢查询日志

一.概述 慢查询日志记录了所有的超过sql语句( 超时参数long_query_time单位 秒),获得表锁定的时间不算作执行时间.慢日志默认写入到参数datadir(数据目录)指定的路径下.默认文件名是[hostname]_slow.log,默认超时是10秒,默认不开启慢查询日志.下面查看慢日志的几个参数: -- 是否开启慢日志 SHOW VARIABLES LIKE 'slow_query_log'; -- 慢日志文件记录位置 SHOW VARIABLES LIKE 'slow_query_

mysql 开发进阶篇系列 45 xtrabackup 安装与用户权限说明(系统用户和mysql用户)

一. 安装说明 安装XtraBackup 2.4 版本有三种方式: (1) 存储库安装Percona XtraBackup(推荐) (2 )下载的rpm或apt包安装Percona XtraBackup. (3) 源代码编译和安装. Percona为yum (Red Hat.CentOS和Amazon Linux AMI的RPM包)和apt (Ubuntu和Debian的.deb包)提供存储库,用于Percona Server.Percona XtraBackup和Percona Toolkit

mysql 开发进阶篇系列 5 SQL 优化

一. 使用sql提示 sql 提示(sql hint)是优化数据库的一个重要手段, 是在sql语句中加入一些人为的提示来达到优化操作的目的. 1.1 use index 在查询语句中表名的后面,添加use index 强制mysql使用该索引,不考虑其它索引. EXPLAIN SELECT * FROM city USE INDEX(ix1) WHERE city_id=1; 1.2 ignore index 在查询语句中表名的后面,添加ignore index,使用mysql忽视一个或者多个索