当前位置: 首页 > news >正文

滚雪球学Oracle[1.3讲]:内存与进程架构

全文目录:

    • 前言
    • 一、SGA的深度解析
      • 1.1 SGA的作用与构成
        • SGA的大小与调整
      • 1.2 数据库缓冲区缓存(DB Cache)
        • DB Cache的工作原理
        • 案例演示:调整DB Cache的大小
      • 1.3 共享池(Shared Pool)的构成与调优
        • 共享池的组成部分:
        • 共享池的调优策略:
        • 案例演示:查询共享池的使用情况
      • 1.4 日志缓冲区(Log Buffer)的配置
        • 日志缓冲区的大小配置
        • 案例演示:查看日志缓冲区的写入情况
    • 二、PGA的详细讲解
      • 2.1 什么是PGA?
        • PGA的主要用途:
      • 2.2 PGA自动管理的原理与实践
        • 自动管理的好处:
        • 案例演示:启用PGA自动管理
    • 三、Oracle数据库后台进程的高级应用
      • 3.1 归档进程(ARCn)与归档日志管理
        • 归档模式的应用场景
        • 案例演示:启用归档模式
      • 3.2 恢复进程(RECO)与
      • 3.3 数据库监控进程(MMON)的角色
    • 四、总结与下期预告

前言

在上一篇文章【Oracle数据库架构基础】中,我们重点讲解了Oracle数据库的物理与逻辑存储结构,包括数据文件、控制文件、重做日志文件等的作用与管理,以及表空间、段、数据块的结构与优化策略。通过这些内容,大家对Oracle数据库如何在物理和逻辑上存储数据有了一个清晰的认识。

本期内容将聚焦于Oracle数据库的内存与进程架构,深入解析SGA(系统全局区)和PGA(程序全局区)的构成与优化策略,展示这些内存组件如何与Oracle的各类进程协同工作,从而提高数据库的性能和并发处理能力。此外,我们还将解析Oracle数据库中的关键后台进程,详细说明它们的功能与应用场景。最后,我们会为下期内容【安装前的准备工作】进行预告,帮助大家在实际应用中更好地准备Oracle数据库的安装。

一、SGA的深度解析

1.1 SGA的作用与构成

SGA(System Global Area,系统全局区)是Oracle数据库中最重要的共享内存区域,所有的数据库实例共享这块内存。SGA的主要作用是为数据库的运行提供缓存、共享的执行计划、数据块等,从而减少磁盘I/O并提升数据库性能。

SGA由多个组件组成,每个组件都有其特定的功能,主要包括:

  • 数据库缓冲区缓存(Database Buffer Cache):存放从数据文件中读取的数据块,用于减少磁盘I/O操作。
  • 共享池(Shared Pool):存储解析过的SQL语句、PL/SQL程序单元以及数据字典缓存,减少重复SQL解析的开销。
  • 重做日志缓冲区(Log Buffer):存储事务日志,确保数据库的事务一致性和可恢复性。
  • 大型池(Large Pool):用于支持诸如并行查询和RMAN(Oracle恢复管理器)备份等特定操作。
  • Java池:用于存储Java代码与数据,在Oracle中运行Java程序时使用。
SGA的大小与调整

SGA的总大小可以通过SGA_MAX_SIZESGA_TARGET参数进行设置。SGA_MAX_SIZE定义了SGA的最大内存使用量,而SGA_TARGET则是一个自动调节参数,用于在不同组件之间动态调整内存分配,以优化数据库性能。

1.2 数据库缓冲区缓存(DB Cache)

数据库缓冲区缓存(Database Buffer Cache)是SGA中最重要的组件之一,主要用于缓存从磁盘读取的数据块。当用户执行查询时,数据库会优先从缓存中查找数据块,而不是直接从磁盘读取,从而减少I/O操作。

DB Cache的工作原理

DB Cache基于LRU(Least Recently Used,最近最少使用)算法进行管理。常用的数据块会留在缓存中,而很少使用的块则会被淘汰,腾出空间给新读取的数据块。

为了优化性能,可以通过调整DB_CACHE_SIZE参数来增加或减少缓冲区的大小。对于高I/O负载的系统,合理的DB Cache配置可以显著减少磁盘读写操作,提高查询响应速度。

案例演示:调整DB Cache的大小
ALTER SYSTEM SET db_cache_size = 2G;

这条命令将数据库缓冲区缓存的大小设置为2GB。合理的DB Cache配置可以显著减少I/O等待时间,提高查询性能。

1.3 共享池(Shared Pool)的构成与调优

共享池(Shared Pool)是SGA中另一个关键组件,它用于存储SQL语句的解析树、执行计划以及PL/SQL代码块。共享池通过缓存这些信息,减少了SQL语句的重新解析次数,从而提升系统的性能。

共享池的组成部分:
  • 库缓存(Library Cache):存储已解析的SQL语句和执行计划。当相同的SQL语句再次执行时,Oracle可以直接使用缓存中的执行计划,避免重新解析SQL。
  • 数据字典缓存(Data Dictionary Cache):缓存数据库的系统元数据,如表、索引、视图等对象的信息,减少每次查询时访问数据字典表的开销。
共享池的调优策略:
  • 减少硬解析:硬解析会占用较多的系统资源,包括CPU和内存。因此,应该尽量减少SQL的硬解析,鼓励使用绑定变量(Bind Variables)来实现SQL的重用。
  • 共享池大小调整:通过调整SHARED_POOL_SIZE参数,确保共享池有足够的空间来存储常用的SQL语句和PL/SQL程序单元。过小的共享池会导致频繁的硬解析,影响性能。
案例演示:查询共享池的使用情况
SELECT * FROM v$sgastat WHERE pool = 'shared pool';

通过该查询,可以监控共享池的内存使用情况,并根据使用情况调整共享池的大小。

1.4 日志缓冲区(Log Buffer)的配置

日志缓冲区(Log Buffer)是SGA中的一个小型缓冲区,存储了事务的变更记录。事务提交时,Oracle会将日志缓冲区中的数据写入重做日志文件中,以确保数据库的事务一致性和可恢复性。

日志缓冲区的大小配置

日志缓冲区的大小通过LOG_BUFFER参数设置。对于大多数系统来说,日志缓冲区不需要设置得过大,因为Oracle会频繁地将缓冲区中的数据刷新到磁盘。但在高事务量的系统中,适当增大日志缓冲区可以减少日志写入的频率。

案例演示:查看日志缓冲区的写入情况
SELECT name, value FROM v$sysstat WHERE name = 'redo writes';

这条命令用于查看日志缓冲区的写入频率。如果频繁写入磁盘,可能意味着日志缓冲区太小,需要进行调整。


二、PGA的详细讲解

2.1 什么是PGA?

PGA(Program Global Area,程序全局区)是与每个Oracle服务器进程或后台进程相关的私有内存区域。与SGA不同,PGA不在进程之间共享,而是为每个进程独立分配。PGA主要用于处理排序操作、哈希表、会话相关的私有数据等。

PGA的主要用途:
  • 排序区:用于存储排序操作的中间结果。如果排序操作过大超出PGA内存,Oracle会将部分数据写入磁盘,称为“磁盘排序”,这会降低系统性能。
  • 会话内存:存储与会话相关的私有数据。

2.2 PGA自动管理的原理与实践

从Oracle 9i开始,PGA可以自动管理。数据库管理员只需设置PGA_AGGREGATE_TARGET参数,Oracle会根据当前系统的负载自动调整每个进程的PGA内存分配,以优化内存使用和系统性能。

自动管理的好处:
  • 简化管理:无需手动设置每个会话的PGA大小,Oracle会根据工作负载自动调整。
  • 提高资源利用率:自动管理能够更好地利用内存资源,防止内存不足或浪费。
案例演示:启用PGA自动管理
ALTER SYSTEM SET pga_aggregate_target = 4G;

这条命令将PGA的总目标设置为4GB,Oracle会根据此值自动调整每个进程的PGA分配。


三、Oracle数据库后台进程的高级应用

Oracle数据库的后台进程是数据库实例正常运行的关键,这些进程负责管理数据库的日志、恢复、归档、监控等操作。我们将介绍一些重要的后台进程及其在数据库运行中的作用。

3.1 归档进程(ARCn)与归档日志管理

归档进程(ARCn)负责将填满的重做日志文件复制到归档日志文件中。当数据库处于归档模式时,Oracle可以通过归档日志恢复到某一时间点。

归档模式的应用场景

归档模式在生产环境中非常重要,尤其是对于需要高数据可恢复性和长时间事务跟踪的系统。归档模式可以确保所有的提交事务都能被记录并保存在归档日志中,以便在需要时进行恢复。

案例演示:启用归档模式
ALTER DATABASE ARCHIVELOG;

通过启用归档模式,Oracle会自动将重做日志文件复制到归档日志中。

3.2 恢复进程(RECO)与

故障恢复

恢复进程(RECO)主要用于分布式数据库系统中,负责恢复处于失败状态的分布式事务。它能够在网络或系统故障后自动协调分布式事务的提交和回滚操作,确保数据的一致性。

3.3 数据库监控进程(MMON)的角色

MMON(Manageability Monitor)进程是一个负责数据库性能监控的后台进程。它会收集数据库的性能统计数据,并将这些数据写入AWR(Automatic Workload Repository)报告中,供DBA进行分析。MMON还负责触发告警机制,当数据库性能出现问题时,它会生成警告信息,提示管理员采取措施。

四、总结与下期预告

在本期内容中,我们详细解析了Oracle数据库的内存与进程架构。通过对SGA和PGA各个组成部分的深入分析,大家应该对Oracle如何通过内存管理和后台进程提升系统性能有了更清晰的认识。我们还介绍了归档进程、恢复进程和监控进程的高级应用,这些进程在数据库的高可用性和性能监控中发挥着关键作用。

在下一期内容中,我们将重点探讨【安装前的准备工作】,帮助大家了解在安装Oracle数据库之前所需的硬件和软件环境配置要求,以及如何进行系统优化和调整,为后续的安装打下坚实基础。

相关文章:

滚雪球学Oracle[1.3讲]:内存与进程架构

全文目录: 前言一、SGA的深度解析1.1 SGA的作用与构成SGA的大小与调整 1.2 数据库缓冲区缓存(DB Cache)DB Cache的工作原理案例演示:调整DB Cache的大小 1.3 共享池(Shared Pool)的构成与调优共享池的组成部…...

Nginx的正向与反向代理

一、Nginx简介 1. 什么是Nginx Nginx(发音为“engine-x”)是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP代理服务器。Nginx是由俄罗斯的Igor Sysoev(伊戈尔赛索耶夫)为解决C10k问题(即…...

esp8266 at指令链接wifi时一直connect disconnest

那是你的连接wifi的名字密码有误或者热点有问题,看看热点是不是把设备拉入黑名单或者设置为5G或者连了校园网或者设置了最多链接设备...

基于SpringBoot博物馆游客预约系统【附源码】

基于SpringBoot博物馆游客预约系统 效果如下: 主页面 注册界面 展品信息界面 论坛交流界面 后台登陆界面 后台主界面 参观预约界面 留言板界面 研究背景 随着现代社会的快速发展和人们生活水平的提高,文化生活需求也在日益增加。博物馆作为传承文化、…...

【JVM】内存区域划分,类加载的过程,.class文件的格式

一个java写的程序,跑起来就得到了一个java进程,而java进程=JVM上面运行的字节码指令 JVM是「java虚拟机」,负责解释执行java的指令 【JVM内存区域划分】 1.程序计数器(比较小的空间) 作用:保存了下一条…...

esp32-camera入门(基于ESP-IDF)

主要参考资料: ESP32-S2 Kaluga camera lcd 示例入门: https://blog.csdn.net/Marchtwentytwo/article/details/121121028 摄像头应用方案常见问题汇总: https://docs.espressif.com/projects/esp-faq/zh_CN/latest/application-solution/camera-application.html …...

react中类式组件与函数式组件的区别

在React中,类式组件(Class Components)与函数式组件(Functional Components)是两种不同的组件定义方式,它们各有特点,适用于不同的场景。以下是它们之间的主要区别: 一、定义与语法…...

【D3.js in Action 3 精译_030】3.5 给 D3 条形图加注图表标签(下):Krisztina Szűcs 人物专访 + 3.6 本章小结

当前内容所在位置(可进入专栏查看其他译好的章节内容) 第一部分 D3.js 基础知识 第一章 D3.js 简介(已完结) 1.1 何为 D3.js?1.2 D3 生态系统——入门须知1.3 数据可视化最佳实践(上)1.3 数据可…...

【重学 MySQL】五十六、位类型

【重学 MySQL】五十六、位类型 定义赋值与使用注意事项应用场景 在MySQL数据库中,位类型(BIT类型)是一种用于存储位字段值的数据类型。 定义 BIT(n)表示n个位字段值,其中n是一个范围从1到64的整数。这意味着你可以存储从1位到64…...

Centos7 NTP客户端

目录 1. NTP客户端1.1 安装1.2 启动1.3 同步状态异常1.4 更改/etc/chrony.conf配置文件1.5 同步状态正常 1. NTP客户端 1.1 安装 如果chrony没有安装,可以使用以下命令安装 sudo yum install chrony1.2 启动 启动并设置开机自启 sudo systemctl start chronyd …...

手机号归属地查询-手机号归属地-手机号归属地-运营商归属地查询-手机号码归属地查询手机号归属地-运营商归属地

手机号归属地查询API接口是一种网络服务接口,允许开发者通过编程方式查询手机号码的注册地信息。关于快证签API接口提供的手机号归属地查询服务,以下是一些关键信息: 一、快证签API接口简介 快证签API接口可能是一个提供多种验证和查询服务…...

CoppeliaSim和Matlab建立远程连接教程

CoppeliaSim和Matlab建立远程连接教程 Matlab通过调用CoppeliaSim的远程API和库函数实现远程连接,为实现Matlab和CoppeliaSim的联合仿真做准备。 一、获取并查看版本信息 点击 Help 查看版本信息 使用的CoppeliaSim Edu版本为:4.4.0 位数:64bit 二、拷贝API函数和库文件…...

使用STS以及签名URL临时授权访问OSS资源

本文介绍JAVA如何使用STS以及签名URL临时授权访问OSS资源。 注意事项 由于STS临时账号以及签名URL均需设置有效时长,当您使用STS临时账号生成签名URL执行相关操作(例如上传、下载文件)时,以最小的有效时长为准。例如您的STS临时账…...

Next.js 14 使用 react-md-editor 编辑器 并更改背景颜色

1.简介 react-md-editor是一款markdown编辑器,本文介绍如何在Next.js中使用它。 2.安装 安装命令: npm install uiw/react-md-editor3.MD编辑器 markdown编辑器的使用: "use client" import MDEditor from uiw/react-md-edi…...

【Iceberg分析】Spark与Iceberg集成落地实践(一)

Spark与Iceberg集成落地实践(一) 文章目录 Spark与Iceberg集成落地实践(一)清理快照与元数据配置表维度自动清理元数据文件属性手动清理 清理孤岛文件合并数据文件 清理快照与元数据 配置表维度自动清理元数据文件属性 每一次写…...

【Verilog学习日常】—牛客网刷题—Verilog进阶挑战—VL45

异步FIFO 描述 请根据题目中给出的双口RAM代码和接口描述,实现异步FIFO,要求FIFO位宽和深度参数化可配置。 电路的接口如下图所示。 双口RAM端口说明: 端口名 I/O 描述 wclk input 写数据时钟 wenc input 写使能 waddr input 写…...

【强训笔记】day27

NO.1 代码实现&#xff1a; #include<iostream>using namespace std;int n,m; int main() {cin>>n>>m;long long retn;for(int i0;i<m-1;i)retret*(n-1)%109;cout<<ret<<endl;return 0; }NO.2 思路&#xff1a;bfs遍历实现&#xff0c;dis…...

Nginx06-静态资源部署

零、文章目录 Nginx06-静态资源部署 1、静态资源概述 静态资源&#xff1a;是在Web开发中不经常改变的文件&#xff0c;比如图片、CSS样式表、JavaScript脚本文件等。这些资源通常是预先编译好的&#xff0c;不需要服务器端的动态处理。动态资源&#xff1a;是在Web开发中需…...

MySQL数据库专栏(二)SQL语句基础操作

目录 数据库操作 创建数据库 查看数据库 选择数据库 删除数据库 数据表操作 数据表数据类型 数据表列约束 数据表索引 创建表 查看表 查看表结构 删除表 数据表的增删改操作 …...

【OpenCV 实战】1.手势虚拟拖拽(双手骨骼点识别)

step: 1.opencv 获取视频流 2.在画面上画一个方块 3.通过mediapipe获取手指关键点坐标 4.判断手指是否在方块上 5.若在方块上&#xff0c;方块跟着手指移动 mediapipe网站介绍&#xff1a;Hands - mediapipe (chuoling.github.io) 已上传到GitHub &#xff1a; plumqm/OpenC…...

基于springboot人力资源管理系统源码

项目技术&#xff1a;SpringBoot 运行环境&#xff1a;jdk1.8idea/eclipsemaven3mysql5.6 项目描述&#xff1a; 系统包括&#xff0c;员工管理&#xff0c;奖惩管理&#xff0c;合同管理&#xff0c;薪酬管理&#xff0c;培训管理&#xff0c;绩效评估等功能...

如何使用 Apt-Get 和 Apt-Cache 在 Ubuntu 和 Debian 中管理软件包

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 简介 Apt 是 dpkg 打包系统的命令行前端&#xff0c;也是许多发行版中管理软件的首选方式。它是 Debian 及基于 Debian 的 Linux 发行版…...

Linux系统创建新分区并挂载的方法

一、引言 本文以CentOS为例讲述Linux系统创建新分区并挂载的方法。如下图所示&#xff0c;用fdisk -l命令可以看到该CentOS系统下有一个磁盘/dev/vda&#xff0c;其容量为2199G&#xff0c;即2T。该磁盘有两个分区&#xff1a;vda1和vda2&#xff1a; 用lsblk命令可以查看到磁…...

反射第二弹:用注册器动态注册(用自定义的注解标注的)策略,实现策略模式的设计

目录 引言 设计思路: 代码实现: 标注注解:@StrategyClass 扫描注解:trategyScan 注册器抽象类: 动态策略注册类: AOP类: 总结: 引言 曾经有人问我,假如有一个业务或者数据处理逻辑,会根据甲方客户繁杂的业务需求,而动态变化,该怎么处理,具体怎么实现? 将…...

【Xcode Command Line Tools】安装指南

安装指令 xcode-select --install安装 完成安装 验证 $ xcode-select -p /Library/Developer/CommandLineTools...

springboot开发网站-使用redis数据库定时特征限制指定ip的访问次数

springboot开发网站-使用redis数据库定时特征限制指定ip的访问次数。近期网站经常有人恶意访问&#xff0c;提交了很多垃圾信息。为了屏蔽这类灌水帖&#xff0c;打算屏蔽ip地址&#xff0c;限制24小时内只能访问1次某个接口。下面是测试的案例代码内容。 1&#xff1a;首先&am…...

【大模型理论篇】大模型相关的周边技术分享-关于《NN and DL》的笔记

本文所要介绍的一本书《Neural Networks and Deep Learning》&#xff0c;该书作者Michael Nielsen&#xff0c;Y Combinator Research的研究员&#xff0c;是多年之前自己看的一本基础书籍&#xff0c;很适合入门了解一些关于深度学习的概念知识&#xff0c;当然也包含了一些小…...

CSS 圆形边框与阴影

目录 1. 圆角边框 1.1 正圆 1.2 圆角矩形 1.3 任意圆角 1.4 某个圆角 2. 盒子阴影 3. 文字阴影 1. 圆角边框 1.1 正圆 1.2 圆角矩形 1.3 任意圆角 1.4 某个圆角 2. 盒子阴影 3. 文字阴影...

Bianchi模型、python计算及ns3验证

由于项目与学习需要,最近学习了bianchi模型,并在python中进行了公式->代码的转化,仿真结果与ns3结果对比。 本文更多的是理解模型各个部分的含义、把各个简单的推导过程转化为python、ns3对比: 1 理论吞吐与传输概率、传输成功概率、包长、速率、排队时间、成功传输时…...

SQL常用语法

SQL&#xff08;Structured Query Language&#xff09;是一种用于存储、操作和检索数据库中数据的标准编程语言。以下是一些常用的 SQL 语法&#xff1a; 数据库操作 创建数据库&#xff1a;CREATE DATABASE database_name;删除数据库&#xff1a;DROP DATABASE database_name…...