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

相关文章
|
2月前
|
SQL 分布式计算 前端开发
《深入探索Java并发编程&从锁到并发工具的深入解析》(下)
《深入探索Java并发编程&从锁到并发工具的深入解析》(下)
15 0
|
2月前
|
安全 Java
《深入探索Java并发编程&从锁到并发工具的深入解析》(上)
《深入探索Java并发编程&从锁到并发工具的深入解析》(上)
12 0
|
3月前
|
安全 Java API
Java线程池原理与锁机制分析
综上所述,Java线程池和锁机制是并发编程中极其重要的两个部分。线程池主要用于管理线程的生命周期和执行并发任务,而锁机制则用于保障线程安全和防止数据的并发错误。它们深入地结合在一起,成为Java高效并发编程实践中的关键要素。
33 0
|
6月前
|
安全 Java 程序员
Java并发编程中的锁机制与优化策略
【6月更文挑战第17天】在Java并发编程的世界中,锁是维护数据一致性和线程安全的关键。本文将深入探讨Java中的锁机制,包括内置锁、显式锁以及读写锁的原理和使用场景。我们将通过实际案例分析锁的优化策略,如减少锁粒度、使用并发容器以及避免死锁的技巧,旨在帮助开发者提升多线程程序的性能和可靠性。
|
6月前
|
Java
探秘死锁:原理、发生条件及解决方案
探秘死锁:原理、发生条件及解决方案
139 1
|
7月前
|
安全 Java 编译器
Java并发编程中的锁优化策略
【5月更文挑战第30天】 在多线程环境下,确保数据的一致性和程序的正确性是至关重要的。Java提供了多种锁机制来管理并发,但不当使用可能导致性能瓶颈或死锁。本文将深入探讨Java中锁的优化策略,包括锁粗化、锁消除、锁降级以及读写锁的使用,以提升并发程序的性能和响应能力。通过实例分析,我们将了解如何在不同场景下选择和应用这些策略,从而在保证线程安全的同时,最小化锁带来的开销。
|
7月前
|
安全 Java 程序员
【Java多线程】面试常考——锁策略、synchronized的锁升级优化过程以及CAS(Compare and swap)
【Java多线程】面试常考——锁策略、synchronized的锁升级优化过程以及CAS(Compare and swap)
69 0
|
7月前
|
安全 编译器 Linux
多线程(进阶一:锁策略)
多线程(进阶一:锁策略)
167 0
|
Java 编译器 调度
锁的优化过程
锁的优化过程
|
缓存 监控 算法
内容服务锁优化实践
内容服务锁优化实践
95 0