** 四、 ** ** 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
1<sid> 这个初始化参数文件中加入了如下的 MTS 的参数,完成了 MTS 的配置。
2
3#mts set by qiuyb
4
5mts_dispatchers="(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.223.125))(DISPATCHERS=10)"
6
7mts_max_dispatchers=20
8
9mts_servers=10
10
11mts_max_servers=50
12
13mts_service=BILLING
14
15mts_listener_address="(address=(protocol=tcp)(host=192.168.223.125)(port=1521))" large_pool_size=400M
16
17#End of qiuyb's Set
18
19需要说明的是 large_pool_size 这个初始化参数,在 MTS 环境中为获取更好的性能建议设置这个参数,这样 UGA 都从 large_pool 这样一个固定的区域中进行分配,而不用从 Shared Pool 中动态进行分配,这样也可以减少 ORA-04031 错误的发生。
20
21** 五、 ** ** 优化 MTS ** ** 配置选项及你可能问的几个问题 **
22
231、 large_pool_size 这个参数我该设为多大呢?
24
25当 large_pool_size 的大小能够满足所有的共享服务进程所需的内存就可以了,当然如果内存够用的话可以适当的加大一点,如下的语句便可以得出自实例启动来 MTS 连接所用的内存的最大数量,可以看出来是 200 多 M 。
26
27SELECT sum(value) "Max MTS Memory Allocated"
28
29FROM v$sesstat ss, v$statname st
30
31WHERE name = 'session uga memory max'
32
33AND ss.statistic#=st.statistic#
34
35Max MTS Memory Allocated
36
37\------------------------
38
39214457296
40
412、 如何判断我 dispatcher 的数量是不是够用呢?
42
43使用如下的语句,当 dispatcher 的繁忙比率超过 50% 的时侯,你就要考虑增加 Dispatcher 的数量了,用 Alter system 动态却可完成。
44
45SELECT name, (busy / (busy + idle))*100 "Dispatcher % busy Rate"
46
47FROM V$DISPATCHER
48
493、 如何判断共享服务进程是不是够用呢?
50
51使用如下的语句来确定每次请求的平均等待时间,监测 Average Wait time per reques 这个值,当这个值持续增长时你该考虑增加 shared servers 了。
52
53SELECT decode(totalq,0,'No Requests') "Wait Time",
54
55Wait/totalq ||'hundredths of seconds' "Average Wait time per request"
56
57FROM V$QUEUE
58
59WHERE type = 'COMMON'
60
614、 如何在 MTS 配置的 Server 请求 Dedicate 的连接着?
62
63你在 Tnsnames.ora 中做服务名配置时加入 SRVR=DEDICATED 这个选项就可以了,示例如下:
64
65billing =
66
67(DESCRIPTION =
68
69(
70
71ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = ks3)(PORT = 1521))
72
73)
74
75(
76
77CONNECT_DATA =
78
79(SERVICE_NAME = billing)
80
81(SRVR = DEDICATED)
82
83)
84
85)
86
87** 六、 ** ** 结文 **
88
89在你的 Oracle 的服务器出现高的内存利用率和出现频繁换页时,使用 MTS 是一个不错的选择。总体上说来, MTS 较适合 OLTP 这种类型的应用,对于那些数据仓库、 DDS 这些类型的应用它则是不适合的。</sid>