Oracle如何診斷遠端訪問資料庫慢/超時等問題小結

潇湘隐者發表於2024-05-29

管理維護Oracle資料庫的時候,有時候會碰到使用者(應用程式)遠端連線/訪問資料庫非常慢,甚至連線超時的問題。這裡簡單總結一下遇到這類問題的方法,僅供參考,如有疏漏或不足之處,敬請指正。文中部分內容來自官方文件Doc ID 1679567.1[1]

遇到這類問題,首先應該檢查/排除網路問題,一般來說,有一定機率是網路問題或防火牆問題引起的。可以使用下面命令進行驗證

ping <server_ip>
tnsping <service_name>

如果這裡上面兩種操作都非常慢/耗時,那邊基本可以判斷是網路的問題了,如果上面兩種操作都正常,那麼一般我們需要在客戶端和服務端開啟SQL*Net trace來診斷問題。這個也是最有效的方法。

開啟SQL*Net trace

客戶端:

在客戶端的sqlnet.ora中新增下面引數,就可以在客戶端開啟SQL*Net trace(即時生效)。就能收集客戶端的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

*最後兩個引數是可選項。

伺服器端:

TRACE_LEVEL_SERVER = 16
TRACE_FILE_SERVER = server
TRACE_DIRECTORY_SERVER = /tmp/server_trace #根據實際情況設定
TRACE_TIMESTAMP_SERVER = ON
TRACE_UNIQUE_SERVER = ON
DIAG_ADR_ENABLED= OFF
  • 注意事項1:設定trace檔案目錄時,trace檔案路徑最後部分千萬不要加上反斜槓"/",例如"/tmp/client_trace/",這樣會導致無法trace檔案無法生成。
  • 注意事項2:在完成跟蹤採集後,應該立即在客戶端&伺服器端關閉trace選項,避免生成大量trace檔案,既影響效能,又可能導致空間問題。

分析跟蹤事件

一般來說,需要將trace檔案打包發給Oracle Supprot技術支援人員分析診斷,當然,除非你有實力能夠自己分析診斷。不過一般可以自己分析定位哪一步比較耗時,至於這一步是做啥操作,往往需要專業人員的分析與支援。

還有一種方式就是使用strace分析跟蹤,不過這種跟蹤方式有時候你都沒法進一步定位,如下截圖所示

strace -T -t -f -o strace_slow.log sqlplus username/password@xxx.xxx.xxx.xxx:port/service_name

如上截圖所示,這個案例中,可以看到下面這一步耗時105.788238秒,但是從這裡只知道它是一個read操作,其它無法分析。

3250503 16:21:57 read(9, "\0\10\0\0\v\0\0\0", 8208) = 8 <105.788238>

參考資料

[1]

1679567.1: https://support.oracle.com/epmos/faces/DocumentDisplay?_afrLoop=273660316994015&id=1679567.1&_afrWindowMode=0&_adf.ctrl-state=u275i4zw4_80

相關文章