oracle中通過存儲過程定位sql的方法


       工作中遇到不少開發跑過來,急匆匆的說我的存儲過程執行好慢幫忙看看是哪里慢的情況。

      拋開鎖阻塞,存儲過程執行緩慢大概率是其中的sql 語句執行緩慢,那么怎么樣快速定位到是哪個sql 執行有問題呢,或者是找到了有問題的sql 需要調整,怎么告知開發有問題的sql 是屬於哪一個存儲過程,相信日常工作中dba 都會遇到這樣的問題。主要有以下方式:

    1、通過v$active_session_history 結合 v$sql 視圖定位存儲過程與sql 語句之間的關系

        首先定位存儲過程的sql_id,可以通過存儲過程名稱模糊查詢,一般類似 BEGIN 存儲過程名稱 EDN,通過like 匹配查詢v$sql 視圖

      select sql_id,sql_text from v$sql t where t.SQL_TEXT like ‘%存儲過程名稱%’

企業微信截圖_16397881077961

     找到存儲過程sql_id 后,通過v$active_session_history  視圖查找存儲過程包含的sql 語句的sql_id

select distinct  t.SQL_ID,t.TOP_LEVEL_SQL_ID from v$active_session_history t where t.TOP_LEVEL_SQL_ID='&存儲過程sql_id'

image

   拿到sql 語句的sql_id 后 結合v$sql_monitor 、v$sql_plan_monitor、DBA_HIST_SQLSTATS、DBA_HIST_SNAPSHOT就能分析到哪些sql 語句執行時間最長、執行計划有無問題、執行計划有無發生變化准對具體的sql 語句進行優化、調整。

2、通過OEM 快速定位sql 語句與存儲過程之間的聯系

     打開OEM Top Activity Top SQL頁面,一般執行速度慢的sql 都能看到,點擊排在前面的sql_id 超鏈接

企業微信截圖_16397895363108

打開 sql details 頁面,點擊統計信息,就能看到sql 屬於哪個存儲過程在調用、sql 執行速度、資源消耗情況:

企業微信截圖_16397896382115

image


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM