Oracle体系结构:聊聊session与process

news2024/11/26 9:53:18

提前声明:本篇文章讨论的是专用服务器模式下的session和process;不讨论共享服务器模式,因为共享服务器现在真的应用的很少了,独占才是主流。共享服务器往往都是用在资源紧张的场合 ,而且独占服务器模式有独立的PGA;而共享服务器的PGA里只有一个松散的栈区,其余结构都在SGA中。 


目录

session的生成 

session与processes的关系

session与processes的查看

processes的设置思路

processes的修改


DBCA建库配置选项-processes

开局一张图,故事慢慢讲。上面这张图是对于一个Oracle数据库而言,是第一次与process和session接触。这张图是在部署Oracle进行DBCA建库时的配置选项;Oracle对它的描述是:指定操作系统用户进程可以同时连接到数据库的最大数量,这个参数的值包括用户进程和Oracle的后台进程。这个界面是在配置processes数;同时这个配置也决定了session的大小。关于它们的详细信息,请大家耐心阅读下面的描述。

session的生成 

在叙述session生成之前,大家先想象一个场景:

①我本人,需要去医院看病。

②到了医院后,因为对医院并不了解,所以先去了导医台;工作人员告诉了我医院的大概情况。

③了解完情况,我开始去挂号,申请预约医生给我看病。

④医院此时正好有处于闲暇状态的医生,于是通过叫号系统反馈给我可以过来看病了。

⑤我在收到通知后,赶往指定科室和医生碰面,开始看病。

上面这个例子是我结合我的工作环境编的,细节上大家不必纠结。在流程上,我本人就相当于“用户进程”,医生就相当于“server process”;我和医生碰面就相当于产生了“会话” 。在我和医生见面之前发生了很多步骤,那么Oracle在产生会话前也发生了很多的步骤。这些步骤可以总结如下:

①客户端产生一个用户进程(user process),开始向Oracle服务端发出连接请求。           

②用户进程在监听上的实例注册区找到目标Oracle数据库的实例信息。    

③获取到实例信息后,向Oracle申请server process进程。                          

④Oracle生成server process进程,且将准许连接信息通过实例注册区反馈给用户进程。

⑤用户进程收到准许连接信息后找到server process,生成会话(session)。        

以上是会话生成的全过程,从这个过程中是可以提取出几个关键的要点:

  • Oracle生成server process

Oracle收到请求后,生成server process;那是在哪里生成的呢?【在内存区域PGA中的UGA中生成】UGA,user global area:用户全局会话区。

  • Oracle通过监听连接到Oracle

用户进程通过监听,获取到实例信息后,向Oracle正式发出server process请求。那么如果监听崩溃了,会话是否会受到影响呢?【新的会话无法产生,已经产生的会话不会受到影响】

  • Oracle生成server process

Oracle产生server process的数量是有上限的,还记得我们开局的那张图吗?上面就配置了process的最大值,而且Oracle的后台进程还占用了一部分的process。所以当process总量达到Oracle配置的上限时,就不能再生成process了。此时Oracle就会报错 “ORA-00020: maximum number of processes (2048) exceeded”。

session与processes的关系

再强调一遍;在独占(专用)服务器和共享服务器两种模式中,session和processes的关系是不一样的。本篇只会针对独占服务器模式进行叙述。

关于共享和独占模式我也在另一篇文章里简单介绍过了,有需要的同学可以去看下:

文章链接:Oracle体系结构:网络管理-CSDN博客

数量关系

数量关系其实很好理解,这篇文章的第一张DBCA建库配置图大家还记得吧,上面只配置了processes的最大数量,没有配置session的值。因为session的最大值不需要配置,记住哦,是压根不需要我们动手去配置,它会根据processes的最大值去自动设置。而且它们之间的数量比例关系在各个版本中的算法都略有差异,我在这里总结了一下。

10g 

session = 1.1 * processes + 5

11g 

session = 1.1 * processes + 22 

12c,19c

  session = 1.5 * processes + 22

我负责的其中一个项目用的是11g,但现在夜深人静,没有了远程方式....;所以只能给各位同学看下我自己本地的12C、19C的session和processes的值。

12C

同学们可以看到这是12C版本,processes值是300(和DBCA建库配置中的一样哦),session的值是472 = 1.5 * 300 + 22;符合我们上面的公式。

[oracle@oracle12ctwo ~]$ sqlplus / as sysdba

SQL*Plus: Release 12.2.0.1.0 Production on Mon Apr 8 22:03:29 2024

Copyright (c) 1982, 2016, Oracle.  All rights reserved.

Connected to an idle instance.

SQL> startup
ORACLE instance started.

Total System Global Area  838860800 bytes
Fixed Size                  8626240 bytes
Variable Size             322965440 bytes
Database Buffers          499122176 bytes
Redo Buffers                8146944 bytes
Database mounted.
Database opened.
SQL> SELECT value FROM v$parameter WHERE name = 'processes';

VALUE
--------------------------------------------------------------------------------
300

SQL> SELECT value FROM v$parameter WHERE name = 'sessions';

VALUE
--------------------------------------------------------------------------------
472

19C

同学们可以看到这是19C版本,processes值是300,session的值是472 = 1.5 * 300 + 22;也符合我们上面的公式。

[oracle@oracle19c ~]$ sqlplus / as sysdba

SQL*Plus: Release 19.0.0.0.0 - Production on Tue Apr 9 22:32:10 2024
Version 19.3.0.0.0

Copyright (c) 1982, 2019, Oracle.  All rights reserved.

Connected to an idle instance.

  
SQL> startup
ORACLE instance started.

Total System Global Area  838858176 bytes
Fixed Size                  8902080 bytes
Variable Size             373293056 bytes
Database Buffers          448790528 bytes
Redo Buffers                7872512 bytes
Database mounted.
Database opened.
SQL> SELECT value FROM v$parameter WHERE name = 'processes';

VALUE
--------------------------------------------------------------------------------
300

SQL> SELECT value FROM v$parameter WHERE name = 'sessions';

VALUE
--------------------------------------------------------------------------------
472

对应关系

在本篇【session的生成】章节中,已经叙述了在独占模式下,user process 找到对应 server process 产生会话。那么在数据库层面,此时对于已经建立的session,一个session对应一个process。

说到这里,不晓得大家有咩有疑问?不应该是一个session对应两个process吗?user process 和 server process。那么又回到开局那张DBCA建库配置图了,图中英文描述的意思是“指定操作系统用户进程可以同时连接到数据库的最大数量,这个参数的值包括用户进程和Oracle的后台进程”。这句话讲的很清楚,processes 限制的是同时连接到Oracle的user process数量。

session与processes的查看

上文已经叙述了session和process的关系。对于数据库运维来讲,我们咋可能记得住建库的时候设置的processes最大值是多少。那么我们可以通过查询下面的SQL来查看。

  • 查看当前数据库process最大值 
select value from v$parameter where name = 'processes';
  • 查看当前数据库session最大值
 SELECT value FROM v$parameter WHERE name = 'sessions';
  •  查看当前已使用进程数
select count(*) from v$process;
  • 查看当前已使用会话数
select count(*) from v$session;
  • 查看process、session历史最大值 
SELECT 
resource_name,
max_utilization,--自上次启动以来,达到的最大值
limit_value --最大限制
FROM v$resource_limit 
WHERE resource_name IN ('processes','sessions');
  • 查看当前连接最多的主机是哪些 
SELECT machine,COUNT(*) FROM v$session GROUP BY machine ORDER BY 2 DESC; 

其实上面写来写去都是对 v$session、v$process、v$resource三个动态性能视图的查询;可写的花样太多了,大家想要再进一步深入研究就必须得对这三张视图特别熟悉。

另外:

除了对session和process进行监控之外,以上视图还可以联合v$sql等视图将查询效率低下的SQL是在哪台机器上运行的给揪出来、或者可以将哪台机器最近做了什么删表删字段操作给揪出来等等。因为本篇重点还是讲会话和进程,在这块就不多展开了。

processes的设置思路

processes的大小是非常重要的!设置的太大没有意义。

如果设置的太小,就不能满足实际业务的需要,一旦用户进程接近processes最大值,应用系统就会开始变的很卡(实际经历); 一旦超过processes的最大值,数据库就会开始报错:ORA-00020: maximum number of processes (2048) exceeded;而如果并发用户已经达到SESSIONS的值时,又有新会话连接进来,就会报错:ORA-00018:maximum number of sessions exceeded 。此时数据库会发生宕机,我们再次启动数据库后只能通过AWR报告来查看分析这段时间内哪些主机连接较高。

所以在设置processes值的时候,必须充分考虑该Oracle数据库所承担的业务压力。在最高峰时,最大可能会有多少用户进程连接;并在此基础上再增加一些(可以增加个小几百)。

而且最好在DBCA建库时就思考清楚给多少processes值!

processes的修改

在确保您当前的用户有足够的权限之后,执行以下SQL。执行完后,需要重启数据库才能生效哦。这也是为什么上文提到最好在DBCA建库时就思考清楚给多少processes值的原因,因为生产数据库怎么能随便重启呢!

 alter system set processes=500 scope=spfile;

那么session的参数该怎样修改呢?当然是不用手工修改啦,前文提到过session的值是根据process的值自动设置的,设置的规则请看上文【session与process的关系】章节。


❀❀❀  感谢您的阅读哦!❀❀❀

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1587755.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

spring04:注解使用

spring04:注解使用 文章目录 spring04:注解使用前言:一、 Autowired Qualifier和 Resource 和 nullable1. Autowired 2. Resource :使用在类的属性上面(和Autowired类似)3. nullable 二、 Component 和 Re…

bugku-web-你从哪里来

这里就这一句话提示,问我是不是谷歌的? 用谷歌浏览器访问 没看见什么变化 抓包查看 没有变化 这时我想到爬虫中的反爬策略中有一种,判断请求的当前界面来判断用户的起始判断位置 这时抓取报文 GET / HTTP/1.1 Host: 114.67.175.224:1516…

C++初阶:反向迭代器

reverse_iterator的封装实现 Reverse_Iterator.h namespace xx {// 所有容器的反向迭代器// 迭代器适配器template<class Iterator, class Ref, class Ptr>struct Reverse_iterator{Iterator _it;typedef Reverse_iterator<Iterator, Ref, Ptr> Self;Reverse_iter…

MySQL索引优化方法(1/16)

索引优化方法 基本概述 MySQL中有几种索引&#xff1a; 主键索引&#xff08;Primary Key Index&#xff09;&#xff1a;每个表都有一个主键&#xff0c;主键索引是自动创建的唯一索引。它通常是聚簇索引&#xff08;在索引树的叶子结点中存储的是需要查找的数据&#xff0…

C++的并发世界(九)——条件变量

0.绪论——单例模型 单例设计模式是一种常见的设计模式&#xff0c;用于确保某个类只能创建一个实例。由于单例实例是全局唯一的。因此在多线程环境中使用单例模式时,需要考虑线程安全的问题。 1.消费者设计模式 2.condition_variable使用步骤 ①准备好信号量 std::conditio…

基于Spring Boot的旅游管理系统设计与实现

基于Spring Boot的旅游管理系统设计与实现 开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/idea 系统部分展示 旅游方案&#xff0c;用户通过旅游方案可以查看方案编号…

护眼台灯对眼睛有危害吗?比较好的台灯推荐

护眼台灯对眼睛有危害吗&#xff1f;我相信这应该是很多家长所关心的一件事&#xff0c;毕竟现在的孩子近视率实在太高了&#xff0c;而台灯作为夜晚学习不可或缺的一盏照明灯具&#xff0c;光源品质的好坏对眼睛的影响是非常大的&#xff01; 尤其是在这鱼龙混杂的台灯市场上…

Linux:Redis7.2.4的简单在线部署(1)

注意&#xff1a;我写的这个文章是以最快速的办法去搭建一个redis的基础环境&#xff0c;作用是为了做实验简单的练习&#xff0c;如果你想搭建一个相对稳定的redis去使用&#xff0c;可以看我下面这个文章 Linux&#xff1a;Redis7.2.4的源码包部署&#xff08;2&#xff09;-…

02—js数据类型及相互转换

一、数据类型 js把数据分为两类 基本类型&#xff1a;string number boolean undefined null 引用类型&#xff1a;object(fuction(可以执行) array&#xff08;数值下标&#xff0c;内部数据是有序的&#xff09;) 1.Number:数值类型&#xff0c;整数和小数 &#xff08…

【C#】 删除首/尾部字符

代码 static void Main(string[] args){string str "123abc";string strdelete "abc";string str1 str.Trim(1);string strc str1.Trim(c);string str11 str1.TrimStart(1);string strcc str1.TrimEnd(c);string strabc str.Trim(strdelete.ToCharA…

mysql8主从配置报错Authentication plugin ‘caching_sha2_password‘ reported error

错误信息&#xff1a; Error connecting to source slave192.168.2.177:3306. This was attempt 2/86400, with a delay of 60 seconds between attempts. Message: Authentication plugin caching_sha2_password reported error: Authentication requires secure connection.…

连续6年!九州未来获评2024中国边缘计算企业20强

4月9日&#xff0c;由国内中立边缘计算领域研究平台——边缘计算社区策划发起的“2024中国边缘计算企业20强”榜单正式揭晓&#xff0c;九州未来凭借在边缘计算领域的深厚积累以及创新实践&#xff0c;从众多参评企业中脱颖而出&#xff0c;连续6年入选中国边缘计算企业20强&am…

RabbitMQ消息模型之Fanout消息模型

Fanout消息模型 * 广播模型&#xff1a;* 一个交换机绑定多个队列* 每个队列都有一个消费者* 每个消费者消费自己队列中的消息&#xff0c;每个队列的信息是一样的生产者 package com.example.demo02.mq.fanout;import com.example.demo02.mq.util.ConnectionUtils; impor…

Java区域基层卫生云联his系统源码 医院信息管理系统源码

基于云计算的医疗卫生信息系统(cloud-based healthcare informationsystem&#xff0c;简称“云 HIS”)是基于云计算技术&#xff0c;将医院信息系统、电子病历系统、实验室信息系统、公共卫生等系统横向集成的系统&#xff0c;为医疗机构信息化建设提供标准化、信息化、协同化…

Java中的TCP通信

TCP通信 TCP通信Socket客户端ServerSocket服务端 例子&#xff1a;一发一收例子&#xff1a;多发多收异常捕获 例子&#xff1a;服务器与多个客户端同时通信多客户端通信架构服务端代码ServerReaderThread 服务端读数据线程 TCP通信 特点&#xff1a;面向连接、可靠通信 通信双…

Git可视化工具 - 推荐

概述 Git版本管理工具是我们日常开发中常用的工具&#xff0c;熟练使用它可以提高我们的工作效率。 当然老司机基本使用命令行的方式进行操作&#xff0c;新手可借助可视化工具来进行过渡&#xff0c;命令行与可视化工具结合使用来加深对Git的熟悉程度。 下面推荐两个较受欢迎…

第七篇:3.6 其他评估考虑/4.审计指南/5. 通用报告规范/6.披露指南、参考标准及其他 - IAB/MRC及《增强现实广告效果测量指南1.0》

翻译计划 第一篇概述—IAB与MRC及《增强现实广告效果测量指南》之目录、适用范围及术语第二篇广告效果测量定义和其他矩阵之- 3.1 广告印象&#xff08;AD Impression&#xff09;第三篇广告效果测量定义和其他矩阵之- 3.2 可见性 &#xff08;Viewability&#xff09;第四篇 …

Flask基于flask_login实现登录、验证码

flask_login 是一个 Flask 扩展&#xff0c;用于在 Flask web 应用中实现用户会话管理。它允许你跟踪哪些用户已经登录&#xff0c;并管理他们的登录状态。flask_login 提供了用户认证的基础结构&#xff0c;但具体的用户验证&#xff08;如用户名和密码检查&#xff09;和存储…

DAY03|203.移除链表元素、707.设计链表、206.反转链表

203.移除链表元素、707.设计链表、206.反转链表 LeetCode 203.移除链表元素LeetCode 707.设计链表LeetCode 206.反转链表双指针法递归法 LeetCode 203.移除链表元素 注意&#xff0c;在dummy上操作&#xff0c;返回也返回dummy->next 如果头铁想返回head&#xff0c;那样会…

Redis入门到通关之Redis介绍

文章目录 1.Redis简单介绍1.1 非关系型数据库介绍 2.本文介绍如下内容3.初始Redis3.1.认识NoSQL3.1.3.查询方式3.1.4.事务3.1.5.总结 3.2.认识Redis3.3 安装Redis 1.Redis简单介绍 Redis是一种键值型的 NoSql 数据库&#xff0c;这里有两个关键字&#xff1a; 键值型NoSql 其…