表锁

1、特点:

偏向MyISAM存储引擎,开销小,加锁块,无死锁,锁定力度大,发生锁冲突的概率高,并发度低。

2、查看是否加锁:SHOW OPEN TABLES,加锁命令:lock table 表名 read, 表名 write,......,释放表unlock tables

(1) 加读锁(偏读)

  • 线程1,加表读锁,线程1可读,不可写;不可以读其他表。
  • 线程2,可以读表,也可以读其他的表,但是修改线程1加读锁的表会堵塞。
    (2)加写锁(偏写)
  • 线程1,加写锁,线程1可以读自己锁过的表,自己可以修改自己锁过的表,自己不能读其他表
  • 线程2,能查其他的表,读线程1加锁的表会被阻塞,知道表锁释放。
3、总结
表锁_第1张图片
image.png
总之,读锁会堵塞写,但是不会阻塞读,而写锁,会把读和写都阻塞
4、表锁分析

(1)SHOW OPEN TABLES可以查看哪些表被锁
(2)可以通过检查table_locks_watiedtable_locks_immedinate状态变量来分析系统上的表锁定:show status like 'table%';

  • table_locks_immedinate表示表级锁定的次数,表示可以立即获取锁的查询次数,每立即获取锁值加1.
  • table_locks_watied 出现表级锁定争用而发生等待的次数(不能立即获取锁的次数,每等待一次锁值加1),此值高则说明存在较严重的表级锁争用情况。
    此外MyISAM引擎读写所调度是写优先,这也是MyISAM不适合做写为主表的引擎。因为写锁后,其他线程不能做任何操作,大量的更新会使查询很难得到锁,从而造成永远阻塞。
表锁_第2张图片
微信公众号欢迎关注.jpg

你可能感兴趣的:(表锁)