知识点总结(一)

mysql 面试问题总结

一条  sql 执行慢的原因

  1. 偶尔执行慢
  • 某行记录上锁
  • 数据库在刷新脏页(日志写满需要同步到磁盘)
  1. 一直执行慢
  • 索引失效,一直没走索引。例如该字段没有索引;由于对字段进行运算、函数操作导致无法用索引
  • 数据库选错了索引。

 

MySQL  事务实现原理

  • redo log 和 undo log

   1.redo用于恢复数据的 用于保障已提交事务的持久化特性。

   2. undo用来回滚数据的用于保障 未提交事务的原子性

  • mysql锁技术以及MVCC基础

1.读多写少的情况。使用读写锁机制,读读可以并行,但是不能做到写读,写写并行

2.MVCC多版本控制:每行记录后面保存两个隐藏的列来实现。。这两个列,一个保存了行的创建时间,一个保存了行的过期时间,当然存储的并不是实际的时间值,而是系统版本号。

  • 事务的实现原理

1.MVCC在mysql中的实现依赖的是undo log与read view

  • undo log :undo log 中记录某行数据的多个版本的数据。

  • read view :用来判断当前版本数据的可见性

  • MySQL的数据存储机制,MySQL的表数据是存放在磁盘上的,因此想要存取的时候都要经历磁盘IO,然而即使是使用SSD磁盘IO也是非常消耗性能的。为此,为了提升性能InnoDB提供了缓冲池(Buffer Pool),Buffer Pool中包含了磁盘数据页的映射,可以当做缓存来使用:

    读数据:会首先从缓冲池中读取,如果缓冲池中没有,则从磁盘读取再放入缓冲池;

    写数据:会首先写入缓冲池,缓冲池中的数据会定期同步到磁盘中;

  • MySQL隔离级别有以下四种(级别由低到高):

  • READUNCOMMITED(未提交读)   事务中的修改即使还没提交,对其他事务是可见的。事务可以读取未提交的数据,造成脏读。

  • READCOMMITED(提交读)       在一个事务内多次读取的结果不一样。

  • REPEATABLEREAD(可重复读) 

    (Mysql默认隔离级别)

    在一个事务内的多次读取的结果是一样的

  • SERIALIZABLE (可重复读)

实现事务采取了哪些技术以及思想?

  • 原子性:使用 undo log ,从而达到回滚

  • 持久性:使用 redo log,从而达到故障后恢复

  • 隔离性:使用锁以及MVCC,运用的优化思想有读写分离,读读并行,读写并行

  • 一致性:通过回滚,以及恢复,和在并发环境下的隔离做到一致性。

服务器发生OOM怎么排查?

 

  • 如果生产环境JVM挂了,这时候不要慌,有节奏的来分析来排除。首先排除是不是被Linux杀死了,怎么看呢?通过命令[sudo egrep -i -r 'Out Of' /var/log]查看,如果是,关闭一些服务,或者把一些服务移走,腾出点内存。
  • 有没有生成dump文件。如果生成了,要么是堆OOM,要么是元空间OOM;如果没生成,直接可以确定是直接内存导致的OOM
  • dump文件从服务器上下载下来,用visualvm分析。
  • 如果你发现发生OOM的位置是创建对象,调用构造方法之类的代码,那一定是堆OOM。
  • 如果你发现发生OOM的位置是类加载器那些方法,那一定是元空间OOM。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值