案例3:锁优化 | 学习笔记

简介: 简介:快速学习案例3:锁优化

开发者学堂课程【云数据库优化十大典型案例:案例3:锁优化 】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/597/detail/8568


案例3:锁优化

内容简介

一.表级锁

二.Metadata lock

三.锁问题最佳实践


一.表级锁

Innodb与Myisam

引擎

支持事务

并发

索引损坏

锁级别

在线备份

Myisam

不支持

查询堵塞更新

索引损坏

不支持

Innodb

支持

不堵塞

不损坏

支持

CREATE TABLE `t_myisam`(

`id`int(11) DEFAULT NULL

)ENGINE=MyISAM DEFAULT CHARSET=utf8;

查询堵塞更新

Query|111|User sleep              |select id,sleep(100)from t_myisam  |

Query|108|Waiting for table level lock | update t_myisam set id=2  where id=1|

Query| 3 |Waiting for table level lock | update t_myisam set id=2 where id=1|

解决:

Alter table t_myisam engine=innodb;

二.Metadata lock

DDL操作:alter table t add column gmt_create datetime

数据库连接状态:

Query |6| User sleep                |select id ,sleep(50) from t

Query |4|Waiting for table metadata lock |alter table t add column gmt_create da

Query |2| Waiting for table metadata lock |select*from t where id=1

Query |1| Waiting for table metadata lock |select*from t where id=2

Query |1| Waiting for table metadata lock |update t set id =2 where id=1

Tips:DDL 过程中注意数据库中大长事务,大查询


三.锁问题最佳实践

①设计开发阶段

1.避免使用 myisam 存储引擎,改用 innodb 引擎

2.避免大事务,长事务导致事务在数据库中的运行时间加长(可能会导致表上操作无法完成)

3.选择升级到 MySQL5.6 版本,支持 online ddl

 

②管理运维阶段

1.在业务低峰期执行上述操作,比如创建索引,添加字段;

2.在结构变更前,观察数据库中是否存在长 SQL,大事务;

3结构变更期间,监控数据库的线程状态是否存在 lock wait;

4.Apsara D B支持在 DDL 变更中加入 wait timeout;

相关文章
|
3月前
|
监控 算法 安全
Java并发编程案例分析:死锁的检测与解决
Java并发编程案例分析:死锁的检测与解决
34 2
|
5月前
|
Java
探秘死锁:原理、发生条件及解决方案
探秘死锁:原理、发生条件及解决方案
98 1
|
6月前
|
安全 Java 编译器
Java并发编程中的锁优化策略
【5月更文挑战第30天】 在多线程环境下,确保数据的一致性和程序的正确性是至关重要的。Java提供了多种锁机制来管理并发,但不当使用可能导致性能瓶颈或死锁。本文将深入探讨Java中锁的优化策略,包括锁粗化、锁消除、锁降级以及读写锁的使用,以提升并发程序的性能和响应能力。通过实例分析,我们将了解如何在不同场景下选择和应用这些策略,从而在保证线程安全的同时,最小化锁带来的开销。
|
6月前
|
监控 算法 安全
Java并发编程案例分析:死锁的检测与解决
【4月更文挑战第6天】Java并发编程中的死锁导致线程僵持,资源无法释放,影响程序性能。死锁涉及互斥、请求与保持、不剥夺和循环等待四个条件。案例分析展示了银行转账场景下的死锁可能。检测死锁可通过日志、代码审查和使用工具。解决策略包括避免死锁(如设定锁顺序、超时机制)和处理死锁(如终止线程、资源抢占)。理解死锁原理并采取预防措施对构建稳定、高效的多线程应用至关重要。
121 1
|
6月前
|
安全 编译器 Linux
多线程(进阶一:锁策略)
多线程(进阶一:锁策略)
163 0
|
供应链 数据库
关于乐观锁上锁成功的前提条件讨论
关于乐观锁上锁成功的前提条件讨论
|
Java 编译器 调度
锁的优化过程
锁的优化过程
|
缓存 监控 算法
内容服务锁优化实践
内容服务锁优化实践
90 0
|
并行计算 安全 算法
Oh!老伙计,提高自己的并发技能,先从锁优化开始吧
锁是最常用的同步方法之一。在高并发的环境下,激烈的锁竞争会导致程序的性能下降。 对于单任务或者单线程的应用而言,其主要资源消耗都花在任务本身,它既不需要维护并行数据结构间的一致性状态,也不需要为线程的切换和调度花费时间。对于多线程应用来说,系统除了处理功能需求外,还需要额外维护多线程环境的特有信息,如线程本身的元数据、线程的调度、线程上下文的切换等。并行计算之所以能提高系统的性能,并不是因为它"少干活"了,而是因为并行计算可以更合理地进行任务调度,充分利用各个CPU资源。
synchronized锁升级原理剖析 ✨ 每日积累
synchronized锁升级原理剖析 ✨ 每日积累
synchronized锁升级原理剖析 ✨ 每日积累