一、锁的概念
锁是计算机协调多个进程或线程并发访问某一种资源的控制机制
二、读锁(共享锁)和写锁(排它锁)
读锁是针对同一资源数据,多个读操作之间互不影响
写锁当一个写操作未完成之前,会阻断其他写锁和读锁
三、三锁
表锁(偏读)
特点:偏myisam存储引擎,开销小,加索快,无死锁,锁粒度大,锁发生冲突概率低,并发低。
行锁(偏写)
特点:偏innodb存储引擎,开销大,加索慢,有死锁,锁定粒度小,锁发生冲突概率最低,并发高。
支持事务,采用了行级锁。
页锁(介于行表锁之间)
四、手动增加表锁/行锁命令
Lock table 表名 read/write,表名2 read/write,其他;
五、查看表上加过的锁
Show open tables;
六、解读锁和写锁命令
Unlock tables;
七、表锁的读锁问题案例
执行完unlock mylock;后,右边可以继续执行
八、表锁的写锁案例问题
九、表锁分析命令
Show status like ‘table%’;
分析参数1table_locks_immdediate:产生表级锁定次数,表示可以立即获取锁的查询次数,每次立即获取锁值+1
分析参数2tale_locks_waited:出现表级锁定争用而发生等待的次数(不能立即获取锁次数,每等待一次锁值+1),锁值越高说明表级锁争夺情况越严重
十、myisam读写锁调度是写优先,写锁后其他线程不能做任何操作,大量写会操作长时间的阻塞。
十一、查看当前数据库的事务隔离级别:show variables like ‘tx-isolation’;
十二、innodb自身采用了行级锁
多个线程或进程操作同一行会阻塞,不同行不阻塞,这就是冲突小