Oracle如何診斷遠(yuǎn)程訪問數(shù)據(jù)庫慢/超時(shí)等問題小結(jié)
2024-05-29 17:03 瀟湘隱者 閱讀(1064) 評(píng)論(0) 收藏 舉報(bào)管理維護(hù)Oracle數(shù)據(jù)庫的時(shí)候,有時(shí)候會(huì)碰到用戶(應(yīng)用程序)遠(yuǎn)程連接/訪問數(shù)據(jù)庫非常慢,甚至連接超時(shí)的問題。這里簡單總結(jié)一下遇到這類問題的方法,僅供參考,如有疏漏或不足之處,敬請(qǐng)指正。文中部分內(nèi)容來自官方文檔Doc ID 1679567.1[1]
遇到這類問題,首先應(yīng)該檢查/排除網(wǎng)絡(luò)問題,一般來說,有一定概率是網(wǎng)絡(luò)問題或防火墻問題引起的。可以使用下面命令進(jìn)行驗(yàn)證
ping <server_ip>
tnsping <service_name>
如果這里上面兩種操作都非常慢/耗時(shí),那邊基本可以判斷是網(wǎng)絡(luò)的問題了,如果上面兩種操作都正常,那么一般我們需要在客戶端和服務(wù)端開啟SQL*Net trace來診斷問題。這個(gè)也是最有效的方法。
開啟SQL*Net trace
客戶端:
在客戶端的sqlnet.ora中添加下面參數(shù),就可以在客戶端開啟SQL*Net trace(即時(shí)生效)。就能收集客戶端的trace信息。
TRACE_LEVEL_CLIENT = 16
TRACE_FILE_CLIENT = client
TRACE_DIRECTORY_CLIENT = /tmp/client_trace
TRACE_TIMESTAMP_CLIENT = ON
TRACE_UNIQUE_CLIENT = ON
DIAG_ADR_ENABLED= OFF
#TRACE_FILELEN_CLIENT = 2048 #單位為KB
#TRACE_FILENO_CLIENT = 60
*最后兩個(gè)參數(shù)是可選項(xiàng)。
服務(wù)器端:
TRACE_LEVEL_SERVER = 16
TRACE_FILE_SERVER = server
TRACE_DIRECTORY_SERVER = /tmp/server_trace #根據(jù)實(shí)際情況設(shè)置
TRACE_TIMESTAMP_SERVER = ON
TRACE_UNIQUE_SERVER = ON
DIAG_ADR_ENABLED= OFF
注意事項(xiàng)1:設(shè)置trace文件目錄時(shí),trace文件路徑最后部分千萬不要加上反斜杠"/",例如"/tmp/client_trace/",這樣會(huì)導(dǎo)致無法trace文件無法生成。 注意事項(xiàng)2:在完成跟蹤采集后,應(yīng)該立即在客戶端&服務(wù)器端關(guān)閉trace選項(xiàng),避免生成大量trace文件,既影響性能,又可能導(dǎo)致空間問題。
分析跟蹤事件
一般來說,需要將trace文件打包發(fā)給Oracle Supprot技術(shù)支持人員分析診斷,當(dāng)然,除非你有實(shí)力能夠自己分析診斷。不過一般可以自己分析定位哪一步比較耗時(shí),至于這一步是做啥操作,往往需要專業(yè)人員的分析與支持。
還有一種方式就是使用strace分析跟蹤,不過這種跟蹤方式有時(shí)候你都沒法進(jìn)一步定位,如下截圖所示
strace -T -t -f -o strace_slow.log sqlplus username/password@xxx.xxx.xxx.xxx:port/service_name

如上截圖所示,這個(gè)案例中,可以看到下面這一步耗時(shí)105.788238秒,但是從這里只知道它是一個(gè)read操作,其它無法分析。
3250503 16:21:57 read(9, "\0\10\0\0\v\0\0\0", 8208) = 8 <105.788238>
參考資料
1679567.1: https://support.oracle.com/epmos/faces/DocumentDisplay?_afrLoop=273660316994015&id=1679567.1&_afrWindowMode=0&_adf.ctrl-state=u275i4zw4_80
浙公網(wǎng)安備 33010602011771號(hào)