在Oracle中session和process的区别什么

62次阅读
没有评论

共计 5007 个字符,预计需要花费 13 分钟才能阅读完成。

这篇文章将为大家详细讲解有关在 Oracle 中 session 和 process 的区别什么,文章内容质量较高,因此丸趣 TV 小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

对应元数据表

v$resource_limit。

相互关系

sessions=1.1 * processes + 5 , 至于开多少个进程和你的用户并发数有关。

如果修改要修改数据库初始化参数,processes 和 session

在 Oracle 中 session 和 process 的区别

问:在 Oracle 中 session 和 process 的区别是什么?
答:一、一个 process 可以有 0 个、1 个或者多个 session,一个 session 也可以存在若干个 process 中,并行同样是一个 session 对应一个 process,主 session 是 coordinator session,每个 parallel process 同样会对应数据库里一个单独的 session。可以从 v$px_session 和 v$session 中验证这点。;
    二、连接 connects, 会话 sessions 和进程 pocesses 的关系
每个 sql login 称为一个连接(connection), 而每个连接,可以产生一个或多个会话,如果数据库运行在专用服务器方式,
一个会话对应一个服务器进程(process), 如果数据库运行在共享服务器方式,一个服务器进程可以为多个会话服务。

三、A session is a specific connection of a user to an Oracle server.The session starts when the
user is validated by the Oracle server, and it ends when the user logs out or when there is an
abnormal termination.
In the UNIX environment, most Oracle processes are threads of one master Oracle
process rather than being individual processes. On Windows NT, all processes
consist of at least one thread.

Oracle 专用服务器与共享服务器的区别建立 Oracle 数据库的时候,应该会在数据库建立助手向导上面看到这么一个选项,就是数据库的连接模式采用什么方式。在 Oracle9i 或者 10g 中,可以看到有 2 种连接模式,一种叫做专用服务器连接(dedicated server),另外一种叫做共享服务器连接(shared server)。下面我们来分类说一下这两种连接方式的不同点。

专用服务器模式就是说每次在对 Oracle 进行访问的时候,Oracle 服务器的 Listener 会得到这个访问请求,然后回为这个访问创建一
个新的进程来进行服务。所以说,对于每一个客户端的访问,都会生成一个新的进程进行服务,是一种类似一对一的映射关系。这种连接模式的一个很重要的特点就
是 UGA(用户全局域)是存储在 PGA(进程全局域)中的,这个特性也很好说明了当前用户的内存空间是按照进程来进行分配的。

而另外的共享服务器连接则是一种在程序编
写的时候通常会用到的连接池 (pool) 的概念。采用这种模式的话,在数据库的初始化的时候就会创建一批服务器连接的进程,然后把这些连接进程放入一个连
接池来进行管理。初始化的池中的进程数量在数据库初始化建立的时候是可以手动设置的。在连接建立的时候,Listener 首先接受到客户端的建立连接的请
求,然后 Listener 去生成一个叫做调度器 (dipatcher) 的进程与客户端进行连接。调度器把把客户端的请求放在 SGA(系统全局域)的一个请
求队列中,然后再共享服务器连接池中查找有无空闲的连接,然后让这个空闲的服务器进行处理。处理完毕以后再把处理结果放在 SGA 的相应队列中。调度器通过
查询相应队列,得到返回结果,再返回给客户端。这种连接模式的优点在于服务器进程的数量可以得到控制,不大可能出现因为连接人数过多而造成服务器内存崩
溃。但是由于增加了复杂度以及请求相应队列,可能性能上有所下降。

总之,在开发阶段中,用第一种专用服务器可能好一些,因为少了一些中间的复杂度,而且开发的时候一般连接的数量也少。而在多个应用同时使用一个
数据库的实际应用环境下,采用第二种方法可能好一些,因为如果到时候突然有 1000 个或者 10000 个请求连接的话,数据库服务器如果同时建立 10000
个连接,肯定要受不了的。当然,也要看到时候的实际情况如何再做决定,两者没有绝对的哪种好哪种不好的差别

关于这两者的比较 假如你来到一个城市,要在这个城市的不同的地方办几件事情,在交通方面你有两种选择:一个是雇一辆专车,这辆专车将会把你从 A 带到 B,
一直等你把在 B 的事情办完,在把你从 B 带到 C。。。。。。另一种选择是给出租车公司打电话订辆出租车,先把你从 A 带到 B,然后你和出租车该干嘛干嘛,你去
办你的事情,出租车去接别的生意,等你在 B 的事情办完了,你再跟出租车公司订车,出租车公司将会联系当时在 B 附近的其他出租车去接你。。。。。。

首先,dedicated servers 的设置非常简单 —– 不需要设置,这个是 oracle 的默认选项

而对于 shared servers,你就要需要做一些额外的设置,当让按照 administrator
guide 并不难,关键是你需要决定到底需要多少个 shared server
servers 和多少个 dispatcher,这不仅仅需要经验的积累,还需要持续的观察和调整。
在 dedicated servers 里,你所有的等待都是数据库本身的等待,而在 shared servers 里你有可能需要等待一个 available 的 shared server process。

很明显,当用户并发的连接数很大的时候,dedicated servers 的 server
process 个数也会变得很大,对于操作系统来说多一个 process 就意味着多一点管理负担,要知道操作系统支持的同时并发数可不是无限的。这意味
着,在 dedicate
servers 里,当你有大量的用户连接(比如,同一时间超过 5000 个用户连上来),你的系统负担就会相当大。而这种情况 shared
servers 就可以处理的相对好一些,因为加入同时有 5000 个用户连上来而且我们知道一般只有 1% 的连接是 active,那我们只需要设置 50 个
shared servers 就可以把所有的用户请求处理得很好,并节省了系统资源。

作为一个好处,shared
servers 可以用来控制 concurrent。要知道用户的并发数和系统的处理能力决不是成正比的(可以下面的图),当用户并发数超过一个阀值,系统
的处理能力会明显下降。通过 shared servers 可以控制系统的 concurrent 不超过这个阀值。

在引入 PGA 的自动管理以前,shared servers 是要比 dedicated servers 节省内存的,然后在自动管理的 PGA 引入之后,shared servers 的这个优势已经不像我们想象的那么不明显了。

dedicate servers 一个 server process 为了一个较大的 request 而长时间的工作而不影响其它的 users,然而在 shared servers,一些较大的 request 会影响其它的用户。

还需要考虑其他的因素,比如,如果在前端使用了 weblogic 的 connecting pool,那么你在 database level 再使用 shared servers 可能就不是很必要,因为这时你的用户连接已经在 weblogic 层面上得到了控制。

shared servers 还有一个所谓的伪死锁的问题,这点大家参考一下 tom 的新书就知道了。

关于 dedicated servers 和 shared servers 的话题我们就讨论这么多,最后给大家一个小提示:其实 dedicated
servers 和 shared servers 是可以并存的,实际上,即使你使用了 shared
servers,某些管理操作也是必须在 dedicated 模式下来做的,比如 startup 或 shutdown
database。如果你实在难以选择,如果你的应用可能一部分是 OLTP 的(用户量也很大),一部分是 DW 的,其实你可以考虑同时使用
dedicated servers 和 shared servers。

查看运行情况:

idle show parameter shared_server mts_servers

NAME_COL_PLUS_SHOW_PARAM TYPE
—————————————————————- ———–
VALUE_COL_PLUS_SHOW_PARAM
———————————————————————————————————————————–
max_shared_servers integer
20
shared_server_sessions integer
165
shared_servers integer
1

– 如果 VALUE_COL_PLUS_SHOW_PARAM 大于 0 为 dedicated 模式
idle select p.program,s.server from v$session s , v$process p
2 where s.paddr = p.addr
3 ;

PROGRAM SERVER
———————————————— ———
oracle@infa (PMON) DEDICATED
oracle@infa (DBW0) DEDICATED
oracle@infa (LGWR) DEDICATED
oracle@infa (CKPT) DEDICATED
oracle@infa (SMON) DEDICATED
oracle@infa (RECO) DEDICATED
oracle@infa (TNS V1-V3) DEDICATED
oracle@infa (TNS V1-V3) DEDICATED
oracle@infa (TNS V1-V3) DEDICATED
oracle@infa (TNS V1-V3) DEDICATED
oracle@infa (TNS V1-V3) DEDICATED
oracle@infa (TNS V1-V3) DEDICATED
oracle@infa (TNS V1-V3) DEDICATED
oracle@infa (TNS V1-V3) DEDICATED
oracle@infa (TNS V1-V3) DEDICATED

15 rows selected.

模式切换:

客户端建立的连接。
如果服务器是专用模式,客户端再怎么修改也没有用。
服务器切换专有和共享模式的方法是修改参数文件中的参数。

sample

trace

大多数情况下我们更倾向或习惯专用模式,两种模式下,对 sga 等分配都会有不同,所以如果转换成 mts 模式,别忘了 sga 也是需要调整的。最典型的
是 mts 模式需要较大的 large_pool_size。如果真想转换还是仔细看看 oracle 关于 mts 的文档。共享连接只是把连接 SESSION 信息
放在 LARGE POOL,所以 LARGE POOL 要大一些。而专用连接的 SESION 信息放在 PGA。

Note:
1. 如果是 dedicated server,则客户端只能创建 dedicated server connection
2. 如果是 shared server,则客户端能创建 dedicated server connection 和 shared server
connection,只要在 service name 中指定 server=dedicated or server=shared.

关于在 Oracle 中 session 和 process 的区别什么就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-20发表,共计5007字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)