MyISAM引擎的表锁

MyISAM引擎特色简述

  • 不支持事务
  • 不支持外键
  • 较小的逐渐范围
  • 支持全文检索
  • 不支持GIB数据
  • 查询效率高
  • 使用表锁

表锁特色

  锁住整个表,因此开销小,加锁比较快,无死锁状况,锁的粒度较大,在并发状况下,产生锁等待的几率比较高,因此支持的并发数较低,通常用于查找。html

表锁类型

  • 读锁:也称为共享锁,针对同一张表,多并发读操做能够并行执行,而且互不影响,写会发生阻塞。
  • 写锁:也称为排它锁,针对同一张表,当前线程写操做时,会阻塞其余线程的读写操做。

手动表锁语法

mysql> LOCK TABLE 表名 [READ | WRITE] [,表名 [READ | WRITE]...]   #加锁 
mysql> UNLOCK TABLES    #解锁

状态查询

mysql> SHOW STATUS LIKE 'Table_locks_immediate';

表示能够当即获取锁的查询次数,每获取一次锁就增长1mysql

 

mysql> SHOW STATUS LIKE 'Table_locks_waited';

表示锁等待的次数sql

 

最佳实践

读锁(共享锁)

步骤 Session1 Session2
1 给myisam_lock加读锁  
2 能够查询myisam_lock表数据 能够查询myisam_lock表数据
3 不能够增删改myisam_lock表数据 增删改myisam_lock表数据阻塞
4 不能够增删改查其余表数据 能够增删改查其余表数据
5 释放myisam_lock的读锁 释放读锁同时阻塞的增删改为功

 

 

 

 

 

 

写锁(排它锁)

步骤 Session1 Session2
1 给myisam_lock加写锁  
2 能够查询myisam_lock表数据 查询myisam_lock表数据阻塞
3 释放myisam_lock的写锁 释放写锁同时阻塞的查询成功
4 给myisam_lock加写锁  
5 能够增删改myisam_lock表数据 增删改myisam_lock表数据阻塞
6 不能够增删改查其余表数据 能够增删改查其余表数据
7 释放myisam_lock的写锁 释放写锁同时阻塞的增删改为功

 

 

 

 

 

 

 

 

实践结束,我以为有必要解释一下关于表锁的特色:并发

  • 表锁开销小,由于直接锁住整个表,不用太多查找,索引消耗的性能也比较小。
  • 加锁快,由于好找因此加锁时间也短。
  • 无死锁状况,由于MyISAM没有事务,因此就谈不上死锁。
  • 表锁粒度大,由于锁住全部表数据,这还不大吗?
  • 锁等待几率大,每次更新一下就要锁住表,全部增删改都须要排队。
  • 并发数较低,增删改都是排它锁,其余线程连访问都会阻塞,并发确定低。
  • 通常用于查,由于查是共享锁,不影响其余线程读取,因此查的性能很好。

 

本文索引关键字:性能

读锁(共享锁):http://www.cnblogs.com/huanStephen/p/8067972.html#s_lockspa

写锁(排它锁):http://www.cnblogs.com/huanStephen/p/8067972.html#x_lock线程

欢迎你们索引!code

相关文章
相关标签/搜索