MySQL系列(23):查看锁表和等待锁的事务, 死锁排查
今天碰到个涉及微服务和事务的问题,出现了死锁,抛出了事务等待锁超时的问题。
查了半天最后确定是对微服务环境下的事务,及事务使用的认识上存在不足导致。
今天碰到个涉及微服务和事务的问题,出现了死锁,抛出了事务等待锁超时的问题。
查了半天最后确定是对微服务环境下的事务,及事务使用的认识上存在不足导致。
JDK 1.5 新增了 ReentrantLock 类,可以实现线程之间的同步互斥,相比 synchronized ,在扩展功能上更加强大,在使用上更加灵活。
ReentrantLock 还具有嗅探锁定、多路分支通知等功能。
MyISAM存储引擎只支持表级锁。该锁类型是也使用非常广泛的锁类型。
加锁操作是为了保证多事务操作同一数据时可能保持一致性。有 悲观锁 和 乐观锁 两种方式。
悲观锁 是由数据库引擎提供支持;乐观锁 是常规 SQL 语句版本检测的一种主观理解。
锁是计算机协调多个进程或并发访问某一资源的机制,数据也是供许多用户共享的资源。Java有锁机制,数据库也有锁机制。数据库锁定机制简单来说,是为了保证在并发情况下数据的一致性、有效性。
MySQL的锁机制是由存储引擎提供的,InnoDB
存储引擎支持行级锁和表级锁,默认级别行级锁(row-Level locking); MyISAM和MEMORY存储引擎采用的是表级锁(table-level locking),BDB存储引擎采用的是页面锁(page-level locking),也支持表级锁,BDB已成为历史。
InnoDB 与 MyISAM 最大的不同有两点:一是支持事务,二是采用行级锁。
MySQL 5.7 官方文档:14.7.1 InnoDB Locking,14.7.3 Locks Set by Different SQL Statements in InnoDB,14.7.5 Deadlocks in InnoDB。