ORACLE MTS的介紹(zt)
公司資料庫伺服器負載較大.pgsp已經用去了66%之多
統計了一下程式,確定根本原因在於oracle程式數太多.也就是dedicated連線數太多.
考慮將使用者連線方式改為multithread方式.
檢視Oracle的配置,MTS配置預設已經開啟. v$dispatcher , v$shared_server 中記錄數均為1
但是在客戶端tnsnames.ora 中把 (SERVER = DEDICATED)改為 (SERVER = SHARED)後連線資料庫時,得到錯誤:
ORA-12519:
再回頭看伺服器配置引數 show parameter dispatchers
mts_dispatchers = (PROTOCOL=TCP) (SERVICE=devaXDB)
看監聽器,lsnrctl status 未發現 service devaXDB
metalink帳號失效,只好瘋狂Google. 沒有發現類似的解決方法
alter system register;
後來...
修改了listener.ora , 將
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = shdemo1)(PORT = 1521))
)
中的IP地址改為主機名.
重啟lsnr , OK
作為備忘,將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書中的一幅圖)
1)客戶端向Dispatcher發一個服務請求
2)Dispatch把這個請求放到SGA區的請求對佇列中
3)由一個或幾個服務程式來處理這個請求
4)服務程式把進行的結果放到Dispatch的SGA區的的響應佇列中
5)Dispatcher從響應佇列拾起結果
6)完成客戶端的請求並把結果回送給客戶端
三、MTS與DEDICATE方式方面做一下比較,為方便比較繪製如下的簡表
序號
比較項
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這個初始化引數檔案中加入瞭如下的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 =
(DEscrīptION =
(
ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = ks3)(PORT = 1521))
)
(
CONNECT_DATA =
(SERVICE_NAME = billing)
(SRVR = DEDICATED)
)
)
六、 結文
在你的Oracle的伺服器出現高的記憶體利用率和出現頻繁換頁時,使用MTS是一個不錯的選擇。總體上說來,MTS較適合OLTP這種型別的應用,對於那些資料倉儲、DDS這些型別的應用它則是不適合的。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/756652/viewspace-242436/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle enqueue(zt)OracleENQ
- 【Oracle】Oracle logminer功能介紹Oracle
- ORACLE OWI介紹Oracle
- Oracle ADR介紹Oracle
- ORACLE LARGE MEMORY(zt)Oracle
- oracle event 2 (zt)Oracle
- oracle job管理(zt)Oracle
- Oracle DRM原理介紹Oracle
- 「Oracle」Oracle高階查詢介紹Oracle
- oracle time_zone(zt)Oracle
- AUTO START ORACLE ON LINUX(zt)OracleLinux
- oracle常用函式介紹Oracle函式
- Oracle補丁介紹一Oracle
- 1、Oracle 基礎介紹Oracle
- 【NULL】Oracle null值介紹NullOracle
- crontab命令簡介(zt)
- 簡單介紹oracle重置序列的方法Oracle
- Oracle's Parallel Execution Features(zt)OracleParallel
- How Oracle Store Number internal(zt)Oracle
- Oracle SQL optimization-2(zt)OracleSQL
- 關於Oracle Database Vault介紹OracleDatabase
- 11_Oracle bbed工具介紹Oracle
- Oracle 統計資訊介紹Oracle
- Oracle cluster table(1)_概念介紹Oracle
- 【SCN】Oracle SCN 詳細介紹Oracle
- 【FLASHBACK】Oracle flashback data archive 介紹OracleHive
- 如何配置MTS以穿越防火牆連線oracle防火牆Oracle
- oracle 大頁配置詳細介紹Oracle
- Oracle 備份和恢復介紹Oracle
- 原創:oracle聚合函式介紹Oracle函式
- 原創:oracle 子查詢介紹Oracle
- 原創:oracle DML介紹與使用Oracle
- LGnn 程式介紹(oracle 19c)GNNOracle
- 【DBMS】Oracle DBMS_OUTOUT程式介紹Oracle
- Oracle RAC DRM介紹和關閉DRMOracle
- Oracle認證介紹及入門心得Oracle
- ORACLE 12C Cloud Control(二)介紹OracleCloud
- Oracle資料庫審計功能介紹Oracle資料庫