作者:IT邦德
中国DBA联盟(ACDU)成员,10余年DBA工作经验,
Oracle、PostgreSQL ACE
CSDN博客专家及B站知名UP主,全网粉丝10万+
擅长主流Oracle、MySQL、PG、高斯及Greenplum备份恢复,
安装迁移,性能优化、故障应急处理
•••
@TOC
前言
在这里小编给大家分享几个非常经典的DBA面试题,大家一起来探讨
1.理论面试
详细的理论面试请到CSDN看以下的明细
1.MySQL八股文连环45问,你能坚持第几问?
https://jeames.blog.csdn.net/article/details/123963994
2.Oracle夺命连环25问,你能坚持第几问?
https://jeames.blog.csdn.net/article/details/124996400
以下为精选的3个理论面试
1.MySQL的为何设置两阶段提交?
MySQL使用两阶段提交主要解决binlog和InnoDB redolog的数据一致性的问题。
举个例子吧!在执行一条 update 语句时候,
通过连接器、分析器、优化器之后,
调用操作引擎,将新行写入内存,
写入redo log后,
状态为prepare->写 binlog->redo log
状态为修改为commit 。
写入redo 的过程分为了
prepare和commit称为两阶段提交。
采用二阶段提交的原因
如果只进行一次写入 redolog 和写入 binlog 是有问题的。
不管先写谁。首先知道一点,redolog 是对数据库实际进行的操作。
1. 先写 redolog 再写 binlog
如果在一条语句 redolog 之后崩溃了,
binlog 则没有记录这条语句。
系统在 crash recovery 时重新执行了一遍 binlog 便会少了这一次的修改。
恢复的数据库少了这条更新。
2. 先写 binlog 再写 redolog
如果在一条语句 binlog 之后崩溃了,
redolog 则没有记录这条语句(数据库物理层面并没有执行这条语句)。
系统在 crash recovery 时重新执行了一遍 binlog 便会多了这一次的修改。
恢复的数据库便多了这条更新。
2.PostgreSQL闪回技术是什么?
PostgreSQL数据库由于MVCC的机制,对于DML的操作,更改或者删除的元祖暂时标记为死元祖并未真正的在物理上清理,直到vacuum运行时才清理这些死元祖,这为行级的闪回查询提供了可能。
flashback 前提是
1.延迟VACUUM,确保误操作的数据还没有被垃圾回收。
vacuum_defer_cleanup_age = 5000000
--延迟500万个事务再回收垃圾,误操作后在500万个事务内,
如果发现了误操作,才有可能使用本文提到的方法闪回。
2.记录未被freeze,确保无操作的数据,
以及后面提交的事务号没有被freeze(抹去)。
vacuum_freeze_min_age = 50000000
--事务年龄大于5000万时,才可能被抹去事务号。
3、开启事务提交时间跟踪,确保可以从xid得到事务结束的时间
track_commit_timestamp = on
--开启事务结束时间跟踪,开启事务结束时间跟踪后,
会开辟一块共享内存区存储这个信息。
3.Oracle的 checkpoint作用是?
1.检查点概念
“检查点”是一种数据结构,
用于定义数据库的重做日志中的系统更改号 (SCN)。
检查点 被记录在控制文件和每个数据文件头中。
每隔三秒,CKPT 进程就会在控制文件中存储一次数据,
以记录 DBWn 已将哪些脏块从 SGA 写到磁盘。
每次刷新截止的那个块的位置就叫检查点位置 checkpoint position。
如果发生日志切换,
则 CKPT 进程还会将此检查点信息写入数据文件的头部。
文件头中记录的 SCN 可保证将该 SCN 之前对数据库块进行的所有更改写入到磁盘中。
2. 检查点作用
1)保证数据库的一致性。
一致性关闭数据库时,确保所有 commit 的数据写到磁盘上。
2)确保内存中脏块定期写入磁盘。
3)缩短实例恢复的时间。实例恢复时,
要把实例异常关闭前没有写到硬盘的脏数据通过日志 进行恢复。
只需要处理上一个检查点之后的联机重做日志文件条目,
从而减少实例恢复的时间。
2.实操面试
请分别说明下,你实施过的一些高可用项目,以Oracle、MySQL、PostgreSQL为例!
2.1 Oracle高可用
Oracle高可用一家老小全在这里
https://mp.weixin.qq.com/s/6FtAASc1Sq4E7hShuKRI2A
2.2 MySQL高可用
想学精MySQL,得先捋一捋高可用架构
https://mp.weixin.qq.com/s/_nSEZsH0vUjkFhWpURhUaA
2.3 PostgreSQL高可用
这些高可用架构,堪称PostgreSQL华佗
https://mp.weixin.qq.com/s/JrJdBVGrfoQzPH9MiVqfqA
3.总结
面试,不仅仅是检验别人,其实也是一个DBA检验自己的一个机会,希望同行们都有自己喜欢的职业