对数据操作的类型:

读锁(共享锁)—— 同一数据,多个读操作可以同时进行

写锁(排他锁)—— 写操作未完成前,会阻断其他读锁和写锁

对数据操作的粒度:

表锁(偏读)—— 偏向MyISAM存储引擎,开销小,加锁快,无死锁,锁定粒度大,发生锁冲突的概率最高,并发度最低。

行锁(偏写)—— 偏向InnoDB存储引擎,开销大,加锁慢,会出现死锁,锁定粒度小,发生锁冲突的概率最低,并发度也最高。

一、表锁操作

MyISAM引擎用表锁较多(偏读)

1、表锁语句

(1)加锁:假如给表mylock加读锁,表book加写锁

locktable mylock read,book write;

(2)查看加锁的表,In_use=1表示加了锁

showopentables;

(3)查看Mysql内部表级锁定情况

show statuslike 'table%';

table_locks_immediate:产生表锁的次数

table_locks_waited:出现表锁争用而发生等待的次数(每等待一次+1),值高说明争用表锁严重

(4)解所有锁

unlock tables;

2、在MyISAM引擎下,表锁冲突演示

【情景1】:在session1为表1加读锁

session1              session2

能读表1                能读表1

不能读其他未锁表,要先释放表1锁        能读或写其他未锁表

不能写表1,报错            写表1会阻塞

【情景2】:在session1为表1加写锁

session1                session2

能读表1                读表1会阻塞

不能读其他未锁表,要先释放表1锁        能读或写其他未锁表

能写表1                写表1会阻塞

结论:读锁会阻塞写,但不阻塞读。写锁会阻塞读写。

MyISAM在select前,会自动给涉及的所有表加读锁,在执行增删改操作前,会自动给涉及表加写锁。

MyISAM的读写锁调度写优先,大量更新会使查询很难得到锁,因此不适合做写为主的引擎。

二、行锁操作

InnoDB与MyISAM的最大不同有两点:一是支持事务,二是采用了行级锁

1、并发问题:

(1)更新丢失 —— 由于事务间不知道其他事务的存在,会发生覆盖其他事务更新的情况,如果在一个程序员完成并提交事务前,另一个程序员不能访问同一文件,则可避免此问题。

(2)脏读 —— 事务A读取到了事务B已修改但未提交的数据,如果B回滚,A读的数据无效。

(3)不可重复读 —— 某事务两次读取的数据不一致。

(4)幻读 —— 事务A读取到事务B提交的新增数据。

隔离级别:

2、在Innodb引擎下,行锁冲突演示,Innodb默认是行锁

【情景1】

session1                session2

set autocommit=0;         set autocommit=0;

更新但不提交,未commit       更新同一行时会阻塞,更新不同行不会阻塞

提交                  解除阻塞,提交

3、索引失效行锁变表锁

若session1执行的写操作造成索引失效,会从行锁变为表锁,其他session对表写会阻塞

4、间隙锁带来的插入问题

用范围条件而不是相等条件检索数据,并请求共享或排他锁时,InnoDB会锁定整个范围内所有的索引键值,即使这个键值不存在,而锁定范围时无法在锁定键值范围内插入数据,某些场景下可能存在危害。

5、如何锁定一行

begin;select * from 表 where 条件 for update;commit;

#通过for update锁定某行后,其他的操作会被阻塞,直到锁定行的会话提交commit

6、查看行锁信息:

show status like 'innodb_row_lock%';

#Innodb_row_lock_current_waits:当前正在等待锁定的数量

#Innodb_row_lock_time:从系统启动到现在锁定总时间长度

#Innodb_row_lock_time_avg:每次等待所花平均时间

#Innodb_row_lock_time_max:从系统启动到现在等待最长的一次所花的时间

#Innodb_row_lock_waits:系统启动后到现在总共等待的次数

7、结论

Innodb存储引擎由于实现了行级锁定,虽然在锁定机制的实现方面所带来的性能损耗可能比表锁更高一些,但在整体并发处理能力方面远远优于MyISAM的表锁,当系统并发量较高时,Innodb明显优于MyISAM。

优化建议:尽可能让所有数据检索都通过索引来完成,避免无索引行锁升级为表锁。

*页锁:开销和加锁时间界于表锁和行锁之间,会出现死锁,锁粒度界于表锁和行锁之间,并发度一般。

mysql加锁6_MySQL优化(6):Mysql锁机制相关推荐

  1. mysql不可重复读是锁的表吗,Mysql事务,并发问题,锁机制-- 幻读、不可重复读(转)...

    . 例如: 张三的工资为5000,事务A中获取工资为5000,事务B获取工资为5000,汇入100,并提交数据库,工资变为5100, 随后 事务A发生异常,回滚了,恢复张三的工资为5000,这样就导致 ...

  2. MySQL优化篇:锁机制

    文章目录 1.概述 1.1 定义 1.2 分类 2.表锁(偏向于读操作) 2.1 特点 2.2 案例分析 2.3 案例结论 2.4 表锁分析 3.行锁(偏向于写操作) 3.1 特点 3.2 案例分析 ...

  3. Mysql事务,并发问题,锁机制-- 幻读、不可重复读--专题

    1.什么是事务 事务是一条或多条数据库操作语句的组合,具备ACID,4个特点. 原子性:要不全部成功,要不全部撤销 隔离性:事务之间相互独立,互不干扰 一致性:数据库正确地改变状态后,数据库的一致性约 ...

  4. 带你了解什么是MySQL数据库(八)数据库锁机制

    目录 数据库的锁机制 锁的分类 MySQL中的行级锁,表级锁,页级锁(粒度) 行级锁之共享锁与排他锁(级别) innodb存储引擎的锁机制 行级锁与表级锁区分 三种行锁算法 死锁问题 什么时候使用表锁 ...

  5. mysql holdlock_mysql事务隔离界别与锁机制

    数据库锁 共享锁(Shared lock) 例1: ---------------------------------------- T1: select * from table (请想象它需要执行 ...

  6. MySQL事务原理之MVCC和锁机制

    MVCC和锁 一.MVCC 1.1.read view 1.2.聚集索引的隐藏列 1.3.事务的可见性问题 1.5.快照读 1.6.当前读 二.redolog 三.undolog 四.锁 机制 4.1 ...

  7. MySQL存储引擎,索引,锁机制

    一,MySQL存储引擎 介绍: MySQL数据库使用不同的机制存取表文件,包括存储方式,索引技巧,锁定水平等不同的功能,这些不同的技术以及配套的功能称为索引引擎 Oracle,Sqlserver等数据 ...

  8. mysql innodb 并发 插入 慢_Innodb 锁机制——一次插入慢查询的排查

    慢查询日志中,发下有一条插入语句慢查询出现的概率比较高,一个简单插入需要消耗4-10s,很不寻常.附上插入语句,省略了一些字段 INSERT INTO `fc_pay_out_trade_log` ( ...

  9. MYSQL事务和INNODB下的锁机制

    文章目录 一 什么是事务 二 事务四大特性 原子性 一致性 隔离性 持久性 三 事务四大隔离级别 Read Uncommited(读未提交) Read Commited(读已提交) Repetable ...

最新文章

  1. minhash算法检索相似文本_文本去重算法:Minhash/Simhash/Klongsent
  2. DELPHI纤程的演示
  3. ARP欺骗原理与模拟
  4. python123第九周测验答案2020_运用python123平台助力编程课教学
  5. tf.nn.embedding_lookup函数的用法
  6. npm包全局安装和局部安装,执行包命令有什么不同?
  7. esxi管理端口_网工知识角|一分钟轻松了解华为端口安全机制
  8. 【LeetCode】【HOT】105. 从前序与中序遍历序列构造二叉树(哈希表+递归)
  9. k8s安装读取内核modules_kubespray国内云平台一键部署k8s
  10. 无外网情况下RPM方式安装MySQL5.6
  11. 深度学习技术干货免费听,AirPods2任性抽...520有场AI峰会不可错过!
  12. html之meta标签
  13. CSS BACKGROUND汇总
  14. php连接mysql数据没反应_php无法连接mysql数据库的正确解决方法
  15. Java常用关键字查询
  16. 【推荐】两大APP与云账户红包SDK集成详情及Demon分享v
  17. html大作业网页代码 ——2019凡客服装店铺商城(1页) HTML+CSS+JavaScript HTML+CSS大作业_ 服装店铺网页制作作业_购物网页设计...
  18. 第一届华数杯A题思路分析
  19. 为ubuntu装好搜狗拼音法
  20. 浅谈2017棋牌游戏的前景 运营 推广(下) 转贴

热门文章

  1. python爬取qq音乐评论_爬虫:QQ音乐评论
  2. 安师大计算机安全网络,计信学院成功举行网络与信息安全安徽省重点实验室2020年度学术年会...
  3. 易错丨Oracle 每日一题系列合集
  4. 数据库服务器主机重启故障诊断分析
  5. 数据库连接池配置(案例及排查指南)
  6. 实战演练丨Oracle死锁案例分析,看完你就懂了
  7. GaussDB(DWS)应用实践丨负载管理与作业排队处理方法
  8. 一文带你读懂!华为云在ACMUG技术沙龙上都透露了些啥?
  9. 【华为云技术分享】人脸识别算法的训练之路(下)
  10. Spring AOP看这个就够了