Oracle数据库共享连接和专用连接方式比较

2016-02-19 18:29 3 1 收藏

今天图老师小编要向大家分享个Oracle数据库共享连接和专用连接方式比较教程,过程简单易学,相信聪明的你一定能轻松get!

【 tulaoshi.com - 编程语言 】

  在专用连接方式中,每一个连接到数据库服务器的客户端请求,服务器会和客户端之间建立起连接,这个连接用于专门处理该客户端的所有请求,直到用户主动断开连接或网络出现中断。在连接处于空闲时,后台进程PMON会每隔一段时间,就会测试用户连接状况,如果连接已断开,PMON会清理现场,释放相关的资源。 专用连接相当于一对一的连接,能够快速的响应用户的请求。当然,在连接的时候,首先要创建PGA(Program global area),参数pga_aggregate_target 决定可以由所有服务器进程使用的内存的总量,参数workarea_size_policy 决定是用手动管理还是自动管理。如:

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

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 进程的严重排队,造成性能的严重下降,给你看一个极端的例子,以前的同事公司的。

  代码:

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

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

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

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

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

来源:https://www.tulaoshi.com/n/20160219/1617851.html

延伸阅读
标签: PHP
  我以前用php连接远程oracle8.0.5 for NT 企业版,用ODBC,oracle接口均不行。急煞我也!寻寻觅觅,终于找到了连接的正确方法,我这里用OCI接口,ODBC与oracle还是没有找%m骺?嶣5浇饩霭旆āS幸桓?OCI足已、足已!   源码如下:   <?php $dbconn=OCILogon("zypdp","zypdp","(DESCRIP...
标签: Web开发
用ORACLE9i、oracle8、有很长的一段时间,我把用于JSP中需要注意的问题在这里写出来,仅供大家参考了。 一、如何去处理Clob、BLOB的大类型 CLOB可用于存放大文本数据,最多可存储4GB数据,在应用开发中比较常见.java提供的sql.Clob类与之对应.它提供两个方法来读取Clob的数据: getCharacterStream() 方法返回按unicode编码...
标签: PHP
  4.据库连接 通过PHP你可以轻松的连接到数据库,请求数据并将其显示在你的web站点中,甚至修改数据库中的数据。MySQL是一种很流行的数据库,并且在互联网中有许多有关PHP与MySQL的教程。MySQL是免费的,这一点也许就吸引了不少人。由于其广泛应用,我就不想在这里赘述MySQL的使用方法了。Oracle被大量在企业应用中采用,因此我们就利用O...
【1】首先下载驱动:(cx_Oracle) http://www.python.net/crew/atuining/cx_Oracle/ 不过要注意一下版本,根据你的情况加以选择。 【2】安装: 执行那个exe安装程序就可以了,它会copy一个cx_Oracle.pyd到{PYTHON_HOME}\Lib\site-packages目录下。 【3】执行一段测试程序: import cx_Oracle con = cx_Oracle.connect( ...
标签: Web开发
JSP连接MySql数据库方法 首先先将MySql的数据库连接驱动拷贝到Tomcat/common/lib包下 下载mysql-connector-java-5.1.6.zip http://mysql.cs.pu.edu.tw/Downloads/Connector-J/mysql-connector-java-5.1.6.zip 配置Tomcat的虚拟目录-略 创建jdbcMySql.jsp页面 页面代码如下: 代码如下: %@ page contentType="text/html;charset=gb231...

经验教程

253

收藏

100
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部