Oracle之關(guān)于各類連接超時相關(guān)參數(shù)學(xué)習(xí)
目錄
- 一、 EXPIRE_TIME
- 1. 使用說明
- 2. 使用限制
- 二、 IDLE_TIMEOUT
- 三、 SESSION_TIMEOUT
- 四、 INBOUND_CONNECT_TIMEOUT
- 五、 profile中的idle_time
- 六、 profile中的connect_time
- 總結(jié)
最近遇到些空閑連接超時相關(guān)的問題,查了下主要有以下與超時相關(guān)參數(shù),整理記錄含義及區(qū)別。
EXPIRE_TIME
IDLE_TIMEOUT
SESSION_TIMEOUT
INBOUND_CONNECT_TIMEOUT
- profile中的
idle_time
- profile中的c
onnect_time
一、 EXPIRE_TIME
1. 使用說明
EXPIRE_TIME 用于死連接檢測。設(shè)定該參數(shù)為非零值,12c前會定期給空閑連接發(fā)送探測包檢查客戶端是否已異常斷開(12c開始則利用操作系統(tǒng)keepalive參數(shù)進行檢測)。
一旦發(fā)現(xiàn)異常連接,最多會重傳操作系統(tǒng)參數(shù)tcp_retries2指定次數(shù)。
如果超過最大重試次數(shù)仍重傳失敗,將返回錯誤并通知oracle pmon進程清除對應(yīng)的server process。
值得注意的是,根據(jù)文檔 Doc ID 395505.1,如果在1個SQLNET.EXPIRE_TIME之內(nèi)客戶端有數(shù)據(jù)包發(fā)送,在SQLNET.EXPIRE_TIME時間到來時,oracle不會再發(fā)送探測數(shù)據(jù)包給客戶端,這樣有可能出現(xiàn)最大2*SQLNET.EXPIRE_TIME時間端內(nèi),沒有發(fā)送探測包給客戶端的情況。
比如設(shè)置sqlnet.expire_time=10,最大空閑時間則可能為2*600=1200秒,如果防火墻空閑超時為910秒,完全可能出現(xiàn)在探測包發(fā)送之前,空閑連接就已經(jīng)被斷開的情況。
2. 使用限制
新設(shè)置參數(shù)對舊連接上不生效(It is not allowed on bequeathed connections.)
探測數(shù)據(jù)包雖然很小,卻也會產(chǎn)生額外的流量,可能降低網(wǎng)絡(luò)性能
根據(jù)操作系統(tǒng)不同,服務(wù)器可能需要執(zhí)行其他處理,以區(qū)分連接探測事件和其他事件,這也會導(dǎo)致網(wǎng)絡(luò)性能下降。
二、 IDLE_TIMEOUT
空閑超時時間。指定已建立的連接在不傳輸數(shù)據(jù)的情況下可以保持活動狀態(tài)的時間。
Oracle默認(rèn)情況下不會關(guān)閉非活躍連接(IDLE_TIMEOUT=0),但非活躍連接過長時間不退出可能導(dǎo)致連接數(shù)過高,浪費數(shù)據(jù)庫資源。
將IDLE_TIMEOUT設(shè)置為大于0的值(單位為秒)指定會話空閑超時時間,到達(dá)超時時間后會話會被數(shù)據(jù)庫中斷。
通常防火墻會有kill空閑連接的配置,可以看看是否有必要重復(fù)設(shè)置。如果要設(shè),IDLE_TIMEOUT指定的時間應(yīng)該小于防火墻指定的空閑時間。
EXPIRE_TIME 與 IDLE_TIMEOUT的區(qū)別:
EXPIRE_TIME
檢查的是客戶端由于各種原因已經(jīng)異常中斷的會話,雖然v$session視圖看到處于inactive狀態(tài),但其實該連接已經(jīng)僵死,不會再有數(shù)據(jù)請求。IDLE_TIMEOUT
檢查的是處于inactive狀態(tài)超過指定時間的會話,即使客戶端正常連接,到達(dá)超時時間后也會將其中斷。
三、 SESSION_TIMEOUT
指定用戶會話允許的最長時間(以秒為單位)。很明顯這個參數(shù)要更進一步,無論用戶會話是不是空閑,到了SESSION_TIMEOUT指定就會被中斷。
默認(rèn)值為0,表示禁用該功能。
四、 INBOUND_CONNECT_TIMEOUT
表示等待用戶認(rèn)證超時的時間。單位是秒,默認(rèn)60秒,如果客戶端在指定的時間內(nèi)沒有連接上數(shù)據(jù)庫(例如用戶認(rèn)證超時),會在listener.log中會出現(xiàn) TNS-12535: TNS:operation timed out,在alert日志中記錄 WARNING: inbound connection timed out (ORA-3136) 和 TNS-12535。
另外在listener.ora中也有一個INBOUND_CONNECT_TIMEOUT參數(shù),名為:inbound_connect_timeout_監(jiān)聽器名。
如果建立監(jiān)聽后在設(shè)置的時間內(nèi)沒有反應(yīng)將會斷開連接,單位是秒,默認(rèn)60秒。
如果連接請求超時,listener.log中會出現(xiàn) TNS-12525: TNS:listener has not received client's request in time allowed。
關(guān)于兩者之間的關(guān)系,官方文檔建議INBOUND_CONNECT_TIMEOUT_listener_name的值低于SQLNET.INBOUND_CONNECT_TIMEOUT。
Set both parameters to an initial low value.
Set the value of the INBOUND_CONNECT_TIMEOUT_listener_name parameter to a lower value than the SQLNET.INBOUND_CONNECT_TIMEOUT parameter.
For example, you can set INBOUND_CONNECT_TIMEOUT_listener_name to 2 seconds and INBOUND_CONNECT_TIMEOUT parameter to 3 seconds. If clients are unable to complete connections within the specified time due to system or network delays that are normal for the particular environment, then increment the time as needed.
前面幾個參數(shù)都是系統(tǒng)級的,下面來看可以在用戶級指定的超時參數(shù)。
五、 profile中的idle_time
用戶級的空閑超時時間。單位是分鐘,默認(rèn)是UNLIMITED,連接始終不會被斷開,這就占用了連接數(shù)資源。
配置步驟如下,注意設(shè)置后對已經(jīng)連上的會話不生效,對新連上的會話才生效。
-- 查找用戶所屬的profile,例如叫APP_USER select username, b.* from dba_users a, dba_profiles b where a.profile = b.profile and username="USERNAME"; ? -- 更改該profile的idle_time alter profile app_user limit idle_time 30; ? -- 使修改的資源生效,需要設(shè)置resource_limit設(shè)置為true alter system set resource_limit=true;
如果用戶空閑超過指定時間,會報錯ORA-02396:exceeded maximum idle time, please connect again
六、 profile中的connect_time
用戶級的會話超時時間(類似前面SESSION_TIMEOUT),單位是分鐘,默認(rèn)是UNLIMITED。
用戶會話在到達(dá)設(shè)置的時候后不能再繼續(xù)操作(無論期間是不是空閑)。
設(shè)置方法跟前面類似
-- 查找用戶所屬的profile,例如叫APP_USER select username, b.* from dba_users a, dba_profiles b where a.profile = b.profile and username="USERNAME"; ? -- 更改該profile的connect_time alter profile app_user limit connect_time 30; ? -- 使修改的資源生效,需要設(shè)置resource_limit設(shè)置為true alter system set resource_limit=true;
如果是設(shè)置1分鐘,會在將近2分鐘的時候提醒你重新登錄,ORA-02399: exceeded maximum connect time, you are being logged off。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持。
