MySQL什么时候 锁表?如何防止锁表?

锁表会带来一系列问题,影响数据库的性能和系统的稳定性。

主要是下面的四个问题: 性能问题、死锁问题、可用性问题、一致性问题

1. 锁表带来的性能问题

锁表会阻止其他事务对该表的并发访问,包括读操作和写操作。

锁表会导致严重的性能问题:

  • 系统吞吐量下降:多个事务需要依次等待锁的释放,导致系统整体的吞吐量下降。
  • 用户体验差:用户的请求需要长时间等待,导致响应时间变长,影响用户体验。

2. 锁表引发死锁

在高并发环境下,锁表更容易导致死锁的发生。

锁表会导致严重的事务问题:

  • 事务回滚:部分事务被迫回滚,影响数据一致性。
  • 系统复杂性增加:需要数据库管理系统介入来检测和解决死锁问题,增加系统复杂性。

3. 锁表降低系统可用性

长时间的表锁定会影响数据库的可用性,使得应用程序无法及时处理用户请求。

锁表带来的系统可用性问题:

  • 功能不可用:系统的部分功能无法使用,影响用户的正常操作。
  • 业务中断:在严重情况下,可能导致整个系统不可用,影响业务连续性。

4. 锁表引发数据一致性问题

在高并发写操作场景下,锁表会导致数据一致性问题。

锁表带来的数据一致性问题:

  • 数据不一致:无法及时更新数据,影响业务逻辑的正确执行。
  • 状态混乱:例如,订单状态更新时,如果表被锁定,其他更新操作无法及时进行,可能会导致数据状态不一致。

 

mysql锁的分类

从操作的粒度可分为表级锁、行级锁和页级锁。

1.表级锁:

每次操作锁住整张表。锁定粒度大,发生锁冲突的概率最高,并发度最低。

注意: 表级锁应用在MyISAM、InnoDB、BDB 等存储引擎中。

表锁的特点:

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

2.行级锁:

每次操作锁住一行数据。锁定粒度最小,发生锁冲突的概率最低,并发度最高。

注意:行级锁应用在InnoDB 存储引擎中。MyISAM 没有行级锁

行锁的特点:

  • 开销大,加锁慢
  • 会出现死锁
  • 锁定粒度小,发生锁冲突的概率最低,并发度最高

3.页级锁:

每次锁定相邻的一组记录,锁定粒度界于表锁和行锁之间,加锁开销和加锁时间界于表锁和行锁之间,并发度一般。

注意:页级锁 应用在BDB 等存储引擎中。

页锁的特点:

  • 开销和加锁时间介于表锁和行锁之间
  • 会出现死锁
  • 锁定粒度介于表锁和行锁之间,并发度一般

MySQL 使用页级锁的情况相对较少,因为 MySQL 默认使用的是行级锁。

但在特定的情况下,MySQL 可能会使用页级锁,主要包括以下几种情况:

  1. 表级锁定转换为页级锁定: 当表级锁无法满足需求时,MySQL 可能会将表级锁转换为页级锁。这通常发生在使用 BDB 存储引擎时,因为 BDB 存储引擎默认使用表级锁。在某些情况下,MySQL 可能会将表级锁转换为页级锁,以提高并发性能。
  2. 隐式锁定大量行数据: 在某些情况下,如果一次性锁定了大量行数据,则 MySQL 可能会使用页级锁来减少锁的数量,从而减轻锁管理的负担。例如,在使用 BDB 存储引擎时,如果一次性锁定了大量行数据,则 MySQL 可能会将表级锁转换为页级锁。
  3. DDL 操作: 在执行对表结构进行修改的 DDL(数据定义语言)操作时,MySQL 可能会使用页级锁来锁定整个表。例如,当执行 ALTER TABLE 操作时,MySQL 可能会锁定整个表的页,以防止其他对表结构的修改和查询操作。

总的来说,MySQL 使用页级锁的情况相对较少,因为页级锁通常会导致锁的粒度过大,影响并发性能。在设计数据库和应用程序时,通常会尽量避免使用页级锁,而是优先使用行级锁或其他更细粒度的锁。

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

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

相关文章

一步将 CentOS 7.X 原地升级并迁移至 RHEL 7.9

《OpenShift / RHEL / DevSecOps 汇总目录》 在《在离线环境中将 CentOS 7.X 原地升级并迁移至 RHEL 7.9》一文中为了实现从 CentOS 7.X 原地升级并迁移至 RHEL 7.9,我们第一步先将一个测试环境 CentOS 7.5 升级到 CentOS 7.9,然后在第二步使用 convert2…

Golang gin框架中间件c.JSON返回结果后终止返回

gin框架中间件c.JSON返回结果后还是会继续执行之后的方法,我们可以用c.Abort()来终止后续的处理 func MiddlewareFunction(c *gin.Context) {// 假设有某种条件下需要返回错误if someCondition {c.JSON(http.StatusBadRequest, gin.H{"error": "som…

Java8lambda和Java8Stream

匿名函数 为了简化Java中的匿名内部类 事件监听 写一个类 实现ActionListener 接口(外部类) 内部类 Lambda 表达式是一个匿名函数,我们可以把 lambda 表达式理解为一段 可以传递的代码(将代码段像数据一样传递)。使…

机器学习实验------softmax回归

第1关:softmax回归原理 任务描述 本关任务:使用Python实现softmax函数。 #encoding=utf8 import numpy as npdef softmax(x):input:x(ndarray):输入数据,shape=(m,n)output:y(ndarray):经过softmax函数后的输出shape=(m,n)#********* Begin *********#x -= np.max(x, axis …

C++的模板(七):左值强制类型转换

C中有个特殊指针类型,就是指向数据成员的指针。这个数据成员的指针是可以提取出来的。如: class Whatever { public:int x;int z; };int Whatever::*mp; mp &Whatever::x;如果数据的访问权限是private,则这样不可以。但可以通过模板的办法挑出来&…

抖音运营_如何开抖店

截止20年8月,抖音的日活跃数高达6亿。 20年6月,上线抖店 (抖音官方电商) 一 抖店的定位和特色 1 一站式经营 帮助商家进行 商品交易、店铺管理、客户服务 等全链路的生意经营 2 多渠道拓展 抖音、今日头条、西瓜、抖音火山版…

科兴未来|2024年诸暨市海内外高层次人才创业大赛

为深入实施人才强市、创新强市首位战略,加快人才链、产业链、创新链深度融合,努力开创“诸才云集”生动局面,奋力打造新时代共同富裕新高地,高水平谱写社会主义现代化建设诸暨篇章,推动诸暨实现高水平建设,构建全新人才创业创新生态体系,助力人才流入诸暨…

【Python】用于发送电子邮件的标准库smtplib和构建邮件主体、添加附件、设置收件人的email

欢迎来到《小5讲堂》 这是《Python》系列文章,每篇文章将以博主理解的角度展开讲解。 温馨提示:博主能力有限,理解水平有限,若有不对之处望指正! 目录 插件介绍邮件代码扩展知识点文章推荐 插件介绍 smtplib 是 Pytho…

海外媒体发稿的关键步骤和投稿策略:如何撰写高质量的新闻稿?国外软文发布平台有哪些?

发布国外新闻稿件是一个涉及多步骤的过程,旨在确保您的新闻稿能够有效覆盖目标受众。以下是一些关键步骤和实用的技巧,帮助你实现海外媒体发稿。 1. 明确目标和受众 首先,明确您发布新闻稿的目标,是为了增加品牌曝光、推出新产品…

惊呆了!企业数字化转型竟如工厂生产?

在众多使用蚓链数字化生态系统解决方案实现数字化转型的企业,你能想象吗?如今的企业数字化转型,就如同一家工厂的生产过程!数据成为了原材料,而数据资源则是场景化的零件,最终生产出满足市场需求的数据产品…

基于Kafka的日志采集

目录 前言 架构图 资源列表 基础环境 关闭防护墙 关闭内核安全机制 修改主机名 添加hosts映射 一、部署elasticsearch 修改limit限制 部署elasticsearch 修改配置文件 启动 二、部署filebeat 部署filebeat 添加配置文件 启动 三、部署kibana 部署kibana 修…

2024-5-24

今日安排: 继续审计 nf_tables 源码 && iptables 相关学习♥♥♥♥♥复现 CTF 相关题目♥♥♥♥学习 winpwn♥♥♥♥mount 的使用,学习 namespace (昨昨昨昨昨昨昨昨昨昨昨昨昨昨天残留的任务)(:看我能搁到什么时候♥♥♥…

21-信号集处理函数

屏蔽信号集 屏蔽某些信号 手动自动 未处理信号集 信号如果被屏蔽,则记录在未处理信号集中 非实时信号(1~31),不排队,只留一个实时信号(34~64),排队,保留全部 信号集…

springmvc中HandlerMapping是干什么用的

HandlerMapping处理器映射器 作用是根据request找到相应的处理器Handler和Interceptors,然后封装成HandlerExecutionChain对象返回 HandlerExecutionChain getHandler(HttpServletRequest request) throws Exception; 实现类 HandlerMapping帮助DispatcherServlet进…

【大数据面试题】30 Kafka如何保证数据可靠性

一步一个脚印,一天一道面试题。 数据可靠性一直是各个技术都需要的一个特性。不能在使用过程中数据被错误消费,多消费少消费,或者直接漏了数据。那就来看看热门消息队列 Kafka 在数据可靠性方面做了些什么。 Acknowledgment(ACK&…

【AD21】BOM表文件的输出

BOM表文件通常发给采购,采购可以购买BOM表中所需的元器件。 在菜单栏中点击报告->Bill of Materials。 在以下界面,点击Columns,对输出的BOM表中一些说明进行不显示,可以不显示Description和LibRef。值,位号&#…

文心智能体【焦虑粉碎机】——帮你赶走“坏”情绪

目录: 引言1.登录 文心智能体平台2.创建智能体3.配置智能体🌷 头像设置🌷 名称设置🌷 简介设置🌷指令设置🌷 开场白设置🌷 引导示例设置 4.使用智能体 引言 随着ChatGPT的爆火,人工智…

【Python】 掌握 Flask 请求数据获取的艺术

基本原理 在Web开发中,Flask是一个用Python编写的轻量级Web应用框架。它被广泛用于快速开发简单的Web应用。当用户通过浏览器或其他客户端向服务器发送请求时,Flask需要能够接收和解析这些请求中的数据。这些数据可以是GET请求的查询字符串、POST请求的…

【3GPP核心网】【4G】LTE中S1-MME流程字段分析(四)

1. 欢迎大家订阅和关注,精讲3GPP通信协议(2G/3G/4G/5G/IMS)知识点,专栏会持续更新中.....敬请期待! 承接上文 目录 15. S1 切入(23.401 5.5.2) 15.1 UTRAN Iu to E-UTRAN 15.2 GERAN Gb to E-UTRAN 16. S1切出(23.401 5.5.2) 16.1 E-UTRAN to UTRAN Iu 16.2 E-UTRAN…

Python列表推导式的实用指南

Python列表推导式的实用指南 一、引言 在Python编程中,列表推导式(List Comprehension)是一种简洁而强大的构造列表的方式。它允许我们在一行代码中,通过循环和条件语句快速生成列表。列表推导式不仅提高了代码的可读性和可维护…