分享
 
 
 

oracle 的共享连接和专用连接方式之初探

王朝oracle·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

在专用连接方式中,每一个连接到数据库服务器的客户端请求,服务器会和客户端之间建立起连接,这个连接用于专门处理该客户端的所有请求,直到用户主动断开连接或网络出现中断。

在连接处于空闲时,后台进程PMON会每隔一段时间,就会测试用户连接状况,假如连接已断开,PMON会清理现场,释放相关的资源。 专用连接相当于一对一的连接,能够快速的响应用户的请求。当然,在连接的时候,首先要创建PGA(Program global area),参数pga_aggregate_target 决定可以由所有服务器进程使用的内存的总量,参数 workarea_size_policy 决定是用手动治理还是自动治理。如:

SQL> show parameter pga_aggregate_target

NAME TYPE VALUE

------------------------------------ ----------- ------------------------------

pga_aggregate_target big integer 10485760

SQL> show parameter workarea_size_policy

NAME TYPE VALUE

------------------------------------ ----------- --------------

workarea_size_policy string AUTO

而Pga由三部分构成,其中有可以配置的 sort_area_size,还有会话信息,堆栈空间。

sort_area_size是用户用来排序的内存空间:

SQL> show parameter sort_area_size

NAME TYPE VALUE

------------------------------------ ----------- ------------------

sort_area_size integer 524288

假如排序的数据量比较大,排序空间不够用,这时Oracle通过专用算法,对数据进行分段,分段后的数据转移到临时表空间中,在临时表空间中进行排序,完成后,再合在一起,返回给请求的用户。这是大排序为什么使用临时表空间的原因。

在专用连接中,连接所需要的资源全部在PGA中分配。该内存区为指定连接私有,其它进程不能访问。

专用连接采用一对一的连接方式,能很的响应用户的请求,但是,假如连接用户太多时,由于要对每一个连接分配资源,因此,连接数受硬件限制比较大。为了克服这种情况,Oracle 提出了共享连接的连接方法,即用一个服务器的进程响应多个用户连接,与专用连接不同有连接时才创建PGA不同,共享连接在实例一启动,就分配指定数量的服务器进程,所用户的连接,以排队的方式,由分配器指定给服务器进程,其它的进程排队等待。只要用户的请求一执行完,就会马上断开连接,分配器会把空闲的服务器进程分配给其它排除的进程。

采用共享连接可以有效的提高服务器资源的利用率,但是对一个分配器,只支持一种协议,每个分配器有自已的排队队列,在请求的任务完成后,由分配器将操作结果返回给相应的用户进程。但是共享连接的建立, 需要Oracle的监听进程、分配器、共享服务器进程才能共同完成一个连接的创建,所以连接的分配也需要一定的时间和资源。

在共享连接中,sort_area_size 将在 SGA 的 Large_pool 中分配。

上面所说的是两种连接的创建方法和治理方法,在理想的情况下,对于长事务或大事务,使用专用连接,可以有效的提高系统的性能,减少用户等待和事务的排队,提高系统的利用率。对于超短事务和短事务、小事务,使用共享连接方式,可以在资源与效率之间达到一种平稀。比如对于OLTP 系统,使用专用连接,而对于网站等,可以使用共享连接。

那么,能不能在OLTP系统中使用共享连接呢?假如能使用,那么,能不能提高性能呢?

OLTP系统,一般而言,有较多的长事务和大事务,如用户的某几步操作,必须作为一个事务。对于这种情况,我们分析一下,看看,会发生什么样的情况:

分析首先有一个前提,那就是用户请求数要大于共享服务器进程数,否则,减去分配器治理性能支出,共享连接的性能要低于专用连接。

假如用户请求数大于共享服务器进程数,那么肯定有请求是在排队,假定目前一个共享服务器进程正在执行一个长事务,那么请求队列就要一直等,直到当前的事务结束。从用户请求的角度看,很明显,响应的时间加长了。从服务器角度看,我们先看一下由网友 WESTLIFE_XU 提供的实例:

共享连接和长事务是背道而驰的,长事务的共享连接会造成shared 进程的严重排队,造成性能的严重下降

给你看一个极端的例子,以前的同事公司的

代码:

top

6191 oracle 16 0 532m 410m 408m R 14.1 40.6 1969:23 oracle

12599 oracle 15 0 533m 423m 419m S 13.2 41.8 4379:02 oracle

458 oracle 16 0 532m 411m 409m R 12.5 40.7 1808:48 oracle

12602 oracle 16 0 532m 421m 419m R 9.7 41.7 4295:49 oracle

4007 oracle 16 0 533m 410m 408m R 9.7 40.6 1527:16 oracle

13053 oracle 16 0 532m 370m 368m R 8.5 36.6 77:44.69 oracle

13967 oracle 16 0 533m 421m 419m R 8.1 41.7 2384:56 oracle

6228 oracle 16 0 532m 408m 406m R 7.8 40.4 773:24.11 oracle

30806 oracle 16 0 533m 415m 412m R 7.5 41.0 1139:41 oracle

12595 oracle 15 0 533m 97m 96m S 4.4 9.7 1355:51 oracle

12597 oracle 15 0 533m 98m 96m S 2.2 9.7 710:42.61 oracle

12520 oracle 16 0 33388 3680 3000 S 0.3 0.4 4:21.43 tnslsnr

12583 oracle 16 0 533m 308m 306m S 0.3 30.5 6:54.57 oracle

vidb:~# ps -efgrep 6191

oracle 6191 1 13 Dec01 ? 1-08:49:28 ora_s002_SERVICE

vidb:~# ps -efgrep 12599

oracle 12599 1 13 Nov18 ? 3-00:59:09 ora_s000_SERVICE

top10的进程全部都是类似ora_s000的共享服务器进程,服务器负载在10以上

---------

举个例子,200个request共享比说10个共享进程,每个shared进程在一个时间内只能处理一个request,也就是说10个进程在同一时间内只能处理10个request,假如一个request需要很长的处理,会造成其它请求的严重排队。

shared进程要求客户端的每个request要非凡快,假如客户端的一个request就占了很长时间,那别的request就得一直等着,共享就没有什么意义了。

从上面可以看出,假如在有大事务和长事务的OLTP系统中,系统会比原来更慢!

综合来看,共享连接和专用连接各有所长,要害是看应用,能适用于自已应用的连接方式,就是好方式。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有