码迷,mamicode.com
首页 > 数据库 > 详细

Mysql锁机制--概念、分类及基础命令

时间:2018-04-24 17:29:48      阅读:147      评论:0      收藏:0      [点我收藏+]

标签:png   时长   分类   show   通过   ola   size   blank   竞争   

 

Mysql 系列文章主页 

 

===============

 

1 概念

在 Java 程序中,当多线程并发访问某个资源的时候,如果有非线程安全的操作,那么需要通过加锁来保护之。同理,在 Mysql 中,如果也有多个线程、多个事务并发访问某些资源(比如写同一行记录)时,也需要锁来保护,以确保数据的正确性。

2 分类

从对数据的操作类型来分:

  • 读锁(共享锁):针对同一份数据,多个读操作可以同时进行而不会互相影响
  • 写锁(排它锁):当前写操作没有完成前,会阻塞其它写和读操作

从对数据操作的粒度分:

  • 表锁:偏向 MyISam 引擎,开销小,加锁快;无死锁;锁定粒度大,锁冲突概率最高、并发度最低
  • 行锁:偏向 InnoDB 存储引擎,开销大,加锁慢;会出现死锁;锁定粒度小,锁冲突概率最低、并发度最高

3 基础命令

3.1 查看当前系统中,每个表被锁与否:

SHOW OPEN TABLES;

技术分享图片

目前所有的 In_use 都是0,说明没有表被锁。 

3.2 给 Employee 表加上读锁:

LOCK TABLE employee READ;

3.3 给 Department 表加上写锁:

LOCK TABLE department WRITE;

或者,3.2 和 3.3 的命令写在一起,像这样:

LOCK TABLE employee READ, department WRITE;

3.4 再用 SHOW OPEN TABLES 来看看

SHOW OPEN TABLES;

技术分享图片

可以看到,Employee 及 Department 表已经被锁住(In_use=1)。

3.5 解锁:

UNLOCK TABLES;

 现在,所有表都没有被加锁。

3.6 查看系统上的表锁定信息

SHOW STATUS LIKE table%;

技术分享图片

这个【Table_locks_waited】值比较重要,值越大说明等待锁的次数越多、竞争越大。

3.7 查看当前数据库的隔离级别

SHOW VARIABLES LIKE tx_isolation;

技术分享图片

这是Mysql默认的隔离级别

3.8 InnoDB 引擎查看锁状态

SHOW STATUS LIKE %innodb_row_lock%;

技术分享图片

等待平均时长、等待总时长、等待总次数,这三项比较重要。

 

Mysql锁机制--概念、分类及基础命令

标签:png   时长   分类   show   通过   ola   size   blank   竞争   

原文地址:https://www.cnblogs.com/cyhbyw/p/8861363.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!