阿里P8架构师谈:MySQL行锁、表锁、悲观锁、乐观锁的特点与应用

我们在操作数据库的时候,可能会由于并发问题而引起的数据的不一致性(数据冲突)。如何保证数据并发访问的一致性、有效性,是所有数据库必须解决的一个问题,锁的冲突也是影响数据库并发访问性能的一个重要因素,从这一角度来说,锁对于数据库而言就显得尤为重要。

MySQL锁概述

相对其他数据库而言,MySQL的锁机制比较简单,其最显著的特点是不同的存储引擎支持不同的锁机制。

比如:

  1. MyISAM和MEMORY存储引擎采用的是表级锁(table-level locking);
  2. InnoDB存储引擎既支持行级锁( row-level locking),也支持表级锁,但默认情况下是采用行级锁。

MySQL主要的两种锁的特性可大致归纳如下:

阿里P8架构师谈:MySQL行锁、表锁、悲观锁、乐观锁的特点与应用
  • 表级锁: 开销小,加锁快;不会出现死锁(因为MyISAM会一次性获得SQL所需的全部锁);锁定粒度大,发生锁冲突的概率最高,并发度最低。
  • 行级锁: 开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。
  • 页锁:开销和加锁速度介于表锁和行锁之间;会出现死锁;锁定粒度介于表锁和行锁之间,并发度一般

行锁 和 表锁

1.主要是针对锁粒度划分的,一般分为:行锁、表锁、库锁

(1)行锁:访问数据库的时候,锁定整个行数据,防止并发错误。

(2)表锁:访问数据库的时候,锁定整个表数据,防止并发错误。

2.行锁 和 表锁 的区别:

  • 表锁: 开销小,加锁快,不会出现死锁;锁定力度大,发生锁冲突概率高,并发度最低
  • 行锁: 开销大,加锁慢,会出现死锁;锁定粒度小,发生锁冲突的概率低,并发度高

悲观锁 和 乐观锁

(1)悲观锁:顾名思义,就是很悲观,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁。

传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。

(2)乐观锁: 顾名思义,就是很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号等机制。

乐观锁适用于多读的应用类型,这样可以提高吞吐量,像数据库如果提供类似于write_condition机制的其实都是提供的乐观锁。

(3)悲观锁 和 乐观锁的区别:

两种锁各有优缺点,不可认为一种好于另一种,像乐观锁适用于写比较少的情况下,即冲突真的很少发生的时候,这样可以省去了锁的开销,加大了系统的整个吞吐量。但如果经常产生冲突,上层应用会不断的进行retry,这样反倒是降低了性能,所以这种情况下用悲观锁就比较合适

共享锁

共享锁指的就是对于多个不同的事务,对同一个资源共享同一个锁。相当于对于同一把门,它拥有多个钥匙一样。就像这样,你家有一个大门,大门的钥匙有好几把,你有一把,你女朋友有一把,你们都可能通过这把钥匙进入你们家,这个就是所谓的共享锁。

刚刚说了,对于悲观锁,一般数据库已经实现了,共享锁也属于悲观锁的一种,那么共享锁在mysql中是通过什么命令来调用呢。通过查询资料,了解到通过在执行语句后面加上lock in share mode就代表对某些资源加上共享锁了。

什么时候使用表锁

对于InnoDB表,在绝大部分情况下都应该使用行级锁,因为事务和行锁往往是我们之所以选择InnoDB表的理由。但在个别特殊事务中,也可以考虑使用表级锁。

  • 第一种情况是:事务需要更新大部分或全部数据,表又比较大,如果使用默认的行锁,不仅这个事务执行效率低,而且可能造成其他事务长时间锁等待和锁冲突,这种情况下可以考虑使用表锁来提高该事务的执行速度。
  • 第二种情况是:事务涉及多个表,比较复杂,很可能引起死锁,造成大量事务回滚。这种情况也可以考虑一次性锁定事务涉及的表,从而避免死锁、减少数据库因事务回滚带来的开销。

当然,应用中这两种事务不能太多,否则,就应该考虑使用MyISAM表了。

表锁和行锁应用场景:

  • 表级锁使用与并发性不高,以查询为主,少量更新的应用,比如小型的web应用;
  • 行级锁适用于高并发环境下,对事务完整性要求较高的系统,如在线事务处理系统。

money.jpg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/480643.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

谷歌、微软、OpenAI等巨头七大机器学习开源项目 看这篇就够了

在人工智能行业,2015-2016 出现了一个不同寻常的趋势:许多重量级机器学习项目纷纷走向开源,与全世界的开发者共享。加入这开源大潮的,不仅有学界师生,更有国内外的互联网巨头们:国内有百度和腾讯&#xff0…

推荐系统的发展与简单回顾

“本文结合百度和支付宝两段推荐系统相关的实习经历,针对工业界的模型发展做了简单梳理与回顾,涵盖表示学习,深度学习,强化学习知识图谱以及多任务学习”表示学习和深度学习在推荐系统中的应用是目前工业界比较成熟的,但是与强化学…

论文浅尝 | 嵌入常识知识的注意力 LSTM 模型用于特定目标的基于侧面的情感分析...

MaY, Peng H, Cambria E. Targeted aspect-based sentiment analysis via embedding commonsense knowledge into an attentive LSTM[C]//AAAI. 2018.任务简介特定目标的基于侧面的情感分析,在原来基于侧面的情感分析的基础上,进一步挖掘细粒度的信息&am…

阿里P8架构师谈:MySQL有哪些存储引擎,各自的优缺点,应用场景

经常面试都会问到MYSQL有哪些存储引擎,以及各自的优缺点。今天主要分享常见的存储引擎:MyISAM、InnoDB、MERGE、MEMORY(HEAP)、BDB(BerkeleyDB)等,以及最常用的MyISAM与InnoDB两个引擎 &#xf…

TensorFlow 全网最全学习资料汇总之TensorFlow的技术应用

谷歌于2015年11月发布了全新人工智能系统TensorFlow。该系统可被用于语音识别或照片识别等多项机器深度学习领域,主要针对2011年开发的深度学习基础架构DistBelief进行了各方面的改进,它可在小到一部智能手机、大到数千台数据中心服务器的各种设备上运行…

13个offer,8家SSP,谈谈我的秋招经验

本文转载自公众号“夕小瑶的卖萌屋”,专业带逛互联网算法圈的神操作 -----》我是传送门 关注后,回复以下口令: 回复【789】 :领取深度学习全栈手册(含NLP、CV海量综述、必刷论文解读) 回复【入群】&#xf…

领域应用 | 知识图谱的技术与应用

本文转载自公众号:贪心科技。作者 | 李文哲,人工智能、知识图谱领域专家导读:从一开始的Google搜索,到现在的聊天机器人、大数据风控、证券投资、智能医疗、自适应教育、推荐系统,无一不跟知识图谱相关。它在技术领域的…

阿里P8架构师谈:MySQL慢查询优化、索引优化、以及表等优化总结

MySQL优化概述 MySQL数据库常见的两个瓶颈是:CPU和I/O的瓶颈。 CPU在饱和的时候一般发生在数据装入内存或从磁盘上读取数据时候。 磁盘I/O瓶颈发生在装入数据远大于内存容量的时候,如果应用分布在网络上,那么查询量相当大的时候那么平瓶颈就…

医药领域知识图谱快速及医药问答项目

QABasedOnMedicaKnowledgeGraph self-implement of disease centered Medical graph from zero to full and sever as question answering base. 从无到有搭建一个以疾病为中心的一定规模医药领域知识图谱,并以该知识图谱完成自动问答与分析服务。 项目介绍 本项…

一文详解深度学习在命名实体识别(NER)中的应用

近几年来,基于神经网络的深度学习方法在计算机视觉、语音识别等领域取得了巨大成功,另外在自然语言处理领域也取得了不少进展。在NLP的关键性基础任务—命名实体识别(Named Entity Recognition,NER)的研究中&#xff0…

如何做机器学习项目规划?一个事半功倍的checklist

一只小狐狸带你解锁 炼丹术&NLP 秘籍前言在接到一个新项目的时候,对其进行合理的安排和规划往往会有事半功倍的效果。下面是从规划30 多个机器学习项目的经验中,提炼出的一个简单有效的checklist。一起来看看叭~项目动机明确你的项目的更广泛的意义。…

论文浅尝 | 一种用于新闻推荐的深度知识感知网络

Citation: Wang H, Zhang F, Xie X, et al. DKN: Deep Knowledge-Aware Networkfor News Recommendation[J]. 2018.Published at: The 27th International Conference on World Wide Web (WWW18)URL:https://arxiv.org/pdf/1801.08284.pdfMotivation推荐系统最初是为…

MySQL数据库主从同步的3种一致性方案实现,及优劣比较

数据主从同步的由来 互联网的很多业务,特别是在高并发的场景下,基本都是读远远大于写,如果数据库读和写的压力都同在一台主机上,这显然不太合理。 于是,把一台数据库主机分为单独的一台写主库(主要负责写操…

中文复合(条件事件、因果事件、顺承事件、反转事件)事理图谱构建项目

ComplexEventExtraction chinese compound event extraction,中文复合事件抽取,包括条件事件、因果事件、顺承事件、反转事件等事件抽取,并形成事理图谱。 项目地址:https://github.com/liuhuanyong/ComplexEventExtraction 关于…

对话系统的简单综述及应用智能客服

https://zhuanlan.zhihu.com/p/52899436 对话系统的简单综述及应用智能客服“天猫精灵,放歌”,”送你一首好听的歌《XXX》“,《XXX》音乐响起...相信有天猫精灵的用户对此场景都不陌生,或者语音操作其他智能音箱设备,比…

硬核推导Google AdaFactor:一个省显存的宝藏优化器

一只小狐狸带你解锁炼丹术&NLP秘籍作者:苏剑林(来自追一科技,人称“苏神”)前言自从GPT、BERT等预训练模型流行起来后,其中一个明显的趋势是模型越做越大,因为更大的模型配合更充分的预训练通常能更有效…

领域应用 | 用知识图谱玩唐诗,“唐诗别苑”附庸端午节的别样风雅!

本文转载自公众号:互联网教育国家工程实验室 。 端午节在每年的农历五月初五,又称端阳节、午日节、五月节等。端午节起源于中国,是古代百越一带崇拜龙图腾的部族举行图腾祭祀的节日。五月初五也是缅…

参加完阿里蚂蚁金服Java中间件6轮面试题!6点血泪总结~

蚂蚁金服一面:分布式架构 50分钟 1、个人介绍加项目介绍20分钟 2、微服务架构是什么,它的优缺点? 3、ACID CAP BASE理论 4、分布式一致性协议,二段、三段、TCC,优缺点 5、RPC过程 6、服务注册中心宕机了怎么办&am…

特定热点事件监控与分析项目

EventMonitor Event monitor based on online news corpus built by Baidu search enginee using event keyword for event storyline and analysis,基于给定事件关键词,采集事件资讯,对事件进行挖掘和分析。 项目地址:https://g…

深度好文:2018 年 NLP 应用和商业化调查报告

、 深度好文:2018 年 NLP 应用和商业化调查报告 Debra 阅读数:7650 2019 年 1 月 11 日近年来,自然语言处理技术已经取得了长足进步,成为应用范围最广泛,也是最为成熟的 AI 技术之一。但实际上,自然语言处理…