Oracle MTS简介

一、什么是MTS

MTS = Multi-Threaded Server

MTS是ORACLE SERVER的一个可选的配置选择,是相对DEDICATE方式而言,它最大的优点是在以不用增加物理资源(内存)的前提下支持更多的并发的连接。

Joseph C.Johnson以餐馆给出一个MTS的形象的比喻  
  假设ORACLE是一家餐馆,当你走进一家餐馆时你感觉最舒服的服务方式就是有一个专门的waiter来为你服务,而不管餐馆中来了多少人,她只对你请求应答,这是DEDICTE的处理方式,也就是说每一个ORACLE客户端的连接都有一个专门的服务进程来为它服务。而大部的餐馆的服方式都不是一对一的,当你走进的时侯,你就被指定了一个waiter,她也可能为其它桌服着务,这对于餐馆来说是最有利的,因为他们可以服务更多的客人而不需要增加他们的员工。这样对你来说也可能是不错的,如果餐馆不是太忙,她服务的客人的请求都很简短且容易完成,你的感觉也好像自己拥有一个专门的waiter,waiter把你的ORDER转给厨师,然后把做好的菜拿给你,这就是MTS的处理方式,这些共享的waiters我们叫她们为Dispatchers,厨师我们则叫他们为Shared Server Processes。

 

二、MTS架构

[metalink-Note:29038.1]

1.  Oracle Multi-Threaded Server Architecture.
----------------------------------------------

                            +-----------+   user
                           +-----------+|   processes
                           |           ||
                           |APPLICATION||
                           |   CODE    ||
                           |           |+
                           +-----------+
                                /|\
                                 |                     CLIENT
          - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
                                 |                     SERVER
                                \|/
                       +----------------------------------+
                      +----------------------------------+|
                      |                                  ||
                      |       DISPATCHER PROCESSES       || 
                      |                                  |+  
                      +----------------------------------+    
                        |                             /|\
                        |                              |
                        |     +-----------+            |
                        |    +-----------+| shared     |
                        |   +-----------+|| server     |
                        |   |  ORACLE   ||+ processes  |
                        |   |SERVER CODE|+             |
                        |   +-----------+              |
                        |    /|\ /|\  |                |
                        |     |   |   |                |
                        |     |   |   |                |
                        |     |  \|/  |                |
        +---------------|-----|-------|----------------|-------+
        |              \|/    |      \|/               |       |
        |   +-------------------+   +----------------------+   |
        |   |     REQUEST       |   |   RESPONSE QUEUES    |   |
        |   |     QUEUES        |   +----------------------+   |
        |   +-------------------+                              |
        |                  SYSTEM GLOBAL AREA                  |
        |                                                      |
        +------------------------------------------------------+

Client Connections to MTS
    ~~~~~~~~~~~~~~~~~~~~~~~~~
 A client process wanting to connect to an Oracle instance using MTS
 should go through the following steps:

  a) Call the listener
  b) The listener tells it to call back on the address where
     the dispatcher is listening (a REDIRECT)
  c) The client calls the dispatcher and establishes a connection.
  d) The dispatcher now has a CLIENT connection ESTABLISHED and
     will also continue to listen for any new connections.
  e) The client sends a SQL message to the dispatcher.
  f) The dispatcher unwraps this message packet and places the
     request onto a queue in the SGA (System Global Area).
     This queue has NOTHING to do with SQL*Net. The SQL*Net
     layer ends in the dispatcher.
  g) A shared server will pick up the request from the SGA queue
     and process it. When there is any result this is placed
     on a separate queue in the SGA ready for the dispatcher.
  h) The dispatcher picks up the response message from the SGA
     and wraps this into a SQL*Net message. This is passed
     back to the client.

 

三、确定你的DB是否在使用MTS

[metalink-Note:1071305.6]

Solution Description:
=====================
 
Look at the "init.ora" parameter MTS_DISPATCHERS.
 
MTS_DISPATCHERS defines the number of dispatchers created when the instance
starts up. If this is set to zero, or is null (default value), then you are NOT
using MTS.

If MTS_DISPATCHERS is greater than zero, then check these other "init.ora"
parameters for valid values:

   MTS_MAX_DISPATCHERS  Maximum number of dispatchers
   MTS_SERVERS  Number of server processes created at startup
   MTS_MAX_SERVERS  Maximum number of shared server processes
   MTS_SERVICE  SID
   MTS_LISTENER_ADDRESS  Configuration of the listener
 

Solution Explanation:
=====================
 
These other "init.ora" parameters may have valid values, but if MTS_DISPATCHERS
is zero or null, MTS is not being used.

四、MTS相关参数的含义

[metalink-Note:29038.1]

The main parameters required to start MTS are:

  o MTS_SERVICE - This parameter establishes the name of the MTS service
    that clients connect to, in order for the dispatchers to handle requests.
   
  o MTS_DISPATCHERS - Dispatchers are detached processes that handle client
    process requests and communicate them to server processes for execution.

    This parameter defines the number of dispatchers to startup for
    each protocol that is configured for MTS.  For example,
 
         mts_dispatchers = "ipc, 2"

  o MTS_SERVERS - This is the number of shared server processes that
    start at instance startup time.  Shared servers service the
    client requests passed on to them by the dispatchers.

  o MTS_LISTENER_ADDRESS - This is the full address for dispatchers to listen
    on, and is the same as the address configured in the TNS listener.  The
    address specification is protocol-specific.  For example:

         mts_listener_address = "(address=(protocol=ipc)(key=sw))"

五、使用MTS连接DB

先在主机命令行 $ lsnrctl services;

"D000" established:0 refused:0 current:1 max:972 state:ready
         DISPATCHER <machine: db1, pid: 3950>
         (ADDRESS=(PROTOCOL=tcp)(HOST=eagle1)(PORT=33166));

查看dispather的监听端口号——33166。(dispather进程名称一般是 ora_dNNN_SID,NNN in (000-999))

在client端的tnsname.ora中,注意:

TODB_MTS =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.2)(PORT = 33166))
    )
    (CONNECT_DATA =
      (SERVER = SHARED)
      (SERVICE_NAME = dbname)
    )
  )

这样可以解决ora-12520问题(当然这只是解决方法之一)

六、一问一答

Q:MTS一定比Delicated模式好吗?

A:不是。如果硬件好点,建议使用Delicated模式。biti语录:“我是能不用MTS就不用”

Q:MTS与Delicated模式可以相互转换吗?

A:可以。

MTS => Delicated

Reset the MTS Parameters in init.ora and reopen your DB.

Delicated => MTS

Added the MTS Parameters in init.ora and reopen your DB.

Q:MTS模式下可以用Delicated连进来吗?

A:可以。(SERVER = Delicated)即可。反之则不行。

Q:RAC环境一定得是MTS吗?

A:不是。

Q:JDBC thin 支持MTS吗?

A:目前不支持。

 

1、large_pool_size这个参数我该设为多大呢?
  
  当large_pool_size的大小能够满足所有的共享服务进程所需的内存就可以了,当然如果内存够用的话可以适当的加大一点,如下的语句便可以得出自实例启动来MTS连接所用的内存的最大数量,可以看出来是200多M。  
  SELECT sum(value) "Max MTS Memory Allocated"  
  FROM v$sesstat ss, v$statname st  
  WHERE name = 'session uga memory max'  
  AND ss.statistic#=st.statistic#
  
  Max MTS Memory Allocated  
  ------------------------  
  214457296
  
2、如何判断我dispatcher的数量是不是够用呢?
  使用如下的语句,当dispatcher的繁忙比率超过50%的时侯,你就要考虑增加Dispatcher的数量了,用Alter system动态却可完成。
  SELECT name, (busy / (busy + idle))*100 "Dispatcher % busy Rate"
  FROM V$DISPATCHER
  
3、如何判断共享服务进程是不是够用呢?
  使用如下的语句来确定每次请求的平均等待时间,监测Average Wait time per reques这个值,当这个值持续增长时你该考虑增加shared servers了。
  SELECT decode(totalq,0,'No Requests') "Wait Time",
  Wait/totalq ||'hundredths of seconds' "Average Wait time per request"
  FROM V$QUEUE
  WHERE type = 'COMMON'
  
4、如何在MTS配置的Server请求Dedicate的连接着?
  你在Tnsnames.ora中做服务名配置时加入SRVR=DEDICATED这个选项就可以了,示例如下:
  billing =
  (DEscrīptION =
  (
  ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = ks3)(PORT = 1521))
  )
  (
  CONNECT_DATA =
  (SERVICE_NAME = billing)
  (SRVR = DEDICATED)
  )
  )

 

七、MTS与DEDICATE方式比较

比较项 MTS方式 DEDICATE方式
服务进程 多个连接共享一个服务进程 一个连接有一个专门的服务进程
每个客户端的连接使用的内存量 3-4M 150-200K
适合的应用环境 适合连接数很多且请求很短少的OLTP环境 如果Oracle服务器的资源够用,这种方式是优选
CPU负载 会造成一些CPU的负载,如果你的CPU有瓶颈,则不要用这种方式  
时间: 2024-09-27 12:46:42

Oracle MTS简介的相关文章

Oracle Spatial 简介

oracle Oracle Spatial 简介:        首先,Oracle 支持自定义的数据类型,你可以用数组,结构体或者带有构造函数,功能函数的类来定义自己的对象类型.这样的对象类型可以用于属性列的数据类型,也可以用来创建对象表.而Oracle Spatial也正是基于此种特性所开发的一套空间数据处理系统.        Spatial 的自定义数据类型有很多,都在MDSYS方案下,经常使用的是SDO_GEOMETRY类型.SDO_GEOMETRY表示一个几何对象,可以是点.线.面.

Oracle autotrace简介

recursive calls 用户或系统产生的递归调用的数量; db block gets:当前数据块被请求的次数; consitent gets 从缓冲区高速缓存中获取重做数据块的数量; physical reads 从磁盘获取数据块的数量 redo size DML语句生成的重做数据的大小 bytes sent via SQL*Net to client 通过Oracle Net向客户端发送数据的字节数 bytes sent via SQL*Net from client 通过Oracle

Oracle并行简介

并行DML操作需注意2点: 1).显示在会话里执行:alter session enable parallel dml; 2).对于Delete.Update .Merge的操作,只有被操作的对象是分区表时,Oracle才会启用并行操作; 3).对于insert只有insert into ...select * from 此形式才有用; 各种并行操作举例如下: --并行delete delete /*+ parallel(t,2) */ * from t; --并行update update /

Oracle分析函数简介:排序

Oracle常用的用于排序的分析函数有3种,rank().dense_rank().row_number(); 测试表如下: 1.rank() 跳跃式排名 with temp as ( select t_id,t_age, rank() over(order by t_age desc) sec  from aaa ) select * from temp --where sec=1--,加上此过滤条件,即可找出排名为1的记录 如果指定分组的话,如下: with temp as ( select

ORACLE审计简介

1.什么是审计 审计(Audit)用于监视用户所执行的数据库操作,并且Oracle会将审计跟踪结果存放到OS文件(默认位置为$ORACLE_BASE/admin/ $ORACLE_SID/adump/)或数据库(存储在system表空间中的SYS.AUD$表中,可通过视图dba_audit_trail查看)中.默认情况下审计是没有 开启的. 不管你是否打开数据库的审计功能,以下这些操作系统会强制记录:用管理员权限连接Instance:启动数据库:关闭数据库. 2.和审计相关的两个主要参数 Aud

Oracle内存结构详解(一) Oracle SGA简介

Oracle的内存配置与oracle性能息息相关.关于内存的配置,是最影响Oracle性能的配置.内存还直接影响到其他两个重要资源的消耗:CPU和IO. 先看Oracle内存存储的主要内容是什么: 程序代码(PLSQL.Java): 关于已经连接的会话的信息,包括当前所有活动和非活动会话: 程序运行时必须的相关信息,例如查询计划: Oracle进程之间共享的信息和相互交流的信息,例如锁: 那些被永久存储在外围存储介质上,被cache在内存中的数据(如redo log条目,数据块). 每个Orac

oracle ebs 简介

哎....现在这年头,只搞db人越来越少,dba的地位越来越低....没办法..为了生存,哥哥决定再跨一个新的领域,去oracle的应用领域去学oracle ebs去... 开工: ebs的内部技术架构:简单概括为如下几个部分:多组织.多语言.多币种.模块化,集成性.并发处理.多技术混用. 我们看一下ebs R12的服务器架构组成: 2.名词解释 ERP系统中有很多职能集成所必需,但手工管理方式下所没有的重要名词.以下一一解释这些名词的意义及功能. 1.现存量(On Hand Quantity)

ORACLE数据库简介

一.概论   ORACLE 是以高级结构化查询语言(SQL)为基础的大型关系数据库,通俗地  讲它是用方便逻辑管理的语言操纵大量有规律数据的集合.是目前最流行的客  户/服务器(CLIENT/SERVER)体系结构的数据库之一.  二.特点     1.ORACLE7.X以来引入了共享SQL和多线索服务器体系结构.这减少了ORACLE 的资源占用,并增强了ORACLE的能力,使之在低档软硬件平台上用较少的资源  就可以支持更多的用户,而在高档平台上可以支持成百上千个用户.    2.提供了基于角

Oracle约束简介

整理自<OCP认证指南> 001 概述     表约束是数据库能够实施业务规则以及保证数据遵循实体--关系模型的一种手段,其中,实体--关系模型由定义应用程序数据结构的系统分析所确定.     在针对定义了约束的表执行任何DML时,如果DML违反了约束,则将自动回滚整个语句.注意,如果一个DML语句影响到多个行,那么,在特定行遇到约束问题前,此语句可能已经局部成功.如果此语句是多语句事务的一部分,那么,事务中已经成功语句将保持完好,但不提交.     考点:如果违反约束,将自动回滚出现问题的整