日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

PLSQL_監(jiān)控有些SQL的執(zhí)行次數(shù)和頻率

系統(tǒng) 2452 0
原文: PLSQL_監(jiān)控有些SQL的執(zhí)行次數(shù)和頻率

2014-12-25 Created By 鮑新建

一、摘要


在ORACLE數(shù)據(jù)庫應(yīng)用調(diào)優(yōu)中,一個SQL的執(zhí)行次數(shù)/頻率也是常常需要關(guān)注的,因為某個SQL執(zhí)行太頻繁,要么是由于應(yīng)用設(shè)計有缺陷,需要在業(yè)務(wù)邏輯上做出優(yōu)化處理,要么是業(yè)務(wù)特殊性所導(dǎo)致。

如果執(zhí)行頻繁的SQL,往往容易遭遇一些并發(fā)性的問題。

那么如何查看ORACLE數(shù)據(jù)庫某個SQL的執(zhí)行頻率/次數(shù),瀟湘隱者同學(xué)整理如下,借花獻(xiàn)佛了 :)

?

方法1: 通過查詢V$SQLAREA或V$SQL的EXECUTIONS來查看SQL的執(zhí)行次數(shù);

方法2:通過DBA_HIST_SQLSTAT關(guān)聯(lián)DBA_HIST_SNAPSHOT找出某些SQL的執(zhí)行次數(shù);

方法3:AWR報告查看某個SQL的執(zhí)行次數(shù);

?

二、三種方法解析


1. 通過查詢V$SQLAREA或V$SQL的EXECUTIONS來查看SQL的執(zhí)行次數(shù)

(1). 缺點

但是這個值的有效性需要結(jié)合FIRST_LOAD_TIME來判斷,因為V$SQLAREA或V$SQL中不保存歷史數(shù)據(jù),

具有一定的時效性,所以如果要查詢很久以前的某個SQL執(zhí)行次數(shù)是辦不到的。

(2). 關(guān)于V$SQLAREA 欄位介紹

FIRST_LOAD_TIME??????? VARCHAR2(19)?????? Timestamp of the parent creation time

EXECUTIONS???????????????? NUMBER???????????? ?? Total number of executions, totalled over all the child cursors

(3). 如何查詢

      
        SELECT
      
      
         SQL_ID, SQL_TEXT,FIRST_LOAD_TIME, EXECUTIONS


      
      
        FROM
      
      
         V$SQLAREA


      
      
        WHERE
      
       SQL_ID 
      
        =
      
      
        '
      
      
        497wh6n7hu14f
      
      
        '
      
    

(4). 總結(jié)

如果此時清空共享池,那么你會發(fā)現(xiàn)V$SQLAREA中對應(yīng)的SQL的EXECUTIONS次數(shù)清零了。

如果要查看某個時間段該SQL語句執(zhí)行了多少次,那么必須在這兩個時間段執(zhí)行上面SQL語句,兩次EXECUTIONS的差值表示這段時間內(nèi)SQL語句的執(zhí)行次數(shù)。

EXECUTIONS是全局的,往往不能查看某個會話或用戶執(zhí)行了多少次。這也是其局限性之一。

?

2. 通過DBA_HIST_SQLSTAT關(guān)聯(lián)DBA_HIST_SNAPSHOT找出某些SQL的執(zhí)行次數(shù)。

(1). 缺點

但是部分快照如果沒有捕獲到有些SQL。這樣也就無法通過下面SQL語句查看執(zhí)行次數(shù)。

也是就說這種方法是有缺陷的。執(zhí)行越頻繁的語句,也越容易被SNAPSHOT抓取到.

(2). 執(zhí)行語法

      
        SELECT
      
      
           M.SQL_ID,

           TO_CHAR (N.BEGIN_INTERVAL_TIME, 
      
      
        '
      
      
        YYYY-MM-DD
      
      
        '
      
      ) "
      
        DATETIME
      
      
        ",

           
      
      
        SUM
      
      
         (M.EXECUTIONS_DELTA) EXECUTIONS

    
      
      
        FROM
      
      
           DBA_HIST_SQLSTAT M, DBA_HIST_SNAPSHOT N

   
      
      
        WHERE
      
             M.SNAP_ID 
      
        =
      
      
         N.SNAP_ID

           
      
      
        AND
      
       M.DBID 
      
        =
      
      
         N.DBID

           
      
      
        AND
      
       M.INSTANCE_NUMBER 
      
        =
      
      
         N.INSTANCE_NUMBER

           
      
      
        AND
      
       M.INSTANCE_NUMBER 
      
        =
      
      
        1
      
      
        AND
      
       TO_CHAR (N.BEGIN_INTERVAL_TIME, 
      
        '
      
      
        YYYY-MM-DD
      
      
        '
      
      ) 
      
        =
      
      
        '
      
      
        2014-12-25
      
      
        '
      
      
        AND
      
       M.SQL_ID 
      
        =
      
      
        '
      
      
        497wh6n7hu14f
      
      
        '
      
      
        GROUP
      
      
        BY
      
         M.SQL_ID, TO_CHAR (N.BEGIN_INTERVAL_TIME, 
      
        '
      
      
        YYYY-MM-DD
      
      
        '
      
      
        )


      
      
        ORDER
      
      
        BY
      
         M.SQL_ID
    

?

3. AWR報告查看某個SQL的執(zhí)行次數(shù),同上面一樣,AWR報告也受SNAPSHOT影響。不一定捕獲了你需要查詢的SQL

?

4. 查看當(dāng)前數(shù)據(jù)庫執(zhí)行次數(shù)最多的SQL,例如,查詢執(zhí)行最頻繁的TOP 15的SQL語句。

      
        SELECT
      
      
           SQL_TEXT, EXECUTIONS

  
      
      
        FROM
      
         (
      
        SELECT
      
      
           SQL_TEXT,

                   EXECUTIONS,

                   RANK () 
      
      
        OVER
      
       (
      
        ORDER
      
      
        BY
      
       EXECUTIONS 
      
        DESC
      
      
        ) EXEC_RANK

            
      
      
        FROM
      
      
           V$SQLAREA)

 
      
      
        WHERE
      
         EXEC_RANK 
      
        <=
      
      
        15
      
      ;
    

?

?

一、摘要


在做咨詢時,經(jīng)查遇到以前SQL的運行情況,和查詢使用的條件

查詢綁定變量時,有硬解析和軟解析之分,如果是軟解析,變量的值就很難找到了

查詢綁定變量的幾個視圖如下:

  • 查詢v$sql視圖
  • 查詢v$sql_bind_capture
  • 查詢dba_hist_sqlbind
  • 查詢wrh$sqlstat

?

二、查詢v$sql視圖


1. 查詢bind_data

      
        select sql_id, sql_text, bind_data, hash_value 
        
from v$sql
where sql_text l ike ' %select * from test where id1% ';

它的記錄頻率受_cursor_bind_capture_interval 隱含參數(shù)控制,默認(rèn)值900,表示每900秒記錄一次綁定值,可以通過alter system set "_cursor_bind_capture_interval"=10;

2. bind_data

      
        select dbms_sqltune.extract_binds(bind_data) bind 
        
from v$sql
where sql_text like ' %FROM TEST11% ';

此時查詢到的data值得形式是這樣的:BEDA0B2002004F8482D10065FFFF0F000000003132303431313,需要通過dbms_sqltune.extract_binds進(jìn)行轉(zhuǎn)換

?

三、查詢v$sql_bind_capture


通過v$sql_bind_capture視圖,可以查看綁定變量,但是這個視圖不太給力,只能捕獲最后一次記錄的綁定變量值。

而且兩次捕獲的間隔有一個隱含參數(shù)控制。默認(rèn)是900秒,才會重新開始捕獲。在900內(nèi),綁定變量值的改變不會反應(yīng)在這個視圖中。

10G以后可以通過如下方法查看AWR報告里記錄的SQL的綁定變量值。

      
        select value_string 
        
          from v$sql_bind_capture 
          
            where sql_id
            
              =
              
                '
                
                  abhf6n1xqgrr0
                  
                    ';
                  
                
              
            
          
        
      
    

?

四、查詢dba_hist_sqlbind


10G以后可以通過如下方法查看AWR報告里記錄的SQL的綁定變量值。

      
        select snap_id, name, position, value_string,last_captured,WAS_CAPTURED  
        
          from dba_hist_sqlbind 
          
            where sql_id 
            
              = 
              
                '
                
                  576c1s91gua19
                  
                    ' 
                    
                      and snap_id
                      
                        =
                        
                          '
                          
                            20433
                            
                              '
                              
                                ; 
                                
                                  --
                                  
                                    --------snap_id, AWR報告的快照ID。
                                    
                                       --
                                      
                                        --------name, 綁定變量的名稱
                                        
                                           --
                                          
                                            --------position,綁定值在SQL語句中的位置,以1,2,3進(jìn)行標(biāo)注 
                                            
                                               --
                                              
                                                --------value_string,就是綁定變量值
                                                
                                                   --
                                                  
                                                    --------last_captured,最后捕獲到的時間
                                                    
                                                       --
                                                      
                                                        --------was_captured,是否綁定被捕獲,where子句前面的綁定不進(jìn)行捕獲。
                                                      
                                                    
                                                  
                                                
                                              
                                            
                                          
                                        
                                      
                                    
                                  
                                
                              
                            
                          
                        
                      
                    
                  
                
              
            
          
        
      
    

dba_hist_sqlbind視圖強大的地方在于,它記錄了每個AWR報告里的SQL的綁定變量值,當(dāng)然這個綁定變量值也是AWR生成的時候從v$sql_bind_capture采樣獲得的。

通過這個視圖,我們能夠獲得比較多的綁定變量值,對于我們排查問題,這些值一般足夠了。

還有一個需要注意的地方是,這兩個視圖中記錄的綁定變量只對where條件后面的綁定進(jìn)行捕獲,這點需要使用的時候注意。

查詢 dba_hist_sqlbind value_string列

dba_hist_sqlbind是視圖v$sql_bind_capture歷史快照

?

五、查詢wrh$sqlstat


兩外一個查詢綁定變量的視圖

      
        select dbms_sqltune.extract_bind(bind_data, 
        
          1
          
            ).value_string 
            
              from
              
                 wrh$_sqlstat 
                
                  where sql_id 
                  
                    = 
                    
                      '
                      
                        88dz0k2qvg876
                        
                          '
                          
-- --------根據(jù)綁定變量的多少增加dbms_sqltune.extract_bind(bind_data, 2).value_string等

?

參考:aaaaaaaa2000 - http://blog.csdn.net/aaaaaaaa2000/article/details/7401110

參考:瀟湘隱者 - http://www.cnblogs.com/kerrycode/p/4111746.html (略加排版)

?

PLSQL_監(jiān)控有些SQL的執(zhí)行次數(shù)和頻率


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 额尔古纳市| 彭阳县| 吉林省| 大城县| 扶绥县| 原平市| 宁河县| 金门县| 泗阳县| 休宁县| 宁安市| 伊宁市| 三亚市| 黎平县| 台安县| 威海市| 康定县| 墨江| 建湖县| 永善县| 修文县| 阳信县| 金寨县| 沂南县| 营口市| 额济纳旗| 余姚市| 余江县| 青河县| 绩溪县| 彰化市| 新安县| 广南县| 大化| 浠水县| 永兴县| 社旗县| 富源县| 平原县| 孟州市| 屏山县|