`

全表扫描

 
阅读更多
        全表扫描

发生全表扫描(Full Table Scan)时,用户进程读取表的数据块,并将他们放在LRU链表的LRU端(和上面不同,不是放在MRU端)。这样做的目的是为了使全表扫描的数据尽快被移出。因为全表扫描一般发生的频率较低,并且全表扫描的数据块大部分在以后都不会被经常使用到。
而如果你希望全表扫描的数据能被cache住,使之在扫描时放在MRU端,可以通过在创建或修改表(或簇)时,指定CACHE参数


·        多缓冲池

你可以配置不同的buffer cache,可以达到不同的cache数据的目的。比如,可以设置一部分buffer cache缓存过的数据在使用后后马上释放,使后来的数据可以立即使用缓冲池;还可以设置数据进入缓冲池后就被keep住不再释放。部分数据库对象(表、簇、索引以及分区)可以控制他们的数据缓存的行为,而这些不同的缓存行为就使用不同缓冲池。

o        保持缓冲池(Keep Buffer Pool)用于缓存那些永久驻入内存的数据块。它的大小由参数DB_KEEP_CACHE_SZIE控制;

o        回收缓冲池(Recycle Buffer Pool)会立即清除那些不在使用的数据缓存块。它的大小由参数DB_RECYLE_CACHE_SIZE指定;

o        默认的标准缓存池,也就是上面所说的DB_CACHE_SIZE指定。

这三个参数相互之间是独立的。并且他们都只适用于标准块尺寸的数据块。与8i兼容参数DB_BLOCK_BUFFERS相应的,DB_KEEP_CACHE_SIZE对应有BUFFER_POOL_KEEP、DB_RECYLE_CACHE_SIZE对应有BUFFER_POOL_RECYCLE。同样,这些参数之间是互斥的,即DB_KEEP_CACHE_SIZE和BUFFER_POOL_KEEP之间只能设置一个。

1.1.4.   共享池(Shared pool)

SGA中的共享池由库缓存(Library Cache)、字典缓存(Dictionary Cache)、用于并行执行消息的缓冲以及控制结构组成。

Shared Pool的大小由参数SHARED_POOL_SIZE决定。在32位系统中,这个参数的默认值是8M,而64位系统中的默认值位64M。最大为4G。

对于Shared Pool的内存管理,是通过修正过的LRU算法表来实现的。

下面分别介绍Shared Pool的几个组成部分。

1.1.4.1.            库缓存(Library Cache)

Library Cache中包括共享SQL区(Shared SQL Areas)、PL/SQL存储过程和包以及控制结构(如锁、库缓存句柄)。

任何用户都可以访问共享SQL区(可以通过v$sqlarea访问,随后会介绍这个重要视图)。因此库缓存存在于SGA的共享池中。

·        共享SQL区和私有SQL区

Oracle会为每一条SQL语句运行(每运行一条语句Oracle都会打开一个游标)提供一个共享SQL区(Shared SQL Areas)和私有SQL区(Private SQL Areas属于PGA)。当发现两个(或多个)用户都在运行同一SQL语句时,Oracle会重新组织SQL区,使这些用户能重用共享SQL区。但他们还会在私有SQL区中保存一份这条SQL语句的拷贝。

一个共享SQL区中保存了一条语句的解析树和查询计划。在多用户系统中,Oracle通过为SQL语句使用同一共享SQL区多次运行来节省内存。

当一条新的SQL语句被解析时,Oracle从共享池中分配一块内存来存储共享SQL区。这块内存的大小与这条语句的复杂性相关。如果Shared Pool不够空间分配给共享SQL区,Oracle将释放从LRU链表中查找到最近最少使用的内存块,直到有足够空间给新的语句的共享SQL区。如果Oracle释放的是一个共享SQL区的内存,那么相应的语句在下次执行时需要再次解析并重新分配共享SQL区。而从解析语句到分配共享SQL区是一个比较消耗CPU的工程。这就是为什么我们提倡使用绑定变量的原因了。在没有使用绑定变量时,语句中的变量的数值不同,oracle就视为一条新的语句(9i后可以通过cursor_sharing来控制),重复上面的解析、内存分配的动作,将大大消耗系统资源,降低系统性能。
1.1.4.5.            将重要、常用对象保持(Keep)在共享池中

前面提到,根据LRU算法,一些一段时间没有使用到的内存块会被情况释放。这就可能导致一些重要的对象(如一个含有大量通用算法函数的包、被cache的序列)被从内存中清除掉。这些对象可能只是间歇被使用,但是因为他们的处理过程复杂(不仅包本身重新分配内存、解析,还要检查里面的所有语句),要在内存中重建他们的代价非常大。

我们可以通过调用存储过程DBMS_SHARED_POOL.KEEP将这些对象保持在共享池中来降低这种风险。这个存储过程立即将对象及其从事对象载入library cache中,并将他们都标记为保持(Keeping)状态。对于这种对象,我们建议在实例启动时就Keep住,以减少内存碎片的几率。

有一种观点认为那些大对象(如包)是没有必要被Keep住的,因为他们会被保持在共享池的保留区(如前所述,这个区通常使用率很低),所以一般不可能被清出。这个观点是错误滴!因为大多数大对象实际上是被分为多个小的内存段被载入共享池的,因此根本不会因为对象的大小而受到特别的保护。

另外,也不要通过频繁调用某些对象以防止他们被从共享池中清出。如果共享池大小设置合理,在系统运行的高峰时期,LRU链表会相对较短,那些没有被pin住的对象会很快被清出,除非他们被keep住了。
1.2.            PGA (The Process Global Area)

PGA(Program Global Area程序全局区)是一块包含一个服务进程的数据和控制信息的内存区域。它是Oracle在一个服务进程启动是创建的,是非共享的。一个Oracle进程拥有一个PGA内存区。一个PGA也只能被拥有它的那个服务进程所访问,只有这个进程中的Oracle代码才能读写它。因此,PGA中的结构是不需要Latch保护的。

我们可以设置所有服务进程的PGA内存总数受到实例分配的总体PGA(Aggregated PGA)限制。

在专有服务器(Dedicated Server)模式下,Oracle会为每个会话启动一个Oracle进程;而在多线程服务(Multi-Thread Server MTS)模式下,由多个会话共享通一个Oracle服务进程。

PGA中包含了关于进程使用到的操作系统资源的信息,以及一些关于进程状态的信息。而关于进程使用的Oracle共享资源的信息则是在SGA中。这样做可以使在进程以外中止时,能够及时释放和清除这些资源。
分享到:
评论

相关推荐

    Android开发BLE 串口调试工具,用来和底层进行一些握手协议的调试

    【Android】开发BLE 串口调试工具,用来和底层进行一些握手协议的调试。

    机械设计自动锁垫片机(sw18可编辑+工程图+BOM)非常好的设计图纸100%好用.zip

    机械设计自动锁垫片机(sw18可编辑+工程图+BOM)非常好的设计图纸100%好用.zip

    基于Mediapipe的手势识别前端应用可执行程序+说明.zip

    基于Mediapipe的手势识别前端应用可执行程序+说明.zip # 项目简介 * 基于AutoHotkey制作的摄像头手势识别软件。能让你的电脑摄像头在识别手势后,执行自定义的电脑操作命令。同时也集成了语音识别功能,可调用Windows自带API实现简单的语音助手功能。 * 手势识别调用了高性能的Mediapipe动态链接库来免部署实现。而电脑自动化操作使用AutoHotkey脚本语言来实现,它能更方便的对电脑进行深度调用和流程自动化处理。 # 使用介绍 * 测试环境:Win10 64位(专业版完整镜像) * **第一次运行 Visual_Gesture_Recognition.exe**时,会提示下载手势识别的**依赖包**。点击**确定**后,跟着提示**点击自动下载**

    node-v4.8.0.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    python烟花代码.zip

    python烟花代码python烟花代码.zip python烟花代码.zippython烟花代码.zippython烟花代码.zippython烟花代码.zippython烟花代码.zippython烟花代码.zippython烟花代码.zippython烟花代码.zippython烟花代码.zippython烟花代码.zippython烟花代码.zippython烟花代码.zippython烟花代码.zippython烟花代码.zippython烟花代码.zippython烟花代码.zippython烟花代码.zippython烟花代码.zippython烟花代码.zippython烟花代码.zippython烟花代码.zippython烟花代码.zippython烟花代码.zippython烟花代码.zippython烟花代码.zippython烟花代码.zippython烟花代码.zippython烟花代码.zippython烟花代码.zippython烟花代码.zippython烟花代码.zippython烟花代码.zippython烟花代码.zip

    如何提高APP商业变现能力.docx

    如何提高APP商业变现能力.docx

    node-v12.19.1-linux-ppc64le.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    数据分析:揭示数据背后的智慧与力量

    在数字化时代,数据已成为一种宝贵的资源,而数据分析则是解锁这一资源的关键。数据分析是指运用适当的统计分析和数据挖掘方法,对收集来的大量数据进行详细的研究和概括总结,以最大化地开发数据的功能,发挥数据的作用。 数据分析的过程涉及数据的收集、整理、转化、建模和解释等多个环节。通过对比分析法、分组分析法、结构分析法等多种方法,我们能够深入挖掘数据中的隐藏信息和内在规律,为企业决策、市场研究、科学研究等领域提供有力的支持。 数据分析在现代社会中的应用越来越广泛。例如,在市场调研中,通过对消费者需求、竞争品牌分布等数据的分析,企业可以了解市场潜力、竞争优势和定位策略,从而制定有效的市场推广策略。在社交媒体数据分析中,企业可以通过分析用户的关注人群、点赞、转发等行为,揭示用户的兴趣爱好、消费倾向和口碑传播效果,从而制定有针对性的营销策略。 数据分析工具和技术的发展也极大地推动了数据分析的普及和应用。如R语言和Python语言等编程工具,以及SAS等商业化的数据分析软件,都为数据分析提供了强大的支持。这些工具不仅具有丰富的统计函数和图表绘制能力,还具有高度的灵活性和可扩展性,可以满足各种要求

    水和废水处理化学品的选择和使用指南

    水和废水处理化学品的选择和使用指南

    python输出虚拟棋盘代码示例

    在Python中,可以使用多种方法来创建一个虚拟棋盘。下面是一个简单的示例,使用字符串和循环来创建一个8x8的国际象棋棋盘。 这段代码定义了一个函数print_chessboard,它首先定义了棋盘的一半,然后通过循环来构建整个棋盘。棋盘的每个格子用空格分隔,并且棋盘的行号用数字表示。棋盘的黑白格子使用字符串white和black来表示,其中white表示白格子,而black表示黑格子。 运行这段代码,你会在控制台看到一个8x8的棋盘,其中棋盘的行号从1到8,列号从A到H,棋盘的黑白格子交替出现。 请注意,这个棋盘是虚拟的,仅用于展示布局,并没有实现任何棋盘游戏的逻辑。如果你需要实现一个可以进行游戏的棋盘,你需要添加更多的代码来处理棋子的移动和游戏规则。

    基于modbus协议的大屏数据监控,使用modbus slave模拟数据,串口服务器获取温湿度

    系统使用了Modbus协议完成数据的获取工作,通过Mqtt协议与后端进行连接,获取了数据,完成了数据采集工作。后端通过对数据的处理,进行了数据存储,和接口api的处理。通过WebSocket协议来推送数据。前端展示请求的后端数据。通过此流程完成了工业暖通空调系统的开发。

    机械设计大倾角波状挡边带式输送机sw17可编辑非常好的设计图纸100%好用.zip

    机械设计大倾角波状挡边带式输送机sw17可编辑非常好的设计图纸100%好用.zip

    常见移动变现术语(mobile monetization).docx

    常见移动变现术语(mobile monetization).docx

    R语言绘制SCI科研小提琴图源代码.zip

    把input里面的数据替换成自己的数据,打开R,点Run,可以直接出图!文件适合有R语言基础的同学。

    福克斯初级和猎犬初级电线追踪工具包使用说明书

    福克斯初级和猎犬初级电线追踪工具包使用说明书

    数据库实验报告 SJK完整性语言

    数据库实验报告 SJK完整性语言

    PDU8000 ATS配电箱-T 快速指南

    PDU8000 ATS配电箱-T 快速指南

    串口通过 YMODEM 协议进行文件传输

    串口协议 串口通过 YMODEM 协议进行文件传输 开发环境 框架:Qt 5.7.1 编译器:MSVC2015_64bit IDE:Qt Creator 4.2.0 社区版 操作系统:Windows 10 专业版

    springboot(题库管理系统)

    开发语言:Java JDK版本:JDK1.8(或11) 服务器:tomcat 数据库:mysql 5.6/5.7(或8.0) 数据库工具:Navicat 开发软件:idea 依赖管理包:Maven 代码+数据库保证完整可用,可提供远程调试并指导运行服务(额外付费)~ 如果对系统的中的某些部分感到不合适可提供修改服务,比如题目、界面、功能等等... 声明: 1.项目已经调试过,完美运行 2.需要远程帮忙部署项目,需要额外付费 3.本项目有演示视频,如果需要观看,请联系我 4.调试过程中可帮忙安装IDEA,eclipse,MySQL,JDK,Tomcat等软件 重点: 需要其他Java源码联系我,更多源码任你选,你想要的源码我都有! https://img-blog.csdnimg.cn/direct/e73dc0ac8d27434b86d886db5a438c71.jpeg

    SITOP 电源电源电源电源 20 6EP1 536-2AA00 操作手册

    SITOP 电源电源电源电源 20 6EP1 536-2AA00 操作手册

Global site tag (gtag.js) - Google Analytics