案例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;

相关文章
|
19天前
|
SQL 分布式计算 前端开发
《深入探索Java并发编程&从锁到并发工具的深入解析》(下)
《深入探索Java并发编程&从锁到并发工具的深入解析》(下)
12 0
|
19天前
|
安全 Java
《深入探索Java并发编程&从锁到并发工具的深入解析》(上)
《深入探索Java并发编程&从锁到并发工具的深入解析》(上)
11 0
|
3月前
|
监控 算法 安全
Java并发编程案例分析:死锁的检测与解决
Java并发编程案例分析:死锁的检测与解决
34 2
|
2月前
|
安全 Java API
Java线程池原理与锁机制分析
综上所述,Java线程池和锁机制是并发编程中极其重要的两个部分。线程池主要用于管理线程的生命周期和执行并发任务,而锁机制则用于保障线程安全和防止数据的并发错误。它们深入地结合在一起,成为Java高效并发编程实践中的关键要素。
28 0
|
5月前
|
Java
探秘死锁:原理、发生条件及解决方案
探秘死锁:原理、发生条件及解决方案
98 1
|
6月前
|
安全 Java 编译器
Java并发编程中的锁优化策略
【5月更文挑战第30天】 在多线程环境下,确保数据的一致性和程序的正确性是至关重要的。Java提供了多种锁机制来管理并发,但不当使用可能导致性能瓶颈或死锁。本文将深入探讨Java中锁的优化策略,包括锁粗化、锁消除、锁降级以及读写锁的使用,以提升并发程序的性能和响应能力。通过实例分析,我们将了解如何在不同场景下选择和应用这些策略,从而在保证线程安全的同时,最小化锁带来的开销。
|
6月前
|
监控 算法 安全
Java并发编程案例分析:死锁的检测与解决
【4月更文挑战第6天】Java并发编程中的死锁导致线程僵持,资源无法释放,影响程序性能。死锁涉及互斥、请求与保持、不剥夺和循环等待四个条件。案例分析展示了银行转账场景下的死锁可能。检测死锁可通过日志、代码审查和使用工具。解决策略包括避免死锁(如设定锁顺序、超时机制)和处理死锁(如终止线程、资源抢占)。理解死锁原理并采取预防措施对构建稳定、高效的多线程应用至关重要。
121 1
|
6月前
|
安全 编译器 Linux
多线程(进阶一:锁策略)
多线程(进阶一:锁策略)
163 0
|
6月前
|
算法 Java
【面试问题】锁如何优化?
【1月更文挑战第27天】【面试问题】锁如何优化?
|
Java 编译器 调度
锁的优化过程
锁的优化过程