1.前言
在开发多用户、数据库驱动的应用时,最大的一个难点是:一方面要最大程度地利用数据库的并发访问,另外一方面还需要确保每个用户能一一致性的方式读取和修改数据,为此就有了锁的机制。
2.lock和latch
latch一般称为闩锁(一种轻量级的锁),在innodb存储引擎中,latch又可以分为mutex(互斥量)和rwlock(读写锁)。其目的是用来保证并发线程操作临界资源的正确性,并且通常没有死锁检测机制。
lock的对象是事务,用来锁定的是数据库中的对象,如表、页、行。并且一般lock的对象仅在事务commit或rollback后进行释放(不同事务隔离级别释放的时间可能不同)。此外,lock.正如在大多数数据中一样,是有死锁机制的。
区别:
这里主要会讲lock锁,如果有遇到latch锁的情况,这里会回来补充。
通常想要查看lock信息,我们可以通过命令show engine innodb status以及information_schema架构下的表innodb_trx、innodb_locks、innodb_lock_waits来查看信息。
说明:我当前mysql是5.7.30-log版本,在information_shcema库下还有以下三张表,但是在8.0.25版本中,information_schema中只有innodb_trx表,而innodb_lock_waits在sys库下,innodb_locks表在任何库下都没有发现。
因此这里要特别要注意一下版本!