concepts阅读总结8——内存结构补充+oracle工具+个别进程

简介: 1、内存结构: 关于之前SGA,PGA的介绍我就不多说了,在我的博客里有专门的介绍: http://blog.csdn.net/changyanmanman/article/details/7256255 我们看看各个区域的介绍吧,这是官方的文档,准确性和权威性不言而喻。

1、内存结构:

关于之前SGA,PGA的介绍我就不多说了,在我的博客里有专门的介绍:

http://blog.csdn.net/changyanmanman/article/details/7256255

我们看看各个区域的介绍吧,这是官方的文档,准确性和权威性不言而喻。

2、数据缓存区:

一个新的点,数据缓存区在逻辑上被分成了好几个组,这种分组的内存管理方式减少了多处理器系统中的资源竞争。(共享SQL区也是这样的

数据缓存区内的缓冲区(buffer)通过两个列表来管理:待写列表(write list)最近最少使用列表(LRU)

待写列表中记录的是脏缓冲区(dirty buffer) 即其中的数据已被修改,但是没有被写入磁盘;

 最近最少列表(LRU)记录的是可用的缓冲区(free buffer)还有被锁定的缓冲区(pinned buffer)以及 还没有来得及被移入待写列表的脏缓冲区。

可用缓冲区内的数据无需继续保留,可以为后来的数据继续使用,锁定的缓冲区就是正在被锁定访问操作的数据

当某个 Oracle 进程访问一块缓冲区时,就会将其移动到 LRU 列表的最近使用(most recently used,MRU)端。随着更多被访问的缓冲区移动到 LRU 列表的 MRU 端,较早前被访问过的脏缓冲区就会逐渐向 LRU 列表的 LRU 端移动。

当 Oracle 的用户进程(user process)首次查询某块数据时,她将首先在数据缓存区内进行搜索。如果用户进程在数据缓存区内找到了所需的数据(称为缓存命中(cache hit)),就可以直接从内存中访问数据。如果用户进程不能在数据缓存区中找到所需的数据(称为缓存失效(cache miss)),则需要从磁盘中的数据文件里将相应的数据块复制到缓存中才能进行访问。缓存命中时的数据访问速度远远大于缓存失效时的速度。

用户进程将数据块读入数据缓存区之前首先要准备好可用缓冲区。用户进程从 LRU 列表的 LRU 端开始对其进行搜索。这个搜索过程将一直持续,直到找到可用缓冲区或达到缓存搜索操作的预设限定值为止。

当用户进程在对 LRU 列表的搜索过程中遇到脏缓冲区时,她会先将此类缓冲区移入待写列表,之后再继续搜索。当用户进程找到了可用缓冲区时,就会将数据块从磁盘写入缓冲区,并将此缓冲区移到 LRU 列表的 MRU 端。

如果 Oracle 用户进程对 LRU 列表的搜索操作达到了预设的限定值而仍旧没有找到可用缓冲区,那么进程将停止搜索并通知 DBW0 后台进程将部分脏缓冲区写入磁盘。

LRU算法和全表扫描:

本来我没有往这里想,全表扫描怎么会和lru算法扯上关系呢?顶多是全表扫描了,把数据都存到LRU列表中就是了,(哦,其实有关系,xiangguan)

当用户进程(user process)执行全表扫描(full table scan)时,她会将存储表数据的数据块读入缓冲区,并将这些缓冲区移动到 LRU 列表的 LRU 端(而不是 MRU 端)。这是因为全表扫描得到的数据通常只是暂时需要的,因此这些缓冲区应当被尽快地移出数据缓存区,为其他使用频率更高的数据块腾出空间。

户可以针对每个表而设定全表扫描时缓冲区的使用方式。具体做法是,在创建(create)或修改(alter)表或簇(cluster)时使用 CACHE 子句,设定在对此表进行全表扫描时将其数据块读入 LRU 列表的 MRU 端。用户可以对数据量较小的检索表(lookup table)或数据量较大的静态历史表(static historical table)进行此项设定,以避免访问此类表导致额外的 I/O 操作。

3、oracle工具:

1、data pump 导入导出工具:

用户在 Data Pump 中可以设定部分或全部地迁移数据及元数据。这个功能是通过数据过滤器(data filter)及元数据过滤器(metadata filter)实现的,这两个过滤器可以在导入及导出工具的参数中进行设定。

数据泵导出工具(data pump export ):他的功能是将数据库的数据及源数据导出。导出到一个叫转储文件集(dump file set)的操作系统文件中,这个转储文件集可以被移动到其他数据库系统中,用数据泵导入工具导入到新的数据库中。

转储文件集由一个或者多个磁盘文件组成,这些文件中包含了表数据,数据库对象元数据,控制信息这三个: 这些文件是二进制的,只有在导入到数据库中才能看到。

数据泵导入工具(data pump import):导入工具(Import)还能够直接从源数据库(source database)向目标数据库进行加载,而无需借助于中间文件(intervening file)。这使导出导入工作能够并行进行,最大限度地缩短了数据迁移所需的时间。这项功能被称为网络导入(network import)。

4、个别进程介绍:

作业队列进程(job queue process)的功能是进行批处理(batch processing)。这种进程用于运行用户的作业(job)。这种进程能够提供作业调度服务(scheduler service),在 Oracle 实例中调度 PL/SQL 语句及存储过程。用户只需提供作业的开始时间及调度间隔,作业队列进程就能够按用户的设定调度作业。

作业队列进程可以被动态地管理。这样当用户需要时就能够使用更多的作业队列进程。当一个作业队列进程进入空闲状态(idle)后,其使用的资源将被释放。

动态的作业队列进程可以按指定的时间间隔运行大量的作业。用户的作业是由CJQ 进程交给作业队列进程执行的。具体步骤如下:

  1. 名为 CJQ0 的协调进程(coordinator process)从系统的 JOB$ 表中定期地查询需要运行的作业。被选出的作业将按照时间排序。
  2. CJQ0 进程动态地生成新的作业队列进程(J000 ... J999)来运行作业。
  3. 作业队列进程执行一个由 CJQ 进程选出的作业。每个工作队列进程每次只能执行一个进程。
  4. 当一个工作队列进程执行完一个作业后,就能够接受下一个作业。如果此时系统中已经没有需要被调度的作业了,此进程将进入休眠状态(sleep state);此进程还会定期地苏醒(wake up)等待分配其他作业。如果在预设的时间内没有新的作业,此进程将终止。

进程监控进程(PMON)

当一个用户进程(user process)失败后,进程监控进程(process monitor,PMON)将对其进行恢复。PMON 进程将清除相关的数据缓存区(database buffer cache)并释放被此用户进程使用的资源。例如,PMON 进程将重置活动事务表(active transaction table),释放锁,并从活动进程列表(list of active process)中删除出错进程的 ID。

PMON 进程会周期性地对调度器(dispatcher)和服务进程(server process)进行检查,重新启动停止运行的进程(不包括 Oracle 有意停止的进程)。PMON 进程还负责将实例和调度器进程的信息注册到网络监听器(network listener)。

同 SMON 进程一样,PMON 进程也会定期地检查系统中是否有问题需要处理,当系统内的其他进程需要服务是也能够调用 PMON 进程。



MMON进程负责执行多种和可管理性相关(manageability-related)的后台任务,例如:

  • 当某个测量值(metrics)超过了预设的限定值(threshold value)后提交警告
  • 创建新的 MMON 隶属进程(MMON slave process)来进行快照(snapshot)
  • 捕获最近修改过的 SQL 对象的统计信息
MMNL 进程负责执行轻量级的且频率较高的和可管理性相关的后台任务,例如捕获会话历史信息,测量值计算等。

MMAN 进程负责执行数据库系统的内部任务。

在使用了自动存储管理(Automatic Storage Management)的实例中,RBAL 进程负责协调磁盘组间的负载平衡工作。她可以使多个实例同时访问一个 ASM 磁盘(global open)。最终由 ORBn 进程实际执行数据扩展的负载均衡。实例中可以运行多个 ORBn 进程,分别为 ORB0,ORB1,以此类推。

数据库实例使用 ASM 磁盘组时,还要启动 OSMB 进程。此进程负责和 ASM 实例(Automatic Storage Management instance)通信。

相关文章
|
2月前
麒麟系统mate-indicators进程占用内存过高问题解决
【10月更文挑战第7天】麒麟系统mate-indicators进程占用内存过高问题解决
274 2
|
3月前
|
存储 Linux 调度
深入理解操作系统:从进程管理到内存分配
【8月更文挑战第44天】本文将带你深入操作系统的核心,探索其背后的原理和机制。我们将从进程管理开始,理解如何创建、调度和管理进程。然后,我们将探讨内存分配,了解操作系统如何管理计算机的内存资源。最后,我们将通过一些代码示例,展示这些概念是如何在实际操作系统中实现的。无论你是初学者还是有经验的开发者,这篇文章都将为你提供新的视角和深入的理解。
|
4天前
|
运维 监控 Ubuntu
【运维】如何在Ubuntu中设置一个内存守护进程来确保内存不会溢出
通过设置内存守护进程,可以有效监控和管理系统内存使用情况,防止内存溢出带来的系统崩溃和服务中断。本文介绍了如何在Ubuntu中编写和配置内存守护脚本,并将其设置为systemd服务。通过这种方式,可以在内存使用超过设定阈值时自动采取措施,确保系统稳定运行。
20 4
|
17天前
|
C语言 开发者 内存技术
探索操作系统核心:从进程管理到内存分配
本文将深入探讨操作系统的两大核心功能——进程管理和内存分配。通过直观的代码示例,我们将了解如何在操作系统中实现这些基本功能,以及它们如何影响系统性能和稳定性。文章旨在为读者提供一个清晰的操作系统内部工作机制视角,同时强调理解和掌握这些概念对于任何软件开发人员的重要性。
|
16天前
|
Linux 调度 C语言
深入理解操作系统:从进程管理到内存优化
本文旨在为读者提供一次深入浅出的操作系统之旅,从进程管理的基本概念出发,逐步探索到内存管理的高级技巧。我们将通过实际代码示例,揭示操作系统如何高效地调度和优化资源,确保系统稳定运行。无论你是初学者还是有一定基础的开发者,这篇文章都将为你打开一扇了解操作系统深层工作原理的大门。
|
26天前
|
Java
JVM运行时数据区(内存结构)
1)虚拟机栈:每次调用方法都会在虚拟机栈中产生一个栈帧,每个栈帧中都有方法的参数、局部变量、方法出口等信息,方法执行完毕后释放栈帧 (2)本地方法栈:为native修饰的本地方法提供的空间,在HotSpot中与虚拟机合二为一 (3)程序计数器:保存指令执行的地址,方便线程切回后能继续执行代码
19 3
|
25天前
|
算法 调度 开发者
深入理解操作系统:从进程管理到内存分配
本文旨在为读者提供一个深入浅出的操作系统知识之旅,从进程管理的基础概念出发,探索内存分配的策略与技巧。我们将通过实际代码示例,揭示操作系统背后的逻辑与奥秘,帮助读者构建起对操作系统工作原理的直观理解。文章不仅涵盖理论知识,还提供实践操作的指导,使读者能够将抽象的概念转化为具体的技能。无论你是初学者还是有一定基础的开发者,都能在这篇文章中找到有价值的信息和启发。
|
1月前
|
算法 调度 C++
深入理解操作系统:从进程管理到内存分配
【10月更文挑战第42天】本文将带你进入操作系统的神秘世界,探索其核心概念和关键技术。我们将从进程管理开始,了解操作系统如何协调和管理多个程序的运行;然后,我们将深入研究内存分配,看看操作系统如何有效地分配和管理计算机的内存资源。通过这篇文章,你将获得对操作系统工作原理的深入理解,并学会如何编写高效的代码来利用这些原理。
|
2月前
|
存储 算法 Java
聊聊jvm的内存结构, 以及各种结构的作用
【10月更文挑战第27天】JVM(Java虚拟机)的内存结构主要包括程序计数器、Java虚拟机栈、本地方法栈、Java堆、方法区和运行时常量池。各部分协同工作,为Java程序提供高效稳定的内存管理和运行环境,确保程序的正常执行、数据存储和资源利用。
55 10
|
1月前
|
存储 Oracle 关系型数据库
【赵渝强老师】Oracle的物理存储结构
Oracle的物理存储结构包括数据文件、联机重做日志文件、控制文件、归档日志文件、参数文件、告警日志文件、跟踪文件和备份文件。这些文件在硬盘上存储数据库的各种数据和日志信息,确保数据库的正常运行和故障恢复。视频讲解和详细说明见原文。

相关实验场景

更多

推荐镜像

更多
下一篇
DataWorks