【mysql】引擎、死锁现象

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
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 优化方案

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

五、思维导图

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
存储 关系型数据库 MySQL
MySQL引擎对决:深入解析MyISAM和InnoDB的区别
MySQL引擎对决:深入解析MyISAM和InnoDB的区别
37 0
|
6天前
|
存储 关系型数据库 MySQL
学习MySQL(5.7)第二战:四大引擎、账号管理以及建库(干货满满)
学习MySQL(5.7)第二战:四大引擎、账号管理以及建库(干货满满)
|
13天前
|
存储 关系型数据库 MySQL
【MySQL系列笔记】InnoDB引擎-数据存储结构
InnoDB 存储引擎是MySQL的默认存储引擎,是事务安全的MySQL存储引擎。该存储引擎是第一个完整ACID事务的MySQL存储引擎,其特点是行锁设计、支持MVCC、支持外键、提供一致性非锁定读,同时被设计用来最有效地利用以及使用内存和 CPU。因此很有必要学习下InnoDB存储引擎,它的很多架构设计思路都可以应用到我们的应用系统设计中。
194 4
|
19天前
|
SQL 关系型数据库 MySQL
|
19天前
|
存储 缓存 关系型数据库
|
22天前
|
关系型数据库 MySQL 中间件
【MySQL实战笔记】07 | 行锁功过:怎么减少行锁对性能的影响?-02 死锁和死锁检测
【4月更文挑战第19天】在高并发环境下,死锁发生在多个线程间循环等待资源时,导致无限期等待。MySQL中,死锁可通过`innodb_lock_wait_timeout`参数设置超时或`innodb_deadlock_detect`开启死锁检测来解决。默认的50s超时可能不适用于在线服务,而频繁检测会消耗大量CPU。应对热点行更新引发的性能问题,可以暂时关闭死锁检测(风险是产生大量超时),控制并发度,或通过分散记录减少锁冲突,例如将数据分拆到多行以降低死锁概率。
24 1
|
24天前
|
存储 关系型数据库 MySQL
MySQL的MyISAM引擎:技术特点与应用场景
【4月更文挑战第20天】MySQL的MyISAM引擎特点是表级锁定,适合读多写少的场景,不支持事务但提供全文索引,适用于只读应用、全文搜索和简单备份恢复。在选择存储引擎时,应根据具体需求权衡。
38 11
|
24天前
|
存储 缓存 关系型数据库
MySQL的InnoDB引擎:深度解析与应用
【4月更文挑战第20天】本文深入探讨MySQL的InnoDB引擎,它采用MVCC和行级锁定实现高并发、高性能数据操作。InnoDB通过缓冲池减少I/O,支持ACID事务、外键约束和行级锁定,提供数据一致性。此外,还支持全文索引和灵活的索引策略。其高并发性能、数据一致性和可扩展性使其成为首选存储引擎。
43 12
|
3月前
|
SQL 关系型数据库 MySQL
MySQL - 死锁的产生及解决方案
MySQL - 死锁的产生及解决方案
213 0
|
4月前
|
算法 关系型数据库 MySQL
MySQL相关(九)- 死锁的发生和避免
MySQL相关(九)- 死锁的发生和避免
28 0