数据库底层有些啥(以Oracle为例)

什么是数据库

首先,问一个经典的问题,什么是数据库?”数据库是物理操作系统文件或磁盘的集合。“也就是说,数据库其实是死的,就是一堆磁盘文件,那么数据库是怎么为应用提供服务呢?这就是另一个概念了:实例。“实例是一组Oracle后台进程/线程以及一个共享内存区。”实例中的进程和内存区是数据库运转的关键。它们调动CPU,对磁盘进行读写,一边为应用提供服务,一边维护数据库。绝大多数情况下,数据库和实例都是一对一的关系,因此下文就不区分数据库和实例了。可以看出,数据库底层就三个东西:文件、进程和内存结构。

一、数据库文件

Oracle数据库中有10种以上的文件,而对于开发而言,最常见到的就是数据文件和重做日志文件了。

1)数据文件

数据文件体系可以概括为:表空间、段、区段和块,四者之间是包含关系。

表空间

1)system表空间
真正的Oracle数据字典
2)sysaux表空间
非字典对象
3)user表空间
这里面存储的就是用户数据了,所有用户创建的表的数据都在这里存储。

段结构中最常见是:
1)表段、表分区段、子分区段:存储表的数据或者表分区的数据等等;
2)索引段、索引分区段:保存索引结构
3)回滚段:旧数据副本,以备回滚
4)临时段:临时数据、排序数据

2)重做日志文件

在线重做日志

形式:磁盘文件;
作用:在断电恢复时,将系统恢复到断电前的时刻,避免因为内存(数据库缓冲区缓存)在断电后数据清空导致数据丢失,维护数据库的持久性。
工作机制:在断电重启时,利用在线重做日志,对事务进行重放,以同样的方式修改与提交。
维护机制:数据变更时,在缓冲区缓存中进行变更,并将重做这些修改所需的全部信息保存在重做日志缓冲区中,**当commit时,将重做日志缓冲区的内容写到在线重做日志中。**只有缓存区中的数据被刷到磁盘上,重做日志才可以被覆盖。
如果每次commit时,都把数据从内存刷回磁盘,也可以保证数据库的持久性。但是,将数据刷回磁盘是分散写,将日志写到磁盘是连续写,连续写更快。

归档重做日志

形式:磁盘文件;
作用:当磁盘异常时,用于恢复数据库。
工作机制:上个时间点的备份文件+上个时间点至今的归档重做日志–>最新数据
维护机制:开启archivelog模式时,当覆盖在线重做日志时,将在线重做日志备份。

二、数据库内存结构

内存体系:

1、PGA
进程全局区,一个进程或线程专用的内存
2、UGA
用户全局区,与特定的会话相关联。若是专用服务器连接,则属于PGA;若是共享服务器连接,则属于SGA。
3、SGA
系统全局区

SGA

1)固定SGA:SGA的自启区
2)重做缓存区:用于缓存在线重做日志
3)块缓冲区缓存
​ a)从磁盘中读的数据库块
​ b)将要写到磁盘的数据库块
4)共享池
5)大池:用于大块内存的分配,如UGA
6)Java池
7)流池

共享池

形式:内存结构
作用:缓存“程序”,如PLSQL代码、系统参数、数据字典缓存(数据库对象的已缓存信息)
工作机制:多个会话执行同一代码时,只加载一个副本,所有会话共享
维护机制:LRU(最近最少使用);

三、数据库进程

1)服务器进程

是什么:进程或线程
作用:代表客户会话完成工作,接收应用向数据库发送的SQL语句并执行
工作机制:会话SQL–》连接–》服务器进程
连接:
a)专用服务器连接:客户连接与服务器进程一对一映射
b)共享服务器连接:由调度程序将客户连接的请求放在请求队列中,由第一个可用的共享服务器进程来处理
c)数据库常驻连接池

2)后台进程

随数据库而启动,完成各种维护工作

中心后台进程

a)各种维护进程,监视进程、系统,清理、合并空间等等
b)DBWn:数据库块写入器,负责将脏块写入磁盘;
c)LGWR:日志写入器,将重做日志从内存刷到磁盘,作用的充分而非必要条件是“commit”;
d)ARCn:归档进程,维护归档日志

工具后台进程

全都是可选的,提供了一些工具,如数据泵。。。

3)从属进程

代表前两种进程完成一些额外工作

作为一个CRUD菜鸟,而非数据库底层开发或者运维大佬,本文主要是对数据库底层的一些常用的概念进行思考和总结,因此内容可能既不完善也不准确。主要目的是希望通过学习,可以看懂数据库的一些报错的底层原理,如果因此能站在更底层的角度去思考如何CRUD,那就属于是意外收获了。

参考文献

Oracle编程艺术:深入理解数据库体系结构(第3版)【作者:Thomas Kyte】

Oracle数据库底层原理主要涉及到Oracle RDBMS的架构和组件。Oracle RDBMS是一套数据库管理系统,也被称为Oracle Server。它主要由两大部分组成:实数据库。 实Oracle RDBMS在内存中运行的进程集合,包括了前台进程和后台进程。前台进程负责与客户端应用程序进行交互,接收和处理用户的请求。后台进程则负责管理数据库的内存、网络连接、数据缓存、日志写入等核心功能。实还包括了系统全局区(SGA),用于存储共享的内存结构,如数据字典缓存、SQL缓存和共享池等。 数据库是指数据的物理存储,包括数据文件、控制文件和日志文件。数据文件是用来存储表、索引和其他数据库对象的实际数据。控制文件包含了数据库的结构信息,如表空间、数据文件和日志文件的位置等。日志文件用于记录数据库的操作,以便在系统故障时进行恢复和重做。 Oracle数据库底层原理还涉及到数据访问和查询优化。Oracle使用自己的SQL语言(Structured Query Language)来管理和操作数据。当用户发出一个查询请求时,Oracle会通过解析器将查询语句转换成一个查询计划,然后通过优化器选择最优的执行路径。执行器会根据查询计划从数据文件和SGA中获取数据,并返回给用户。 总之,Oracle数据库底层原理主要包括了实数据库的架构,以及数据的物理存储和查询优化。理解这些原理对于Oracle DBA的调优和排错非常重要。 <span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Oracle架构实现原理](https://blog.youkuaiyun.com/tao_wei162/article/details/84827865)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [oracle架构原理](https://download.youkuaiyun.com/download/weixin_38622827/15451226)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值