1 数据库锁定机制 简单来说, 就是数据库为了保证数据的一致性, 而使各种共享资源在被 并发访问变得有序 所设计的一种规则.
2 行级锁定 (row-level). 主要是 InnoDB 存储引擎. 支持外键, 事务.
(1) 开销大, 加锁慢, 会出现死锁.
(2) 锁定粒度最小, 并发度也最高.
(3) 适合 更新, 删除操作频率较高, 或 要保证数据的完整性的场景. 如联机事务处理 (OLTP).
3 表级锁定 (table-level). 主要是 MyISAM, CSV. 不支持外键, 事务.
(1) 开销小, 加锁快, 不会出现死锁.
(2) 锁定粒度大, 并发度最低.
(3) 适合 以读写插入为主的场景. 如联机分析处理 (OLAP).
4 InnoDB 行锁优化建议.
(1) 尽可能让所有的数据检索都 通过索引 来完成.
(2) 合理设计索引. 以此来尽可能的缩小锁定范围, 避免造成不必要的锁定而影响其它请求的执行.
(3) 减少基于范围数据检索的过滤条件, 避免锁定了不该锁定的记录.
(4) 控制事务的大小, 减少锁定的资源量和锁定时间长度.
(5) 尽量使用 较低级别的事务隔离, 以减少MySQL因为实现事务隔离级别所带来的附加成本.
5 减少 InnoDB死锁概率建议.
(1) 一次分配好 所需要的所有资源.
(2) 对于非常容易产生死锁的业务部分, 尝试 升级锁定颗粒度 来减少死锁产生的概率.
(3) 尽可能按照 事先分配好的访问顺序来访问.