zoukankan      html  css  js  c++  java
  • Oracle内存组件理论篇一

    目标

      1.SGA结构

      2.PGA结构

    1.SGA

    Shared pool 
        1)、共享池是对SQL、PL/SQL程序进行语法分析、编译、执行的内存区域。
         在执行SELECT * FROM emp语句时,会对sql语句进行语法分析->编译->生成执行计划->运行执行计划等,这些操作都在共享池中完成;
         如果再次执行SELECT * FROM emp语句时,会在共享池中查找是否有相同的sql,如果存在则省去编译、生成执行计划操作步骤而是直接运行执行计划。
         因此养成良好的编码习惯对于提高oracle执行效率非常有帮助。 2)、共享池由库缓存和数据字典缓存组成。 3)、共享池的大小直接影响数据库的性能。

    Database buffer cach 1)、用于存储从磁盘数据文件中读入的数据,所有用户共享。 2)、服务器进程将读入的数据保存在数据缓冲区中,当后续的请求需要这些数据时可以在内存中找到,不需要再从磁盘读取,提高了读取速度。 3)、数据缓冲区的大小对数据库的读取速度有直接的影响。 4)、硬盘上的数据文件中的数据,如何返回给用户的? i、从硬盘取出来,直接返回给用户,使得获取数据的效率非常低。 ii、从硬盘取出来,放到数据缓冲区,从数据缓冲区中把数据返回给用户。下次读取同样的数据的话,直接从数据缓冲区中获取,不需要再从硬盘获取。

    Redo log buffer 1)、日志记录数据库的所有修改信息,日志信息首先产生于日志缓冲区。 2)、当日志缓冲区的日志数据达到一定数量时,由后台进程将日志数据写入日志文件中。 3)、相对来说,日志缓冲区对数据库的性能影响较小。 eg、UPDATE emp SET empno=7935 WHERE empno=7934;
       首先 在日记缓冲区中被记录,
       其次 某个时候(三种情况;一、日志缓冲区中的记录达到1M 二、每隔3秒 三、日志缓冲区已经用了三分之一,满足其中任意一项就可以)把日志缓冲区中的这些记录写到在线日志中去。

    Large pool 为了进行大的后台进程操作而分配的内存空间,主要指备份恢复、大型IO操作、并行查询等。

    Stream pool 为了stream应用而分配的内存空间,高级复制技术一部分。

    JAVA pool 为了java应用而分配的内存空间。

    缓冲池:
    Keep buffer pool 此池用于保留内存中可能要重用的对象,将这些对象保留在内存中可减少 I/O操作。
       通过使池的大小大于分配给该池的各个段的总大小,可以将缓冲区保留在此池中,这意味着缓冲区不必执行过期处理。可
       通过指定DB_KEEP_CACHE_SIZE参数的值来配置
    Recycle buffer pool 此池用于内存中重用几率很小的块,回收池的大小要小于分配给该池的各个段的总大小,这意味着读入该池的块经常需要在缓冲区内执行过期处理。
       可通过指定DB_RECYCLE_CACHE_SIZE 参数的值来配置 nK buffer pool 此池始终存在。它相当于没有保留池和回收池的实例的缓冲区高速缓存,可通过DB_CACHE_SIZE 参数进行配置。 注:保留池或回收池中的内存不是默认缓冲池的子集 CREATE INDEX cust_idx … STORAGE (BUFFER _POOL KEEP); ALTER TABLE oe.customers STORAGE (BUFFER_POOL RECYCLE); ALTER INDEX oe.cust_lname_ix STORAGE (BUFFER _POOL KEEP); BUFFER_POOL 子句用于定义对象的默认缓冲池。它是STORAGE子句的一部分,对CREATE 和ALTER表、集群和索引语句有效。未明确设置缓冲池的对象中的块将进入默认缓冲池。 语法为:BUFFER_POOL [KEEP | RECYCLE | DEFAULT] 。


    2.PGA

      共享连接模式和专用连接模式,PGA的管理方式不同。大多情况下,采用专用连接模式

    专用SQL区    
        发出SQL 语句的每个会话都有一个专用SQL 区。
    提交同一SQL 语句的每个用户也都有其自己的专用SQL 区,该专用SQL 区使用一个共享SQL 区。这样,许多专用SQL 区可与同一个共享SQL 区关联。
    专用SQL 区的位置取决于为会话建立的连接类型。
    如果会话是通过专用服务器连接的,则专用SQL 区位于该服务器进程的PGA 中。
    如果会话是通过共享服务器连接的,则部分专用SQL 区将保留在SGA中


    游标和SQL区 Oracle Pro*C 程序或Oracle 调用接口(OCI)程序的应用程序开发人员可以显式打开特定专用SQL 区的游标或句柄,并在该程序的整个执行过程中将它们用作命名资源。
    数据库为某些SQL 语句隐式发出的递归游标也使用共享SQL 区。


    工作区 对于复杂查询(例如,决策支持查询),会将大部分PGA 供内存密集型运算符分配的工作区专用。
    例如:排序的运算符(ORDER BY 、GROUP BY),散列联接,位图合并,位图创建.


    会话内存 会话内存是用于存放会话的变量(登录信息)以及与会话相关的其它信息的内存。
    对于共享服务器,会话内存是共享的,而不是专用的。
  • 相关阅读:
    permission 文档 翻译 运行时权限
    TabLayout ViewPager Fragment 简介 案例 MD
    Log 日志工具类 保存到文件 MD
    OkHttp 官方wiki 翻译 MD
    Okhttp 简介 示例 MD
    OkHttp 官方Wiki之【使用案例】
    DialogPlus
    倒计时 总结 Timer Handler CountDownTimer RxJava MD
    RecyclerView 判断滑到底部 顶部 预加载 更多 分页 MD
    CSS3的媒体查询(Media Queries)与移动设备显示尺寸大全
  • 原文地址:https://www.cnblogs.com/polestar/p/3777281.html
Copyright © 2011-2022 走看看