0
点赞
收藏
分享

微信扫一扫

数据库面试题

求索大伟 2022-12-30 阅读 182

nomount 阶段

1.读取参数文件

2.分配SGA、启动后台进程

3.启动警报日志文件(alert_<ORACLE_SID>.log)和跟踪文件。


mount 阶段

(1)将先前启动的实例与数据库相关联;

(2)根据参数文件中保存的控制文件的位置找到控制文件并打开;

(3)从控制文件中读取数据文件及联机日志文件的位置与名称。(此时并不检查数据文件与联机日志文件是否存在)。


open 阶段

(1)打开数据文件;

(2)打开联机日志文件(打开数据库时如果数据文件或联机日志文件中的任何一个不存在,会出现错误);

(3)Oracle 数据库验证数据文件和联机日志文件是否能够打开,并检验数据库的一致性。如果不一致,SMON 后台进程将启动实例恢复。


ORACLE 简述崩溃恢复机制

由于引入了增量检查点,当实例恢复时,oracle首先从控制文件里找到最后一次检查点位置,这个位置就是实例恢复时运用日志的起点。


然后是smon监控下的一系列动作:

1) roll forward :利用redo,将检查点位置之后的变更,包括commit和uncommit的都前滚出来了,然后统统写到内存(cache)里。所以又叫cache recover

2) open:     用户可以连接进来,访问数据库。

3) roll back :   通过undo,把写入内存和磁盘里(datafile)的uncommit数据都回滚掉。


oracle rac 启动顺序


Level 1: OHASD派生出:

·cssdagent:负责生成CSSD的agent进程。

·orarootagent:负责管理所有root所拥有的ohasd资源的agent。

·oraagent:负责管理所有oracle所拥有的ohasd资源的agent。

·cssdmonitor:与cssdagent共同负责监控CSSD和节点健康。


Level 2:OHASD rootagent派生出:

·CRSD:负责管理集群资源的主要的daemon。

·CTSSD:Cluster Time Synchronization Services Daemon。

·Diskmon

·ACFS:(ASM Cluster File System) Drivers。


Level 3:CRSD派生出:

·orarootagent:负责管理所有root所拥有的属于crsd相关的资源。

·oraagent:负责管理所有oracle所拥有的属于crsd相关的资源。


Level 4:CRSD rootagent派生出:

·Network resource:监控公网。

·SCAN VIP(s):Single Client Access Name Virtual IPs

·Node VIPs:每个节点一个VIP。

·ACFS Registery:用于mount ASM Cluster File System。

·GNS VIP(可选的):用于GNS的VIP


Level 4:CRSD oraagent派生出:

·ASM Resource:ASM实例资源。

·Diskgroup:用于管理和监控ASM磁盘组。

·DB Resource:用来监控和管理数据库以及相关实例。

·SCAN Listener:用于Single Client Access Name的监听器,在SCAN VIP上进行监听。

·Listener:在Node VIP上进行监听的节点上的监听器。

·Services:用来监控和管理服务。

·ONS:Oracle Notification Service。

·eONS:增强的Oracle Notification Service。

·GSD:用于9i的向下兼容。

·GNS(可选的):Grid Naming Service,该服务用于命名解析。


查询SGA区的情况:


Fixed Size表示固定区域,存储SGA各个组件的信息。不能修改大小。


Variable Size表示可变区域,比如共享池、java池、大池等。  共享池(shared pool) :用来存储最近执行的SQL语句和最近使用的数据字典的数据。 Java池(Java Pool): 用来存储Java代码。 大型池(Large Pool): 用来存储不与SQL直接相关的大型内存结构。备份、恢复使用。


Database Buffers表示数据库高速缓冲区。 用来存储最近从数据文件中读写过的数据。


Redo Buffers表示日志缓冲区。 用来记录服务或后台进程对数据库的操作。


PGA


(一)Private SQL Area

1、保存了当前会话的绑定信息以及运行时内存结构。这些信息

2、每个执行sql语句的会话,都有一个private sql area。

3、当多个用户执行相同的sql语句,此sql语句保存在一个称为shared sql area。此share sql area被指定给这些用户的private sql area

4、共享服务器模式:private sql area位于SGA的share pool或large pool中

   专用服务器模式:private sql area位于PGA中

(二)Cursor、SQL Areas

(三)Work Area    

PGA的一大部分被分配给Work Area,用来执行如下操作:

    a.基于操作符的排序,group by、order by、rollup和窗口函数。

      参数为sort_area_size  

    b.hash散列连接,

      参数为hash_area_size    

    c.位图合并,

      参数为bitmap_merge_area_size

    d.位图创建,

      参数为create_bitmap_area_size

    e.批量装载操作使用的写缓存


(四)Session memory

 保存了会话的变量,如登录信息及其他与会话相关的信息,共享服务器模式下,Session memory是共享的。


Oracle系统进程主要有哪些,作用是什么

数据写进程(DBWR):负责将更改的数据从数据库缓冲区高速缓存写入数据文件

日志写进程(LGWR):将重做日志缓冲区中的更改写入在线重做日志文件

系统监控 (SMON): 检查数据库的一致性如有必要还会在数据库打开时启动数据库的恢复

进程监控 (PMON): 负责在一个Oracle 进程失败时清理资源

检查点进程(CKPT):负责在每当缓冲区高速缓存中的更改永久地记录在数据库中时,更新控制文件和数据文件中的数据库状态信息。

归档进程 (ARCH):在每次日志切换时把已满的日志组进行备份或归档

恢复进程 (RECO): 保证分布式事务的一致性,在分布式事务中,要么同时commit,要么同时rollback;

作业调度器(CJQ ): 负责将调度与执行系统中已定义好的job,完成一些预定义的工作.


DG 三种模式:

数据库面试题_数据库


MYSQL 的同步方式有哪些

谈谈你对Mysql的MVCC的理解

MVCC 只在 COMMITTED READ(读提交)和REPEATABLE READ(可重复读)两种隔离级别下工作。


另一种是数据多版本并发控制(MultiVersion Concurrency Control,简称 MVCC 或 MCC),也称为多版本数据库:

不用加任何锁, 通过一定机制生成一个数据请求时间点的一致性数据快照 (Snapshot),

并用这个快照来提供一定级别 (语句级或事务级) 的一致性读取。从用户的角度来看,好象是数据库可以提供同一数据的多个版本。


InnoDB 的 MVCC,是通过在每行记录后面保存两个隐藏的列来实现。

这两个列,一个保存了行的创建时间,一个保存行的过期时间(删除时间)。

当然存储的并不是真实的时间,而是系统版本号(system version number)。

每开始一个新的事务,系统版本号都会自动递增。

事务开始时刻的系统版本号会作为事务的版本号,用来和查询到的每行记录的版本号进行比较。


MySQL的默认事务隔离级别

重复读


MySQL binlog的几种日志录入格式以及区别

row statement


数据库cpu飙升到500%的话他怎么处理?


sql 的执行过程,在数据库中经过哪些步骤。


简要说明一下double write的工作机制。

Double write 是InnoDB在 tablespace上的128个页(2个区)是2MB;

其原理:

   为了解决 partial page write 问题 ,当mysql将脏数据flush到data file的时候,

先使用memcopy 将脏数据复制到内存中的double write buffer ,之后通过double write buffer再分2次,每次写入1MB到共享表空间,

然后马上调用fsync函数,同步到磁盘上,避免缓冲带来的问题,在这个过程中,doublewrite是顺序写,开销并不大,

在完成doublewrite写入后,在将double write buffer写入各表空间文件,这时是离散写入。

如果发生了极端情况(断电),InnoDB再次启动后,发现了一个Page数据已经损坏,那么此时就可以从doublewrite buffer中进行数据恢复了。


双一的意义。


innodb_flush_log_at_trx_commit=1


每次事务提交时MySQL都会把log buffer的数据写入log file,并且flush(刷到磁盘)中去


sync_binlog=1


MySQL 在每写 1次 binary log时,会使用fdatasync()函数将它的写二进制日志binary log同步到磁盘中去


保证了数据的安全性


聚簇索引、覆盖索引


mysqld启动时做了以下功能:


处理配置文件及启动参数

日志系统初始化

初始化很多系统内部变量

信号系统初始化

核心模块启动,包括存储引擎等

终端重定向处理

网络系统初始化

状态变量初始化

Binlog相关检查初始化

服务监听线程创建


mysql整体的执行过程如下图所示



Q:刚刚我们聊到B+ Tree ,那你知道B+ Tree的叶子节点都可以存哪些东西吗?


A:InnoDB的B+ Tree可能存储的是整行数据,也有可能是主键的值


Q:那这两者有什么区别吗?


A:(当他问我叶子节点的时候,其实我就猜到他可能要问我聚簇索引和非聚簇索引了)在 InnoDB 里,索引B+ Tree的叶子节点存储了整行数据的是主键索引,也被称之为聚簇索引。而索引B+ Tree的叶子节点存储了主键的值的是非主键索引,也被称之为非聚簇索引


Q:那么,聚簇索引和非聚簇索引,在查询数据的时候有区别吗?


A:聚簇索引查询会更快?


Q:为什么呢?


A:因为主键索引树的叶子节点直接就是我们要查询的整行数据了。而非主键索引的叶子节点是主键的值,查到主键的值以后,还需要再通过主键的值再进行一次查询


Q:刚刚你提到主键索引查询只会查一次,而非主键索引需要回表查询多次。(后来我才知道,原来这个过程叫做回表)是所有情况都是这样的吗?非主键索引一定会查询多次吗?



B-Tree 和 B+Tree 的区别

所有数据记录节点都是按照键值大小顺序存放在同一层的叶子节点上



工作职责:

1、负责业务系统数据库的安装、配置和调试,数据库性能监控和调优,数据备份和恢复测试,系统数据安全以及权限管理等运维管理工作;

2、制定数据库监控、备份、容灾策略;定期检查和评估策略执行情况,保障数据库稳定运行;

3、撰写数据库维护手册,完善数据库操作安全规范;

4、向各个部门提供数据库相关的技术服务支持;

任职资格:

1、全日制本科及以上学历,2年以上数据库相关工作经验 ;

2、熟悉理解linux系统,运维体系结构,精于容量规划、架构设计、性能优化;

3、熟悉一门及以上脚本语言(shell/perl/python等);

4、精通MySQL/Oracle数据库日常的运维备份、容灾恢复、故障处理;

5、熟悉Oracle DG OGG;

6、具备很强的故障排查能力,有很好的技术敏感度和风险识别能力。

举报

相关推荐

0 条评论