数据库是如何获取并处理数据的

SQL是结构化查询语言(Structured Query Language)的简称,用户只需要通过SQL告诉数据库需要什么,至于怎么去做就是数据库管理系统(DBMS)需要考虑的问题。

上篇文章《SQL语句处理》介绍了数据库执行的四个阶段,每个阶段都做了什么工作。今天这篇文章继续探讨数据库是如何获取到用户所需的数据。

如下所探讨的内容仅适用于Oracle单机环境,RAC环境稍有不同,不在本篇讨论范围内。

数据库的所有操作增、删、改、查都是在内存中完成的,为了处理数据,数据库首先需要将数据从磁盘读取到内存中,然后进行相应的操作。但是内存和磁盘的读写速度有着天壤之别。DDR4内存读写速度大概50G每秒(50000M),固态硬盘速度是300M每秒,是内存的二百分之一,机械硬盘的速度是100M每秒,是内存的五百分之一。为了解决两者之间的速度差的问题,诞生了缓存的概念。缓存的作用就是避免每次获取数据时都从缓慢的磁盘读取,而是将之前访问过的数据缓存在内存中,后续操作如果需要相同数据时,直接从内存获取,大大提升读取速度。

Oracle内存结构中有一个很重要的结构叫做DB Buffer Cache,DB Buffer Cache位于SGA中,正常系统中此部分内存占整个Oracle内存结构大绝大部分。如果DB Buffer Cache很大,几十G,甚至是几百G,每次在其中搜索所需的块是否存在,也需要很长的时间,因此,为了提高效率,Oracle将DB Buffer Cache划分为多个区域,每个区域称为一个工作集(workset),每个工作集又被划分为多个hash buckets,一个hash buckets管理着一个或多个数据块。为了保证数据的一致性,hash buckets访问是串行的,由相应的latch保护,只有获取到相应的latch的会话才能到hash buckets上搜索数据块。

1、查询语句的执行

假设有如下查询语句:

SELECT*FROMemployeesWHEREemployee_id=199;

表employees表结构如下,employee_id是表的主键。

先看下上述sql语句的执行计划

首先根据索引EMP_EMP_ID_PK查找employee_id=199键,获取到键所对应的值ROWID,ROWID指向数据块的真实地址。通过ROWID获取数据块,获取到数据块后,再从数据块中获取符合条件的数据。在此过程中至少需要访问两个数据块(为了简化过程,忽略其他数据块),一个是键为199索引块,假设为100号块;另一个是索引块所指向的数据块,假设为1000号块。

前面缓存介绍中提到,为了提升数据的访问速度,Oracle会将访问过的数据块缓存到DB Buffer cache中,以备重复使用。因此上面获取100号索引块的时候,需要先到DB Buffer cache中查找100号索引块是否已存在,以减少昂贵的磁盘读。在搜索DB Buffer cache前,必须获取相应的latch后才能进行搜索。如果未获取到latch,此时会进入等待。待获取到latch后便可以对DB Buffer cache搜索。

如果100号索引块已存在于内存中,且没有会话正在修改数据块内容,直接访问内存中的数据块,获取键为199的数据。如果有会话正在修改此数据块内容,则需要通过undo数据和当前的数据块构造一个一致性读版本的数据块,来读取会话修改前的历史版本数据。

如果100号索引块不在内存中,首先判断是否有其他会话正在将100号索引块读入内存,如果是,则等待。否则通知后台进程将100号索引块从磁盘读入内存,在将100号索引块读入内存前,需要在内存中找到一块合适的空闲块,以便保存即将读入的100号索引块。搜索空闲块时同样需要获得latch。

如果内存中没有空闲的空间,则通知后台刷新进程刷新脏页,以腾出空闲空间。

如果内存中有空闲的空间,直接将100号索引块读入内存。获取到ROWID后,再去读取数据块,读取数据块的过程同读取索引块,读取到数据块后再从数据块中获取符合条件的行,返回给客户端。

2、DML语句执行

假设有如下更新语句:

UPDATEemployeesSETfirst_name='Hello',last_name='Kitty'WHEREemployee_id=199;

update语句执行计划如下:

DML语句都存在相应的查询过程,因为只有查询到了所需要修改的数据,才能进行相应的操作。查询的过程大致与查询语句执行过程相同。但也有如下不同点:

获取latch时,如果是只读操作,多个会话可以同时获取相同的latch,如果是DML操作,则不可以同时获得。

只读操作多个会话可以同时读取同一个数据块,DML操作则不可以多个会话同时修改同一个数据块。

获取到数据块后进行相应的操作,并记录对应的undo信息和redo log信息,完成update操作。

文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/265613.html<

(0)
运维的头像运维
上一篇2025-05-05 14:05
下一篇 2025-05-05 14:07

相关推荐

  • 个人主题怎么制作?

    制作个人主题是一个将个人风格、兴趣或专业领域转化为视觉化或结构化内容的过程,无论是用于个人博客、作品集、社交媒体账号还是品牌形象,核心都是围绕“个人特色”展开,以下从定位、内容规划、视觉设计、技术实现四个维度,详细拆解制作个人主题的完整流程,明确主题定位:找到个人特色的核心主题定位是所有工作的起点,需要先回答……

    2025-11-20
    0
  • 社群营销管理关键是什么?

    社群营销的核心在于通过建立有温度、有价值、有归属感的社群,实现用户留存、转化和品牌传播,其管理需贯穿“目标定位-内容运营-用户互动-数据驱动-风险控制”全流程,以下从五个维度展开详细说明:明确社群定位与目标社群管理的首要任务是精准定位,需明确社群的核心价值(如行业交流、产品使用指导、兴趣分享等)、目标用户画像……

    2025-11-20
    0
  • 香港公司网站备案需要什么材料?

    香港公司进行网站备案是一个涉及多部门协调、流程相对严谨的过程,尤其需兼顾中国内地与香港两地的监管要求,由于香港公司注册地与中国内地不同,其网站若主要服务内地用户或使用内地服务器,需根据服务器位置、网站内容性质等,选择对应的备案路径(如工信部ICP备案或公安备案),以下从备案主体资格、流程步骤、材料准备、注意事项……

    2025-11-20
    0
  • 如何企业上云推广

    企业上云已成为数字化转型的核心战略,但推广过程中需结合行业特性、企业痛点与市场需求,构建系统性、多维度的推广体系,以下从市场定位、策略设计、执行落地及效果优化四个维度,详细拆解企业上云推广的实践路径,精准定位:明确目标企业与核心价值企业上云并非“一刀切”的方案,需先锁定目标客户群体,提炼差异化价值主张,客户分层……

    2025-11-20
    0
  • PS设计搜索框的实用技巧有哪些?

    在PS中设计一个美观且功能性的搜索框需要结合创意构思、视觉设计和用户体验考量,以下从设计思路、制作步骤、细节优化及交互预览等方面详细说明,帮助打造符合需求的搜索框,设计前的规划明确使用场景:根据网站或APP的整体风格确定搜索框的调性,例如极简风适合细线条和纯色,科技感适合渐变和发光效果,电商类则可能需要突出搜索……

    2025-11-20
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注