【mysql】引擎、死锁现象


前言

本博客内容仅为记录博主思路,仅供参考,一切以自己实践结果为准。


一、概念

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 优化方案

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

五、思维导图

在这里插入图片描述

六、结语

  • 根据不同的生产环境选择不同的存储引擎才能有效的提高资源利用率
  • 死锁现象的发生会造成许多损失,且多半是因为高并发、索引不合理造成的,因此语句的优化就非常重要了
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雪碧不要气

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值