网站优化中的八门金“锁”

MySQL中的锁:
从锁定粒度上区分为:表级锁,页级锁,行级锁。

  • 表级锁:
    特点:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度低。
    代表引擎是MyISAM引擎。
    表级锁定分为:表共享读锁(共享锁)与表独占写锁(排他锁)。
    注:
    开销小:指加锁资源消耗较少
    锁定粒度大:指锁的级别,最小的行级锁,最大的表锁。
    锁冲突高:因为针对整个表加锁,除非没有其他人操作否则冲突。
  • 页级锁(不详解)
    特点:优缺点介于表级锁和行级锁之间,粒度为相邻一组数据行。
    代表引擎是BDB引擎。
  • 行级锁:
    特点:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突概率最低,并发度也最高。
    代表引擎是InnoDB引擎。InnoDB也支持表级锁,默认为行级锁
    行级锁分为:共享锁和排他锁
    注:
    死锁:两个进程同时操作一组数据,相互争夺控制权,造成相互等待若无外力不继续进行一直等待的现象,称之为死锁。
    当两个事务同时执行,一个锁住了主键索引,在等待其他相关索引。另一个锁定了非主键索引,在等待主键索引。这样就会发生死锁。发生死锁后,InnoDB一般都可以检测到,并使一个事务释放锁回退,另一个获取锁完成事务。
    行锁与表锁:InnoDB行锁是通过给索引上的索引项加锁来实现的,这一点MySQL与Oracle不同,后者是通过在数据块中对相应数据行加锁来实现的。InnoDB这种行锁实现特点意味着:只有通过索引条件检索数据,InnoDB才使用行级锁,否则,InnoDB将使用表锁

继续阅读“网站优化中的八门金“锁””