数据库锁。
从大到小。
数据库锁。把整个库锁了。整个库锁有啥用。比如备份某个节点的数据库。但是很少人这么做。因为你锁定了整个库,无论从库,还是主库,都是不允许的。影响正常运作。现在几乎很少这么玩。如果是用innodb,可以采用可重复读事务,采用视图的原理。这样就算死机,锁也是自然断开。
表锁。大家都有。锁整个表。表锁分元数据锁跟读写锁。元数据锁,是涉及元数据结构的修改。全部数据增删改都得暂停。读写锁,同样也影响其他事务的操作。读锁。可以共存读操作。
行锁。就锁定一行。比如操作id=1这行。唯有共同操作这行。才会存在竞争。
这也是平时经常遇到的锁。数据自动锁定的行级。这个行级锁是ninodb特有。也是自动锁定。
那怎么避开这玩意?
控制死锁。数据库自己检查死锁。但是整个耗数据库性能。
设置锁等待时间。
同一事务,尽量让热点数据最后操作。减少锁的时间。避开锁冲突。
热点数据,尽量采用中间件缓解锁冲突。尽量控制锁的并发个数。要不然会雪崩。
间隙锁。待续