`

关于Oracle的MTS

 
阅读更多

一、简介

MTS(Multi-Threaded Server)是ORACLE SERVER的一个可选的配置选择,是相对DEDICATE方式而言,它最大的优点是在以不用增加物理资源(内存)的前提下支持更多的并发的连接。换句话说,如果你只有2G的物理内存,而你又想支持2000个连接,在获取最好性能的前提下,你就应该选择MTS了。

本文先说一说MTS的工作方式,然后与DEDICATE方式的做一下比较,接下来说一下MTS具体配置实现,最后说一些优化MTS配置选项的问题。

二、MTS的工作方式

1、Joseph C.Johnson以餐馆给出一个MTS的形象的比喻

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

2、以简图说一下MTS的工作方式(SYBEX书中的一幅图)

Oracle MTS的工作方式

1)客户端向Dispatcher发一个服务请求

2)Dispatch把这个请求放到SGA区的请求对队列中

3)由一个或几个服务进程来处理这个请求

4)服务进程把进行的结果放到Dispatch的SGA区的的响应队列中

5)Dispatcher从响应队列拾起结果

6)完成客户端的请求并把结果回送给客户端

三、MTS与DEDICATE方式方面做一下比较,为方便比较绘制如下的简表

序号 <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?>

比较项

MTS 方式

DEDICATE 方式

1

服务进程

多个连接共享一个服务进程

一个连接有一个专门的服务进程

2

每个客户端的连接使用的内存量

3-4M

150-200K

3

适合的应用环境

适合连接数很多且请求很短少的 OLTP 环境

如果 Oracle 服务器的资源够用,这种方式是优选

4

CPU 负载

会造成一些 CPU 的负载,如果你的 CPU 有瓶颈,则不要用这种方式

 


四、  MTS的配置实现

1、  Oracle8i MTS环境常用到的几个参数

序号

参数

说明

1

mts_dispatchers

用于配置当 Instance 启动的时侯启用的 Dispatcher 的数量、及 Dispatcher 所响应的协议,它是一个动态的参数,可以用 Alter system 进行动态修定,它没有默认值。

2

mts_max_dispatchers

用于指定同时运行的 Dispatcher 进程的最大数量,对于大部分的应用,每 250 个连接启用一个 Dispatcher 可以获得较好的性能。默认值是 5 或所配置的 Dispatcher 的数量

3

mts_servers

用于指定当 Instance 启动时你想启用的服务进程的数量,它是一个动态参数,可以用 Alter systme 动态修定。

4

mts_max_servers

用于指定同时进行的共享的库的服务进程的数量,如果你的系统经常出现死锁,应该适当的增加这个值。

5

mts_service

设为 SID

6

mts_listener_address

TNS 监听的地址


2、  Oracle9i MTS环境常用到的几个参数

序号

参数

说明

1

Dispatchers

等同于8i中的mts_dispatchers参数

2

max_dispatchers

等同于8i中的mts_max_dispatchers参数

3

shared_servers

等同于8i中的mts_server参数

4

max_shared_servers

等同于8i中的mts_max_servers参数


3、  以我一个实际环境(Oracle8.1.7.4)举个例子,9i类似,我在Init<SID>这个初始化参数文件中加入了如下的MTS的参数,完成了MTS的配置。

#mts set by qiuyb
mts_dispatchers="(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.223.125))(DISPATCHERS=10)"
mts_max_dispatchers=20
mts_servers=10
mts_max_servers=50
mts_service=BILLING
mts_listener_address="(address=(protocol=tcp)(host=192.168.223.125)(port=1521))" large_pool_size=400M
#end of qiuyb's set 

需要说明的是large_pool_size这个初始化参数,在MTS环境中为获取更好的性能建议设置这个参数,这样UGA都从large_pool这样一个固定的区域中进行分配,而不用从Shared Pool中动态进行分配,这样也可以减少ORA-04031错误的发生。

五、 优化MTS配置选项及你可能问的几个问题

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 =
(DESCRIPTION =
  (
   ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = ks3)(PORT = 1521))
  )
  (
   CONNECT_DATA =
    (SERVICE_NAME = billing)
    (SRVR = DEDICATED)
  )
)


六、 结文

在你的Oracle的服务器出现高的内存利用率和出现频繁换页时,使用MTS是一个不错的选择。总体上说来,MTS较适合OLTP这种类型的应用,对于那些数据仓库、DDS这些类型的应用它则是不适合的。


继续说一说Oracle的MTS

1、在Oracle Server调整为MTS方式后,一些客户端出现了连不上Oracle Server的状况,大部分报的错为TNS-12509,如何解决?

回答:
在实际过程中是存在着这方面的情况,我总结了一下,大部是由Oracle8 的client引起的,就是那些配服务名还得挂着个.world的那种客户端,其实解决起来很简单,只需要把tnsname.ora这个文件中你的那个服务名配置的"sid="改成"service_name=",这就Ok了。

2、我使用了成都迈普公司的"隧道网关"这种产品,以前在dedicated方式是好好的,可是改成MTS后,为什么Client死活连不是Oracle的Server呢?

回答:
其实我们公司也用了这种产品,在MTS应用之初也遇到了这个问题。出现这个问题的原因为迈普的这种产品只为监测静态的端返回,它认为Oracle的监听端口即为返回端口,实际在MTS中不是这样的,多进行几次连接,用netstat -n在客户端观看一下就会明白,MTS返回的端口是动态的,所以迈普的这个产品就不好用了。解燃眉之急的办法可以这样:在MTS客户端配置"服务名"时,请求个Dedicate的连接,即使用SERVER = DEDICATED选项,这就把问题解决了。

3、如何跟踪一下MTS的dispatcher和shared server进程?

回答:
这需用到诊断事件了,dispatcher的诊断事件号为10248,shared server的为10249,如下以shared server为例简单说一下,假定s015的操作系统的进程号为13161.

sql>conn sys/pass as sysdba
sql>oradebug setospid 13161 
sql>oradebug TRACEFILE_NAME   --看一下跟踪文件的名称
sql>oradebug EVENT 10249 trace name context forever, level 10

也可以在init<SID>.ora中加入如下两行完成trace:

event="10248 trace name context forever, level X"  -- dispatchers
event="10249 trace name context forever, level X"  -- shared servers


4、如何在MTS中设置IPC

回答:
LISTENER.ORA:
=============
 
LISTENER=
  (ADDRESS_LIST=
     (ADDRESS=
        (PROTOCOL=IPC)
        (KEY=<sid name>)
     )
     (ADDRESS=
        (PROTOCOL=IPC)
        (KEY=<alias in tnsnames.ora for the sid>)
     )
  )
CONNECT_TIMEOUT_LISTENER=10
STARTUP_WAIT_TIME_LISTENER=0
SID_LIST_LISTENER=
  (SID_LIST=
    (SID_DESC=
      (SID_NAME=<sid name>) 
      (ORACLE_HOME=<home directory path for Oracle>)
    )
  )
 
地址列表中可以使用其它的协议,加入应的地址。这个例子完全是一个IPC的例子
 
TNSNAMES.ORA:
=============
 
<alias>=
  (DESCRIPTION=
     (ADDRESS=
        (PROTOCOL=IPC)
        (KEY=<sid name>)
     )
     (CONNECT_DATA=
        (SID=<sid name>)
     )
  )
 
 
INIT.ORA entries for MTS:
=========================
 
MTS_DISPATCHERS="IPC,2"
MTS_SERVERS=1
MTS_MAX_DISPATCHERS=6
MTS_MAX_SERVERS=3
MTS_SERVICE=<sid name>
MTS_LISTENER_ADDRESS="(ADDRESS=(PROTOCOL=IPC)(KEY=<sid name>))"


5、如何查看一下某个shared_server正在忙什么?

回答:
其实这与Dedicated方式的查看方法是一样的,还以s015为例,它的spid为13161,使用如下的sql便可查出:

SELECT a.username,
       a.machine,
       a.program,
       a.sid,
       a.serial#,
       a.status,
       c.piece,
       c.sql_text
  
FROM v$session a,
       v$process b,
       v$sqltext c
 
WHERE b.spid=13161
   
AND b.addr=a.paddr
   
AND a.sql_address=c.address(+)
 
ORDER BY c.piece

6、我在unix看到一个shared server的进程占用了大量的CPU资源,通过select addr from v$process where spid=<os process pid>查到进程的address,而select * from v$session where paddr=<paddr>确没的结果,所以我无法得知我的这个shared server在忙什么,我该怎么办呢?

回答:

SELECT status FROM v$circuit 
 
WHERE CIRCUIT IN 
  (
   
SELECT circuit FROM v$shared_server 
    
WHERE paddr=<your paddr>
  )


如果status的返回是EOF,说明实际这个shared server已经掉死了,你可以把它在操作系统上清除掉了:
eg:
  oracle$kill -9 <shared server's pid>

你不用担心kill掉会有什么大的影响,其它几分钟之后,pmon会为你把这个shared server进程给重新启动的。


7、如何在非down库的情况下恢复到Dedicate的连接方式,及启用更多的dispatcher?

回答:
7.1关掉:
  sql>ALTER SYSTEM SET MTS_DISPATCHERS='TCP,0';

7.2启用更多的dispatcher
  sql>ALTER SYSTEM SET MTS_DISPATCHERS='TCP,40';



本文转载自CSDN上hrb_qiuyb的三篇文章
说一说如何配置Oracle的MTS Part1
说一说如何配置Oracle的MTS part2
继续说一说Oracle的MTS

分享到:
评论

相关推荐

    Oracle 11g R2的卸载与重装

    Oracle 11g R2 的卸载与重装是一个复杂的过程,涉及到多个步骤和关键环节。在卸载Oracle 11g R2时,通常需要使用提供的deinstall工具,这个工具位于安装目录下的deinstall子目录,通过运行deinstall.bat批处理文件来...

    Oracle Instant Client 11.2.0.1.0 轻量级Oracle客户端

    此版本不支持 Pro*C/C++和.NET程序所需的Oracle Provider for OLE DB,如需支持上述功能,请访问并下载ODAC(Oracle Data Access Components,其包含 ODP.NET, Oracle Services for MTS, Oracle Providers for ASP...

    Oracle新手DBA入门.pdf

    这些服务包括Oracle VSS Writer Service、Oracle DBConsole、Oracle Job Scheduler、Oracle MTS Recovery Service、***扩展服务的一部分(如OracleOraDb11g_home1ClrAgent),以及Oracle监听器服务(OracleOraDb11g_...

    安装Oracle9i for windows

    如果你计划使用多线程服务器(MTS)架构,你需要配置Oracle MTS Recovery Services,以确保在MTS环境下的事务恢复。 10. **摘要** 在这一步,安装程序会展示你所选择的所有配置选项,确认无误后点击“安装”进行...

    oracle启动项配置快捷

    - **OracleMTSRecoveryService**:Oracle MTS Recovery Service是用于处理多线程服务器模式下的异常任务恢复的服务。 - **OracleOraDb11g_home1TNSListener**:这是Oracle TNS监听器服务,负责监听来自客户端的连接...

    ORACLE认证考试大纲

    Oracle认证考试大纲主要涵盖了一系列关于Oracle数据库网络架构和管理的知识点,旨在测试考生对Oracle网络解决方案的深入理解和应用能力。以下是对大纲中各部分主要内容的详细解析: **第一部分:Networking** 这...

    oracle资料

    这份"oracle资料"压缩包包含了一系列关于Oracle的学习资源,适合对Oracle感兴趣或准备Oracle相关考试的人员。 首先,我们有两份名为"初级考试卷2.doc"和"考试卷1.doc"的文档,这很可能是Oracle认证的初级考试模拟...

    oracle9i 安装ppt

    Oracle MTS是Oracle的一种多线程服务器模式,用于提高并发处理能力。在安装时,你需要根据预期的工作负载和资源来决定是否启用MTS。 ### 总结 Oracle9i的安装是一个系统性的工作,涉及到多个步骤和配置。正确地...

    oracle9i 安装和卸载方法

    - **OracleServices for Microsoft Transaction Server**:在此步骤中,您可以设置Oracle MTS Recovery服务程序的监听端口,默认为2030,通常不需要更改。 - **数据库标识**:设置Oracle全局数据库名和Oracle系统...

    win10安装oracle19c,sqlplus安装

    打开服务,查看 Oracle 相关四个进程,三个正在运行即可,TNS 监听,OracleServiceORCL 单实例,和 MTS 正在运行即可,vss 状态无所谓。 七、配置 TNSnames.ora 找到 tnsnames.ora 文件,并增加刚才创建的 pdb,...

    Using Microsoft Transaction Server with Oracle8 Release 8.1.6

    3. **性能优化**:可能包含关于在MTS下优化Oracle性能的建议,如调整数据库参数,缓存管理,以及SQL查询优化等。 4. **安全性**:讨论如何在MTS和Oracle之间建立安全连接,包括认证、授权和加密,以保护数据的安全...

    Oracle傻瓜手册

    - **MTS(多线程服务器)**:配置Oracle MTS提高性能的方法。 - **调整**:根据实际需求调整数据库参数来优化性能。 #### 六、版本更新记录 - **2000/07**:版本1.0发布。 - **2000/09**:版本1.1,增加了Linux...

    Oracle内存分配与调整--大牛冯春培的一篇文章

    在使用共享服务器模式(MTS)时,一部分PGA(即UGA)会被放入大型池(Large Pool)中。 ##### 2.2 内存参数的差异性 冯春培指出,在查询`v$parameter`、`v$sgastat`、`v$sga`等视图时,会发现它们之间存在差异。这些...

    oracle数据库体系结构之一【连接配置】

    在Oracle数据库的连接配置方面,主要有三种连接方式,分别是组合用户与服务器结构、专用服务器(Dedicated Server)结构以及多线程服务器(Multithreaded Server,MTS)体系结构。 1) **组合用户与服务器结构**: ...

    SQL-Server链接服务器访问Oracle.docx

    Oracle Services for MTS是Oracle与Microsoft Transaction Server (MTS)集成的关键,它允许Oracle数据库作为MTS分布式事务的一部分。配置Oracle Services for MTS后,可以使得COM组件在参与MTS交易时通过Oracle进行...

    Oracle XML核心技术

    - **ObjectContext对象**: 用于控制ASP的执行流程,通常由MTS(Microsoft Transaction Server)管理。 #### 四、示例:Response和Request对象的使用 下面通过具体的代码示例来展示如何使用Response和Request对象: ```...

    Direct Oracle Access v4.1.3 bcb6

    除了以上提及的特性之外,还支持Oracle 8和Oracle 8i特性,如LOB定位、对象和参考、XML TYPE、时间戳、滚动查询、密码到期、外部程序开发以及MTS Oracle服务等。 主要功能: 按范例查询模式 ——TOracleDataSet组件...

Global site tag (gtag.js) - Google Analytics