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; ## 释放锁
当锁定读的时候,其他线程可以读数据,但是不能修改数据;当锁定写的时候,其他线程不能读也不能写。
锁带来的问题
- 丢失更新
- 脏读
锁升级
锁升级是指将当前锁的颗粒度降低。举例来说,数据库可以把一个表的1000个行锁升级成一个页锁,或者将页锁升级成表锁。锁升级会带来性能的下降。
阅读次数: 本文累计被阅读 1000000 次