【mysql】引擎、死锁现象

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 文章目录前言一、概念1.1 引擎

一、概念

1.1 引擎

  • 引擎是一种储存机制、索引技巧,不同的引擎拥有不同的锁定水平
  • mysql数据库中负责执行I/O操作的组件



1.2 存储格式

存储方式 解释 优势 劣势
静态表 非可变字段,记录的为固定长度 存储迅速,故障易恢复 占用空间大
动态表 包含可变字段,记录长度不固定 占用空间少 容易有碎片,恢复麻烦
压缩表 由myisamchk工具创建,压缩每条记录 访问开支非常小 较麻烦

二、常用引擎

2.1 MyISAM

2.1.1 特点

  • 不支持事务/外键约束
  • 文件与索引分开储存
  • 占用资源较少
  • 单独读/写速度快
  • 读写互相阻塞
  • 表级别锁定
  • 支持动态表、静态表、压缩表的存储方式

2.1.2 存储方式

文件后缀 存储内容
.frm 存储表结构
.MYD 存储表数据
.MYI 存储索引

2.2.3 应用场景

  • 单独读取/写入较多的场景
  • 不需要事务支持的场景
  • 服务器硬件资源较差的场景

2.2 InnoDB(5.5.5版本后的默认引擎)

2.2.1 特点

  • 支持事务/外键约束
  • 占用空间大
  • 索引与表存储在一起
  • 读写可同时进行
  • 行/表级锁定(有索引:行级锁、没索引:表级锁、全文索引:表级锁)

2.2.2 应用场景

  • 需要事务支持
  • 需要行级锁定
  • 业务数据更新频繁(论坛类)
  • 业务数据一致性要求高(金融业)

三、命令

3.1 临时修改引擎

show table status from 库名 where name='表名'\G   #查看表引擎类型
alter table 表名 engine=引擎;           #修改表引擎类型
create table 表名(字段1 类型...) engine=引擎;     #创建表时选择引擎类型

3.2 修改默认引擎

vim /etc/my.cnf             #进入mysql配置文件
  [mysqld]              #在mysqld子配置文件下
  default-storage-engine=引擎;    #修改默认引擎
systemctl restart mysql.service     #重启mysql服务后生效

四、死锁

4.1 死锁原因

  • 不同事务相互等待对方资源,最后形成环路造成死锁

4.2 解决方案

  • 关闭某一个事务
  • rollback回档

4.3 优化方案

  • 以固定顺序访问表和行
  • 大事务拆成小事务执行
  • 同一事务,尽可能一次锁定所有需要资源
  • 条件允许的情况下,降低隔离级别
  • 添加合理的索引,减小死锁的概率

五、思维导图

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2月前
|
SQL 关系型数据库 MySQL
MySQL死锁及源码分析!
MySQL死锁及源码分析!
MySQL死锁及源码分析!
|
2月前
|
SQL 关系型数据库 MySQL
案例剖析:MySQL唯一索引并发插入导致死锁!
案例剖析:MySQL唯一索引并发插入导致死锁!
171 0
案例剖析:MySQL唯一索引并发插入导致死锁!
|
2月前
|
SQL 关系型数据库 MySQL
案例剖析,MySQL共享锁引发的死锁问题!
案例剖析,MySQL共享锁引发的死锁问题!
|
7天前
|
存储 关系型数据库 MySQL
从新手到高手:彻底掌握MySQL表死锁
通过本文的介绍,希望你能深入理解MySQL表死锁的概念、原因、检测方法及解决方案,并在实际开发中灵活应用这些知识,提升系统的稳定性和性能。
59 9
|
13天前
|
存储 关系型数据库 MySQL
MySQL引擎InnoDB和MyISAM的区别?
InnoDB是MySQL默认的事务型存储引擎,支持事务、行级锁、MVCC、在线热备份等特性,主索引为聚簇索引,适用于高并发、高可靠性的场景。MyISAM设计简单,支持压缩表、空间索引,但不支持事务和行级锁,适合读多写少、不要求事务的场景。
42 9
|
4月前
|
SQL 关系型数据库 MySQL
遇到mysql数据库死锁,你会怎么排查?
遇到mysql数据库死锁,你会怎么排查?
326 0
|
1月前
|
SQL 算法 关系型数据库
面试:什么是死锁,如何避免或解决死锁;MySQL中的死锁现象,MySQL死锁如何解决
面试:什么是死锁,死锁产生的四个必要条件,如何避免或解决死锁;数据库锁,锁分类,控制事务;MySQL中的死锁现象,MySQL死锁如何解决
|
2月前
|
关系型数据库 MySQL 数据库
一个 MySQL 数据库死锁的案例和解决方案
本文介绍了一个 MySQL 数据库死锁的案例和解决方案。
136 3
|
2月前
|
存储 关系型数据库 MySQL
mysql 引擎概述
MySQL存储引擎是处理不同类型表操作的组件,InnoDB是最常用的默认引擎,支持事务、行级锁定和外键。MySQL采用插件式存储引擎架构,支持多种引擎,如MyISAM、Memory、CSV等,每种引擎适用于不同的应用场景。通过`SHOW ENGINES`命令可查看当前MySQL实例支持的存储引擎及其状态。选择合适的存储引擎需根据具体业务需求和引擎特性来决定。
|
3月前
|
监控 关系型数据库 MySQL
MySQL锁机制与解决死锁问题
MySQL锁机制与解决死锁问题
338 5