Mysql篇之锁

什么时候会触发表锁和行锁

表锁(Table Lock)

表锁通常在以下情况下触发:

  1. 全表操作:如 ALTER TABLEDROP TABLE 等涉及整个表的操作。
  2. 显式加锁:使用 LOCK TABLES 语句显式锁定表。
  3. 低并发需求:在并发要求不高的场景下,数据库可能自动使用表锁。

行锁(Row Lock)

行锁通常在以下情况下触发:

  1. 单行操作:如 UPDATEDELETESELECT ... FOR UPDATE 等针对特定行的操作。
  2. 高并发需求:在高并发场景下,数据库通常使用行锁以提高并发性能。
  3. 索引查询:通过索引查询时,数据库可能只锁定相关行。

死锁处理

死锁原因

死锁通常发生在多个事务互相等待对方释放锁时,例如:

  • 事务A锁定行1,请求行2。
  • 事务B锁定行2,请求行1。

死锁处理策略

  1. 超时机制

    • 设置事务超时时间,超时后自动回滚并释放锁。
    • 例如,MySQL 通过 innodb_lock_wait_timeout 参数设置超时时间。
  2. 死锁检测

    • 数据库自动检测死锁并回滚其中一个事务。
    • 例如,InnoDB 引擎会自动检测并处理死锁。
  3. 重试机制

    • 在应用程序中实现重试逻辑,当事务因死锁回滚后,自动重试。
  4. 锁顺序

    • 确保所有事务按相同顺序获取锁,减少死锁概率。
  5. 减少事务粒度

    • 将大事务拆分为多个小事务,减少锁竞争。

保证数据不丢失且不影响项目进行

  1. 事务设计

    • 确保事务简短,减少锁持有时间。
    • 避免在事务中进行长时间操作。
  2. 备份与恢复

    • 定期备份数据,确保死锁回滚后能快速恢复。
  3. 监控与报警

    • 实时监控数据库状态,及时发现和处理死锁。
    • 设置报警机制,快速响应死锁问题。
  4. 优化查询

    • 使用索引优化查询,减少锁竞争。
    • 避免全表扫描,降低锁冲突概率。
  5. 隔离级别

    • 根据需求选择合适的隔离级别,平衡一致性和并发性。

总结

  • 表锁:全表操作或低并发时触发。
  • 行锁:单行操作或高并发时触发。
  • 死锁处理:通过超时、检测、重试、锁顺序和事务拆分等策略,确保数据不丢失且项目正常运行。

通过这些措施,可以有效减少死锁发生,并在死锁发生时快速恢复,保证系统稳定性和数据完整性。

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

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

相关文章

GO指南之练习答案

GO指南之练习答案 Go指南 练习:循环与函数 为了练习函数与循环,我们来实现一个平方根函数:给定一个数 x,我们需要找到一个数 z 使得 z 尽可能地接近 x。 计算机通常使用循环来计算 x 的平方根。从某个猜测的值 z 开始,我们可以根据 z 与 x 的近似度来改进 z,产生一个更好…

第三轮easy~hard题目

题目1代码 #include<iostream> #include<queue> #include<string> using namespace std; int main() {priority_queue<int> s;string str;int a;str="0";while(str!="end"){cin>>str;if(str=="insert"){cin>&g…

通过Ollama本地部署DeepSeek R1以及简单使用

本文介绍了在Windows环境下,通过Ollama来本地部署DeepSeek R1。该问包含了Ollama的下载、安装、安装目录迁移、大模型存储位置修改、下载DeepSeek以及通过Web UI来对话等相关内容。1、下载Ollama 首先我们到Ollama官网去下载安装包,此处我们下载的是Windows版本的安装包,如下…

git删除gitee上传大文件转载

前言:在提交推送本地更改至仓库时,误将大文件给提交了,导致push时报错文件过大,因此需要将已经commit的大文件移除后再push 若已知要删除的文件或文件夹路径,则可以从第4步开始 1.对仓库进行gc操作 $ git gc 2.查询大文件 git verify-pack -v .git/objects/pack/pack-*.id…

Axure RP 9.0 软件安装、汉化

‌Axure RP9是一款专业的原型设计工具,主要用于快速创建交互式的高保真原型,帮助设计师和产品经理进行用户体验设计和界面设计‌。‌ 主要功能和应用场景‌原型设计‌:Axure RP9提供了丰富的交互组件和功能,如可交互的按钮、链接、表单元素等,用户可以模拟真实的应用程序或…

第八节 BERT实战

做下游分类任务,如何处理一句话的输入input_dis:输入哪些字 21128个汉字里编码 mask:输入的话有多长. 模型输入固定,不够的话用padding补上 Seq_ids:句子编码 segmentBERT输入token embedding 字编码(21128, 768) segment embedding 句子编码(2, 768) position embedding不用给…

linux X64函数参数传递过程研究

linux X64函数参数传递过程研究 - ZhaoKevin - 博客园 基础知识 函数传参存在两种方式,一种是通过栈,一种是通过寄存器。对于x64体系结构,如果函数参数不大于6个时,使用寄存器传参,对于函数参数大于6个的函数,前六个参数使用寄存器传递,后面的使用栈传递。参数传递的规律…

使用systemback封装Ubuntu系统iso镜像

25年小橘祝亲们钱财发发发,好运来来来。小橘初八就已经开工了,不知道家人们是不是也像小橘一样苦哈哈。今天给亲们分享使用systemback封装Ubuntu系统iso镜像。 一、环境部署 1.安装systembackecho "deb [arch=amd64] http://mirrors.bwbot.org/ stable main" > …

免费+数据安全!手把手教你在PC跑DeepSeek-R1大模型,小白也能秒变AI大神!

0 为啥本地部署? 在本地运行 AI 模型具有以下优势:隐私:你的数据保留在你的机器上 — — 不存在共享敏感信息的风险 成本: DeepSeek R1 可免费使用,无需订阅费或使用费 控制:无需外部依赖即可进行微调和实验1 使用Ollama 1.1 下载并运行应用程序 直达官网:1.2 选择你的平…

mkv和ass字幕文件合并

主要使用两种工具:ffmpeg和mkvmerge 操作系统:windows10及以上 ffmpeg下载:https://github.com/BtbN/FFmpeg-Builds/releases/download/latest/ffmpeg-master-latest-win64-gpl-shared.zip mkvmerge下载:https://mkvtoolnix.download/windows/releases/89.0/mkvtoolnix-64-…

【日记】我已经穿越了那层屏障(1903 字)

正文每次节后都知道,能说 “节后再说” 这句话当时有多爽(笑。现在节后有好多好多事情要做——年后再说的事,袭来!昨天是收假之后第一天,开了个会,我没去。结果他们下来都一幅晴天霹雳的样子,我十分诧异。结果一问,基本上全部的人都要轮岗了。我三月份又要跑去业务线,…

洛谷题单指南-线段树的进阶用法-P5445 [APIO2019] 路灯

原题链接:https://www.luogu.com.cn/problem/P5445 题意解读:给定一个长度为n的01串,一共有q个时刻,对于每个时刻,可能有两种操作:1. 把第x个位置取反 2. 查询a ~ b - 1之间的串在过去有多少个时刻都为1。 解题思路: 一、朴素想法 每个时刻对路灯的状态建立线段树,可以…