mysql 学习06-锁

什么是锁

锁是数据库系统的一个关键特性,锁机制用于管理共享资源的并发访问。InnoDB是行级锁。

SELECT * from information_schema.INNODB_TRX   ##啥看事务

SELECT * FROM information_schema.INNODB_LOCKS  ##查看锁
	
show processlist;	##查看线程

show full processlist;

show open tables from ***;

show status like '%lock%';	##查看服务器状态

show variables like '%timeout%';	##

SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS; ##查看等待锁的事务

innodb_automic_lock_mode参数设置

innodb_automic_lock_mode=1 默认设置,对于能够在插入前确定行数的语句,innodb使用互斥量mutex对内存中的计数器进行累加的操作;对于插入前不能确定行数的语句,执行传统的锁机制,会发生阻塞。 innodb_automic_lock_mode=0 5.1.22版本之前的设置,表锁机制,会发生阻塞 innodb_automic_lock_mode=2 全部执行互斥量方式,性能最高,但是问题在于并发插入的时候,导致增长的值不连续

S锁(共享锁)和X锁(排他锁)

lock table user read;	## 锁定读
locl table user write;	## 锁定写
unlock tables;			## 释放锁

当锁定读的时候,其他线程可以读数据,但是不能修改数据;当锁定写的时候,其他线程不能读也不能写。

锁带来的问题

  1. 丢失更新
  2. 脏读

锁升级

锁升级是指将当前锁的颗粒度降低。举例来说,数据库可以把一个表的1000个行锁升级成一个页锁,或者将页锁升级成表锁。锁升级会带来性能的下降。