首页 > 数据库 >成为MySQL DBA后,再看ORACLE数据库(五、内存管理)

成为MySQL DBA后,再看ORACLE数据库(五、内存管理)

时间:2024-06-02 17:33:31浏览次数:37  
标签:PGA DBA SQL sga 内存 MySQL ORACLE

一、前言

在数据库的体系结构中,内存区是非常关键的一部分,一般而言数据库实例也是由内存+后台进程组成。不同于MySQL的单进程多线程架构,ORACLE是多进程架构,所以在内存管理上也更加复杂。ORACLE的内存管理一般分两部分:PGA(Program Global Area)和SGA(System Global Area)。翻开当年学习ORACLE笔记所画的体系结构图,这也是学习ORACLE印象最深的一张图,很清晰的展现了ORACLE的内存,进程,存储引擎等重要组成部分

二、PGA管理

PGA即程序全局区,是服务器进程(Server Process)使用的一块包含数据和控制信息的内存区域。对于Server Process,是当应用端向服务端发起会话连接时,Oracle会为每个会话启动一个Oracle进程,这也是在进程管理中的专用服务器模式,这是Oracle默认的模式。通常来说,PGA中包含私有SQL区(存放绑定信息、运行时内存结构等)、Session 信息等内容。因此可见,PGA是为会话服务的内存区。在PGA管理中,除了预分配的保留内存,PGA一般由以下两部分组成:1.会话内存(Session Memory):用于存放会话的登录信息以及其他相关信息;2.私有SQL区:包含绑定变量信息、查询执行状态信息以及查询工作区等,每个发出SQL查询的会话都拥有一块私有SQL区。

Oracle的应用程序或用户的应用程序执行时,都可能显示或隐式的打开游标(Open Cursor)来进行任务处理,打开游标就需要分配私有SQL区。管理私有SQL区是用户进程的责任,而分配和回收则依赖于具体的应用程序,为了防止过度的SQL工作区分配,Oracle通过OPEN_CURSORS参数来限制每个用户进程能够同时打开的游标数量。

在PGA中,有一部分称之为UGA(User Global Area),这也是经常见到的一个名词,PGA与UGA 关系,就如同Process和Session的关系,PGA是服务于进程的内存结构,包含进程信息;而UGA是服务于会话的,它包含的是会话的信息。

三、SGA管理

SGA即系统全局区,是一块用于加载数据、对象并保存运行状态和数据库控制信息的一块内存区域,通俗来讲就是数据库的数据缓存区域。当数据库启动到nomount状态时,SGA已经分配,同时启动后台进程。上面ORACLE的体系结构图中,显示了SGA的组成部分:

1.Buffer Cache(缓冲区高速缓存),用于存储最近使用的数据块,这个就类似于MySQL的innodb_buffer_pool;

2.Shared Pool(共享池),用于缓存SQL的执行计划,字典信息等,由于MySQL全是硬解析,所以MySQL是没有这部分的;

3.Redo Log Buffer(日志缓冲区),用于redo log的缓存。类似MySQL中的redo log buffer;

4.Large Pool,通常用于并行计算,rman备份恢复操作;

5.Java Pool,主要用于JVM等Java 选件;

关于sga各个区的使用信息可以通过v$sgainfo视图查询,更详细的分配和使用信息还可以通过v$sgastat视图查询。

四、自动内存管理

在通过dbca创建数据库时dbca.rsp文件中有个参数TOTALMEMORY,设置了数据库可用的最大内存,ORACLE根据这个值自动分配sga和pga的大小。此外,ORACLE中有个参数memory_target,这是一个动态参数,只要开启了这个参数,Oracle数据库将自行决定SGA以及PGA的分配和使用,这极大的简化了DBA对于内存的调整和管理工作。ORACLE还有个参数memory_max_target,这是一个静态参数,表示oracle实例的可以达到的最大内存大小,memory_target最大不能超过memory_max_target。对于sga,sga_max_size参数表示sga可以达到的最大内存大小,sga_target表示sga实际使用的实际内存大小,不能大于sga_max_size;对于pga,则通过pga_aggregate_target参数来指定pga最大可用的内存。

对比MySQL,我认为ORACLE的内存管理更加严谨,ORACLE把内存管理分为sga和pga,并且通过自动内存管理,dba无需再额外设置各个内存区域的参数值。而在MySQL中,除了参数innodb_buffer_pool_size的设置,还需要设置innodb_log_buffer_size、read_rnd_buffer_size、tmp_table_size等参数,此外MySQL分配给会话使用的内存和performance_schema使用的内存也需要关注,任何一个地方设置不合理或出现问题都可能导致整个系统内存使用率过高,在内存管理方面MySQL是更容易踩坑的。

 

标签:PGA,DBA,SQL,sga,内存,MySQL,ORACLE
From: https://www.cnblogs.com/coygfly/p/18227229

相关文章

  • 如何在Spring Boot中配置MySQL数据库连接数
    1.如何在SpringBoot中配置MySQL数据库的连接数1.1主要配置在SpringBoot中配置MySQL数据库连接数通常涉及到两个主要的配置:(1)数据源配置:这通常是在application.properties或application.yml文件中完成的,用于设置数据源的基本参数,如URL、用户名、密码等。(2)连接池配置:SpringBoo......
  • oracle数据库文件
    oracle数据库重要的文件包括参数文件,控制文件,数据文件,临时文件,重做日志文件。1参数文件oracle的参数文件可以设置数据库的名称,SGA和PGA的大小,控制文件的路径等系统参数。这些参数可以通过V$PARAMETER视图进行查询。oracle有两类参数文件,分别为pfile参数文件和spfile参数文件。o......
  • MySql基础复习
    本系列参考动力节点老杜MySQL视频教程一.数据库设计三范式1.第一范式:任何一张表都应该有主键,每个字段是原子性的不能再分以下表的设计不符合第一范式:无主键,并且联系方式可拆分。应该这样设计:2.第二范式:建立在第一范式基础上的,另外要求所有非主键字段完全依赖主......
  • MySQL索引
    本系列参考动力节点老杜MySQL视频教程1.什么是索引?索引是一种能够提高检索(查询)效率的提前排好序的数据结构。例如:书的目录就是一种索引机制。索引是解决SQL慢查询的一种方式。2.索引的创建和删除2.1主键会自动添加索引主键字段会自动添加索引,不需要程序员干涉,主......
  • Docker 部署 mysql 服务
    linux用法Container(容器)集合成Services(服务)交互集合成Stack(堆栈)卸载可能存在的旧版本sudoapt-getupdate使apt可以通过HTTPS使用存储库(repository)sudoapt-getinstall-yapt-transport-httpsca-certificatescurlsoftware-properties-common添加Docker官方的......
  • 适合技术小白学习的项目1863java在线视频网站系统 Myeclipse开发mysql数据库web结构ja
    一、源码特点java在线视频网站系统是一套完善的web设计系统,对理解JSPjava编程开发语言有帮助采用了java设计,系统具有完整的源代码和数据库,系统采用web模式,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql,使用java语言开发。java在线视频......
  • 适合技术小白学习的项目1840java swing社团管理系统myeclipse开发Mysql数据库CS结构ja
    一、源码特点   javaswing社团管理系统是一套完善的窗体设计系统,对理解SWINGjava编程开发语言有帮助,系统具有完整的源代码和数据库,,系统主要采用C/S模式开发。应用技术:java+mysql开发工具:Myeclipse8.5、jdk。二、功能介绍社团管理系统要满足以下几个方面的功能需求......
  • MySQL—函数(介绍)—字符串函数(基础)
    一、引言 提到函数,在SQL分类中DQL语句中有一个聚合函数,如COUNT()、SUM()、MAX()等等。这些都是一些常见的聚合函数,而聚合函数只是函数的一种,接下来会详细的学习和介绍一下函数的应用场景和以及mysql当中文件的函数有哪些。二、函数概念:函数是指一段可以直接被另一段程......
  • 【云原生进阶之数据库技术】第二章-Oracle-使用-3.3.2-Oracle Data Guard原理
    2DataGuard原理解析2.1数据同步原理        DG的核心组件包括:主数据库:负责处理所有的写操作,并将这些操作记录在重做日志(RedoLogs)中。备用数据库:可以是物理备用数据库(PhysicalStandby)或逻辑备用数据库(LogicalStandby)。物理备用数据库通常是只读的,而逻辑备用......
  • MySQL安装与使用
    安装#Debian12安装MySQLsudoaptupdatesudoaptinstalldefault-mysql-server#查看服务systemctlstatusmysql#重启服务systemctlrestartmysql#查看版本mysql--version#mysqlVer15.1Distrib10.11.6-MariaDB,fordebian-linux-gnu(x86_64)using......