怎么减少行锁对性能的影响

简介: 怎么减少行锁对性能的影响

怎么减少行锁对性能的影响



MySQL 的行锁是引擎层由引擎实现的,并不是所有的引擎都支持行锁,比如 MyISAM 引擎不支持行锁。


MyISAM 引擎特点


MySQL 5.7 MyISAM存储引擎的版本特性:


640.png

InnoDB 存储引擎


MySQL 5.7 InnoDB存储引擎的版本特性:


640.png


行锁针对的是数据表中的行记录的锁,比如事务 A 更新一行,这时候事务B 也要更新一行,则必须等事务 A 的操作完成后才能进行更新。


事务A 事务B
begin; updatate t set k=k+1 where id =1;update t set k=k+1 where id= 1
begin; update t set k = k+2 where id =1;
commit;


事务A 持有两个记录的行锁,在 commit 的时候释放,在 InnoDB 事务中,行锁 是在需要的时候才加上,而是要等待事务结束时才释放。

如果服务器 CPU 消耗接近 100% ,但整个数据库每秒执行不到100个事务,那很有可能就出现死锁了。


死锁和死锁检测


死锁的4个必要条件

  • 互斥条件
  • 请求保持条件
  • 循环等待
  • 不可剥夺


事务A 事务B
begin;update t set k=k+1 where id =1; begin;
update t set k=k+1 where id=2;
update t set k=k+1 where id =2;
update t set k=k+1 where id =1;


事务 A 在等待事务 B 释放 id =2 ,在事务 B 在等待事务 A 释放 id =1的行锁。事务A 事务B循环等待资源释放,满足循环等待,互斥,不可剥夺,请求保持等条件。


如何解决数据库死锁?


有两种策略可解决死锁:

  • 一种策略,是直接进入等待,知道超时,超时时间可通过参数 innodb_lock_wait_timeout 来设置。
  • 发起死锁检测,主动回滚死锁联调中的某一个事务,其他事务继续执行。将参数 innodb_deadlock_detect 设置为 on 标识开启这个逻辑。


怎么解决热点更新导致的性能问题?


  • 死锁检测要耗费大量的 CPU 资源,如果确定业务一定不会出现死锁,可以临时把死锁检测关掉。
  • 另外一个是思路是控制并发度,如果并发能够给控制住,同一行同时最多有 10个线程在更新,那么死锁检测的成本很低。


布隆过滤器可以一定程度上解决缓存穿透的问题,解决缓存穿透的问题核心是减少数据库的并发访问。由于 hash 碰撞的原因,布隆过滤器存在一定的误判几率,也存在不支持删除元素的问题。

相关文章
|
存储 分布式计算 监控
应用层---网络模型
应用层---网络模型
248 3
|
弹性计算 分布式计算 监控
ECS飘移问题之飘移无法实现如何解决
ECS(Elastic Compute Service,弹性计算服务)是云计算服务提供商提供的一种基础云服务,允许用户在云端获取和配置虚拟服务器。以下是ECS服务使用中的一些常见问题及其解答的合集:
|
存储 安全 Java
如何确保 CSRF 令牌的安全性
CSRF 令牌是保护网站免受跨站请求伪造攻击的重要机制。为确保其安全性,需采取措施如:使用Https协议、设置HttpOnly和Secure标志、采用同源策略、定期更新令牌等。
|
Java 程序员 Spring
“解密Java文本读取:File与MultipartFile“
“解密Java文本读取:File与MultipartFile“
419 0
|
开发框架 前端开发 JavaScript
React、Vue.js 和 Angular主流前端框架和选择指南
在当今的前端开发领域,选择合适的框架对于项目的成功至关重要。本文将介绍几个主流的前端框架——React、Vue.js 和 Angular,探讨它们各自的特点、开发场景、优缺点,并提供选择框架的建议。
341 6
|
存储 搜索推荐 安全
【重要】django默认生成的表的意思记录
【重要】django默认生成的表的意思记录
120 0
|
程序员 C语言 C++
C语言中的goto语句:使用、争议与最佳实践
C语言中的goto语句:使用、争议与最佳实践
1206 1
|
Kubernetes 关系型数据库 API
Zalando Postgres Operator 快速上手
Zalando Postgres Operator 快速上手
720 0
|
消息中间件 存储 Kafka
深入Kafka:如何保证数据一致性与可靠性?
**Kafka一致性详解:** 讲解了幂等性如何通过ProducerID和SequenceNumber确保消息唯一,防止重复处理,维持数据一致性。Kafka利用Zookeeper进行控制器和分区Leader选举,应对节点变动,防止脑裂,确保高可用性。实例中,电商平台用Kafka处理订单,保证每个订单仅处理一次,即使在异常情况下。关注微信公众号“软件求生”获取更多技术内容。
1947 0
|
JavaScript 安全 前端开发
Vue 项目中的权限管理:让页面也学会说“你无权访问!
Vue 项目中的权限管理:让页面也学会说“你无权访问!
424 3