MySQL相关

mysql主要存储引擎

1.mysql的主要存储引擎有:innoDB,myISAM,merge,memory

myISAM:访问速度尤其快,如果以查询和插入为主的表可以设置myISAM引擎,锁定级别是表锁定
缺点:不支持事务,不支持外键,
innoDB:自动增加列,支持事务安全,支持外键,锁定级别是行级锁定,支持更高的并发
存着缓冲管理,通过缓冲池,将索引和数据全部缓存起来,加快查询的速度;
缺点:读写效率较差,占用的数据空间相对较大

Memory:将数据存在内存,读取速度快,机器重启后丢失数据。数据量大时,会成为瓶颈

InnoDB是聚集索引,使用B+Tree作为索引结构,数据文件是和主键索引绑定在一起的,MyISAM是非聚集索引,也是使用B+Tree作为索引结构,索引和数据文件是分离的,索引保存的是数据文件的指针,也就是说,InnoDB的B+Tree索引的叶子节点就是数据文件,辅助索引的叶子节点是主键的值,而MyISAM的B+Tree主键索引和辅助索引的叶子节点都是数据文件的地址指针

2.主键:
唯一标识表中数据库表中某列称为主键。没有主键,更新或删除表中特定行很困难,因为没有安全的方法保证只操作相关的行

3.索引:
提高查询效率,在where 的字段加索引
弊端:1.索引越多,占用空间越大;1.扫描索引耗cpu性能。
一个索引会在 update 或 insert 时增加一次 I/O,扫描的行数越少,意味着访问磁盘数据的次数越少,消耗的 CPU 资源越少对于操作系统底层来说是非常损耗性能的,过多损耗cpu
InnoDB索引使用的是B+Tree。
B+Tree:每一个叶子节点都包含指向下一个叶子节点的指针,从而方便叶子节点的范围遍历。

4.事务
事务的四大特性(ACID)
如果一个数据库声称支持事务的操作,那么该数据库必须要具备以下四个特性:

1、原子性(Atomicity)
  原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚
2、一致性(Consistency)
  一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态。
  拿转账来说,假设用户A和用户B两者的钱加起来一共是5000,那么不管A和B之间如何转账,转几次账,事务结束后两个用户的钱相加起来应该还得是5000,这就是事务的一致性。

3、隔离性(Isolation)
  隔离性是当多个用户并发访问数据库时,多个并发事务之间要相互隔离。

4、持久性(Durability)
  持久性是指一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作。
四种事务隔离级别
Read Uncommitted(读取未提交内容)
在该隔离级别,所有事务都可以看到其他未提交事务的执行结果。本隔离级别很少用于实际应用,因为它的性能也不比其他级别好多少。读取未提交的数据,也被称之为脏读(Dirty Read);

Read Committed(读取提交内容)
这是大多数数据库系统的默认隔离级别(但不是MySQL默认的)。它满足了隔离的简单定义:一个事务只能看见已经提交事务所做的改变。这种隔离级别 也支持所谓的不可重复读(Nonrepeatable Read),因为同一事务的其他实例在该实例处理其间可能会有新的commit,所以同一select可能返回不同结果;

Repeatable Read(可重读)
这是MySQL的默认事务隔离级别,它确保同一事务的多个实例在并发读取数据时,会看到同样的数据行。不过理论上,这会导致另一个棘手的问题:幻读 (Phantom Read)。
简单的说,幻读指当用户读取某一范围的数据行时,另一个事务又在该范围内插入了新行,当用户再读取该范围的数据行时,会发现有新的“幻影” 行。
InnoDB和Falcon存储引擎通过多版本并发控制(MVCC,Multiversion Concurrency Control)机制解决了该问题

Serializable(可串行化)
这是最高的隔离级别,它通过强制事务排序,使之不可能相互冲突,从而解决幻读问题。简言之,它是在每个读的数据行上加上共享锁。在这个级别,可能导致大量的超时现象和锁竞争。
这四种隔离级别采取不同的锁类型来实现,若读取的是同一个数据的话,就容易发生问题。例如:
脏读、幻读和不可重复读的本质区别在于:脏读涉及未提交数据,不可重复读针对同一数据的修改,幻读关注数据范围的变化

     脏读(Drity Read):事务A读取到事务B未提交的修改数据,若事务B回滚,则事务A读取到的是无效的“脏数据
     不可重复读(Non-repeatable read):同一事务内多次读取同一数据时,因其他事务提交了修改,导致前后结果不一致。‌‌
     幻读(Phantom Read):同一事务多次查询同一范围数据时,因其他事务插入或删除记录,导致结果集行数不一致。‌‌
     在MySQL中,实现了这四种隔离级别,分别有可能产生问题如下所示:

在这里插入图片描述

4.可变长字符类型varchar(5) 固定长度字符类型char(5):
VARCHAR比CHAR节省空间,数据库对定长字段char操作有优化,在效率上比CHAR会稍微差一些,即要想获得效率,就必须牺牲一定的空间,这也就是我们在数据库设计上常说的‘以空间换效率’
5.死锁
死锁是并发场景中常见的问题,本质是两个或多个事务相互持有对方需要的锁,且都在等待对方释放锁,形成循环等待。解决死锁需从预防、检测和处理三个层面入手,
举例来说 A 事务持有 X1 锁 ,申请 X2 锁,B事务持有 X2 锁,申请 X1 锁。A 和 B 事务持有锁并且申请对方持有的锁进入循环等待,就造成了死锁。
解决:
1.查看 InnoDB 死锁日志
2.统一事务操作顺序(最有效),所有事务必须先操作表 A,再操作表 B,最后操作表 C。
3.减小事务范围,缩短锁持有时间
事务只包含必要的 SQL 操作,避免无关逻辑(如计算、日志打印);
拆分大事务为多个小事务,减少单次锁定的资源量。
4.合理的设计索引,区分度高的列放到组合索引前面,使业务 SQL 尽可能通过索引定位更少的行,减少锁竞争
5.应用层重试机制,有报错捕获异常

6.mysql 高并发设计

  • 优化sql、参数调优(合理设置连接池参数:设置合适的连接数、超时时间等参数)、数据库设计(索引、sql优化、分库分表)
  • 架构:读写分离,多主复制
  • 硬件优化(ssd、内存cpu)
  • 缓存
  • 监控告警

6.mysql监控指标:

(1)QPS (每秒查询量)、
(2)mysql运行端口状态
(3)连接数、正在使用的连接数、最大连接数
(4)慢查询 MySQL默认超过10s的查询记录的为慢查询
(5)流量统计,网卡流量等
主从复制的监控

mysql:
https://blog.csdn.net/qq_27968607/article/details/61616385

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值