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

Oracle---PAG程序全局区的组成:堆栈区、会话区、游标区、排序区

文章目录

  • PGA程序全局区
  • PGA主要内容
    • 1、排序区(SORT AREA)
      • **为什么给排序设置合理的排序区大小**
    • 2、会话区(USER SESSON DATA)
    • 3、堆栈区保存变量信息(STACK SPACE)
    • 4、游标区 (CURSOR STATE)


PGA程序全局区

程序全局区或进程全局区(PGA)是内存区,它包含有关单个服务器进程或单个后台进程的数据和控制信息。PGA在创建进程时分配,并在终止进程时回收和释放这个pga所占用的内存空间。与由若干个进程共享的SGA相比,PGA是仅供一个进程使用的区。

PGA区对于数据库的性能有较大的影响,特别是对数据排序操作的性能,必要时合理的管理PGA区能够很大程度上提高数据库的性能

PGA主要内容

1、排序区(SORT AREA)

需要注重排序区的大小,必要的情况下可以手动进行调整排序区的大小

为什么给排序设置合理的排序区大小

当用户对数据进行排序的时候,数据库是怎样处理的呢?

答:首先数据库系统将需要排序的数据保存到PGA程序缓存区中的一个排序区中,然后排序区对这些数据进行排序,如果排序的数据为2m,那么排序区至少要有2m的空间来容纳排序数据量,排序过程中又需要2m的空间来保存排序后的数据,,那么至少本次排序过程中,排序区空间大小应该至少为4m,相当于排序空间的大小等于=排序数据空间大小+排序后的数据空间大小之和

因为在读取数据的情况下,效率值为cup>内存>硬盘,效率成千百比

1、当数据的排序和读取都在内存中进行完成,无疑是很大程度上提高了数据库排序和访问性能,保持排序和读取同时在内存中完成,这是最为理想的状态,这种情况需要具备两个条件:第一,排序区的空间大小必须保持充足,可以通过手动调整参数来保证排序区的空间大小。第二,读取的数据必须在sga共享池中db cache中有缓存,当读取的数据未在数据库缓存区中,只能通过后台进程dbwr访问磁盘中的数据文件dbf,进行一次物理读,将数据缓存到db cache中。
2、当排序区空间不够的情况下,系统会会从硬盘中获取一个空间,来保存需要排序的数据,此时排序的效率会降低很多,如果日常工作中排序的操作较多的情况下,应该为PGA的排序区设置较大的空间,从而提示访问数据库的效率。
综上所述,提高数据库性能和访问效率需要具备两个条件,解决了两个制约因素才能达到最理想的状态,否则性能和访问效率将会大大降低。

2、会话区(USER SESSON DATA)

会话区由oracle数据库自动维护,大部分情况下,无需人工维护此区域,会话区提高的数据库的安全性,数据库不仅仅能存储数据,而且还是统一管理数据的平台,根据要求为不用的用户设置不同的访问权限来访问数据从而有利于提高数据库的安全性

1、当用户进程与数据库建立会话时,oracle系统会将此用户的相关权限查询出来并保存到会话区内,当用户访问数据库中的数据时,oracle系统将核对会话区内的用户的权限,来验证用户是否具有相关的权限.

2、因为oracle系统在会话区内保存了,内存中核对用户权限速度快,若此会话读取的数据在db cache缓存中,速度要比物理磁盘度高出几千倍。

3、堆栈区保存变量信息(STACK SPACE)

有时候为了提高SQL语句的重用性,会在语句中使用绑定变量。简单的说,就是SQL语句可以接受用户传入的变量。从而用户只需要输入不同的变量值,就可以满足不同的查询需求。另外在这个堆栈区内还保存着会话变量、SQL语句运行时的内存结构等重要的信息。
数据库自动管理和维护,无需人工来管理,这些分区的大小,也是系统根据实际情况来进行自动分配的。当这个用户会话结束时,系统会自动释放这些区所占用的空间

4、游标区 (CURSOR STATE)

游标区是一个动态的区域。当用户执行游标语句时,系统就会在这个游标区内创建一个区域。当关闭游标时,这个区域就会被释放。这创建与释放,需要占用一定的系统资源,花费一定的时间。为此在使用游标时,如果频繁的打开和关闭游标,就会降低语句的执行性能。所以笔者建议,在写语句时,如果真的有必要使用游标技术时,则要注意游标不要频繁的打开和关闭。

1、频繁的打开和关闭游标这对游标的操作是不利的,会影响数据库的性能,可以通过限制游标的数量来提高数据库的性能

程序全局区(PGA)主要包含排序区、会话区、堆栈区和游标区四个部分的内容,他们各司其职,完成用户进程与数据库之间的会话。通常情况下,系统管理员主要关注的是排序区,在必要时需要手工调整这个排序区的大小。另外需要主要的是,游标区是一个动态的区域,在游标打开时创建,关闭时释放。故在数据库开发时,不要频繁的打开和关闭游标可以提高游标操作的效率,改善数据库的性能
会话区和堆栈区日常的维护交给数据库系统来完成即可


http://www.kler.cn/a/294614.html

相关文章:

  • LeetCode 86.分隔链表
  • 数字后端教程之Innovus report_property和get_property使用方法及应用案例
  • 【HarmonyOS NEXT】一次开发多端部署(以轮播图、Tab栏、列表为例,配合栅格布局与媒体查询,进行 UI 的一多开发)
  • Spring Boot 中的全局异常处理器
  • HarmonyOS 如何实现传输中的数据加密
  • Spring MVC 与 JSP 数据传输
  • 【debug】nvidia-smi:Failed to initialize NVML: Unknown Error
  • Redis 持久化 AOF、RDB
  • 如果文件从存储卡中被误删除,存储卡数据恢复如何恢复?
  • 【Linux】萌新看过来!一篇文章带你走进Linux世界
  • 【Qt】处理键盘事件
  • Spring-容器:IOC-基于注解管理Bean
  • C++11 --- 智能指针
  • 自然语言处理系列五十》文本分类算法》SVM支持向量机算法原理
  • 超详细!!!electron-vite-vue开发桌面应用之创建新窗口以及主进程和子进程的通信监听(十二)
  • (1)DRF项目服务器部署(Linux/Nginx/Uwsgi)
  • 数据结构---双向链表(内存泄露相关知识)
  • 关于易优cms自定义字段不显示的问题
  • 梧桐数据库(WuTongDB):聚簇索引的原理、实现方法及应用场景
  • [RK3588][Android12] Android->拦截指定进程冻结,避免后台服务长时间运行被系统冻结
  • Spring全局异常处理HandlerExceptionResolver使用
  • 【网络安全基础】网络安全的基本概念与威胁
  • Python批量提取pdf标题-作者信息
  • Redis发布订阅PUB/SUB
  • 04使用python处理交通时空大数据
  • 初识Linux · 进度条