zoukankan      html  css  js  c++  java
  • 绑定变量值长度不一致,mismatch问题

     
    硬解析每秒 33.29次太高
    cowork_czsh@OA_PRIMA> select sql_id,version_count from v$sqlarea where version_count >500 order by 2 desc;
    
    SQL_ID        VERSION_COUNT
    ------------- -------------
    0mt5f81n6a1c3          1016
    33rnq8nr6f5wp          1003
    9bvh1c40vjqk7           864
    5jmc0s3sq8mc6           778
    13kk0unhbrdpf           727
    8zst2rj9vkzkk           662
    1mnrjx3qknhjp           599
    g5k3qzz7jtm85           544
    
    8 rows selected.
    
    可以看到如果version_count 如果有1016个版本,那么需要遍历1016个子游标,效率不高。
    如果遍历1016个子游标,还是没有找到,最后还是要硬解析,那效率就更低
    sys@OA_PRIMA>  select sql_text from v$sqlarea where sql_id='0mt5f81n6a1c3';
    
    SQL_TEXT
    ----------------------------------------------------------------------------------------------------
    insert into workitem_run (domain, caseid, batch, itemnum, name, casename, processid, processindex, p
    rocessname, activityid, activityname, performer, finisher, owner, nextstatus, nextlinkid, oldstate,
    levelnum, canReAssign, canReturn, canDelegate, canEntrust, canReview, entruster, delegater, state, c
    reatedate, updatedate, deadline, datamap, id) values (:1, :2, :3, :4, :5, :6, :7, :8, :9, :10, :11,
    :12, :13, :14, :15, :16, :17, :18, :19, :20, :21, :22, :23, :24, :25, :26, :27, :28, :29, :30, :31)
    
    sys@OA_PRIMA> select SQL_ID,CHILD_NUMBER from v$sql where sql_id='33rnq8nr6f5wp';
    
    SQL_ID        CHILD_NUMBER
    ------------- ------------
    33rnq8nr6f5wp          999
    33rnq8nr6f5wp         1000
    33rnq8nr6f5wp         1003
     当有大量的version_count,说明虽然SQL语句相同,但是ORACLE发现某些原因导致SQL不可重用,这类SQL执行次数很多,就会战中大量的shared pool
    
    查看SQL时什么原因导致不能匹配;
    cowork_czsh@OA_PRIMA> select sql_id,child_number,bind_mismatch from v$sql_shared_cursor where sql_id='0mt5f81n6a1c3';
    
    SQL_ID        CHILD_NUMBER BIND_MISMATCH
    ------------- ------------ ---------------------------------------------
    0mt5f81n6a1c3         1009 Y
    0mt5f81n6a1c3         1013 Y
    0mt5f81n6a1c3         1015 N
    
    
    
    
    
    
    通过v$sql_bind_capture视图查看每次绑定变量的值:
    sys@OA_PRIMA> Select position,last_captured,datatype_string,value_string from v$sql_bind_capture where sql_id='9bvh1c40vjqk7' and value_string is not null;
    
      POSITION LAST_CAPTURED  DATATYPE_STRING         VALUE_STRING
    ---------- ------------------- ------------------------------ ------------------------------
            62 2013-06-13 12:52:42 VARCHAR2(128)                  441905_HumenNode_3_0
            62 2013-06-13 08:30:21 VARCHAR2(128)                  441405_HumenNode_3
    
    直接在shared pool链表上找不到可以使用的子游标 最后还是要硬解析的 
    这种insert没必要带入这么多变量。 
    一般insert的绑定变量很少有能share的。 
    所以不推荐使用绑定变量。尤其对于字段很多的表。
    sys@OA_PRIMA> l
      1  SELECT SUBSTR(sql_text,1, 60), COUNT(*)
      2    FROM V$SQLAREA
      3   WHERE executions = 1
      4   GROUP BY SUBSTR(sql_text, 1, 60)
      5   HAVING COUNT(*) > 1
      6*  order by COUNT(*)  desc
    sys@OA_PRIMA> SELECT SUBSTR(sql_text,1, 60), COUNT(*)
      2    FROM V$SQLAREA
      3   WHERE executions = 1
      4   GROUP BY SUBSTR(sql_text, 1, 60)
      5   HAVING COUNT(*) > 1
      6   order by COUNT(*)  desc;
    SUBSTR(SQL_TEXT,1,60)                                                                                                   COUNT(*)
    ------------------------------------------------------------------------------------------------------------------------ ----------
    select formcase0_.ID as ID, formcase0_.FORM_ID as FORM_ID, f                                                         104
    select workitemru0_.ID as ID363_, workitemru0_.CASEID as CAS                                                          54
    select fileinfo0_.ID as ID342_, fileinfo0_.OBJECT_ID as OBJE                                                          54
    select objectlock0_.ID as ID343_, objectlock0_.OBJECT_ID as                                                           28
    select orggroup0_.ID as ID378_, orggroup0_.SORTINDEX as SORT                                                          14
    select peraffouts0_.FROM_USERNAME as col_0_0_ from PERAFF_OU                                                          13
    select * from ( select pubformdat0_.ID as ID358_, pubformdat                                                          11
    select count(*) as col_0_0_ from WF_PUB_FORM_DATA pubformdat                                                          11
    select workitemru0_.ID as col_0_0_ from WORKITEM_RUN workite                                                           9
    select * from ( select pubformdat0_.ID as ID358_0_, pubformc                                                           9
    select pubformdat0_.ID as ID358_0_, pubformcas1_.ID as ID356                                                           7
    select formdocume0_.ID as ID348_, formdocume0_.FORMID as FOR                                                           6
    select distinct workitemru0_.PERFORMER as col_0_0_ from WORK                                                           4
    select documentfi0_.FILEID as FILEID346_, documentfi0_.RECOR                                                           3
    select formbutton0_.ID as ID, formbutton0_.CREATEWORDZW_FALG                                                           2
    select sawordnoco0_.ID as ID396_, sawordnoco0_.WORDNO_ID as                                                            2
    select workitemhi0_.ID as ID364_, workitemhi0_.CASEID as CAS                                                           2
    select workitemhi0_.ID as col_0_0_ from WORKITEM_HISTORY wor                                                           2
    18 rows selected.
    
    sys@OA_PRIMA> select sql_id,version_count from v$sqlarea where version_count >1;
    
    SQL_ID        VERSION_COUNT
    ------------- -------------
    a2wbjpyw20bpf             2
    1mnrjx3qknhjp             3
    1aahxhc0t8hyp             3
    04xtrk7uyhknh             2
    5jmc0s3sq8mc6             3
    abk3kwx2ncydf             2
    83taa7kaw59c1             2
    fhjwhqrt9jat2             4
    byfttmqyrxf8h             3
    g3rf75mb31fgb             3
    g5k3qzz7jtm85             3
    g337099aatnuj             2
    9bvh1c40vjqk7             2
    9huz0nndcxs4p             2
    fz8x3gmsj1u4r             2
    7216v4896jyp1             2
    384k6g2kbtz2n             2
    9p6bq1v54k13j             3
    0mt5f81n6a1c3             2
    7pdq21uwxu2yt             2
    33rnq8nr6f5wp             2
    gufqfk7ahyadt             2
    4dufcndu3ahzv             6
    gcduyfhnbyn51             4
    7ng34ruy5awxq             2
    8zst2rj9vkzkk             3
    1gu8t96d0bdmu             2
    13kk0unhbrdpf             3
    1agt4gvym7dxs             2
    1vf92qxcv7gm8             2
    17v9vt4hbgt41             2
    57xk7bhu5zt4k             2
    0rcsncdd7bub8             2
    6ng0ugcrw7wth             2
    dcstr36r0vz0d             2
    
    35 rows selected.
    


  • 相关阅读:
    针式PKM使用经验一:日期视图
    针式PKM使用经验二:分类的显示顺序
    pythonunittest(6)
    pythonunittest(9)
    pythonunittest(10)
    wxpython学习笔记(1)
    利用正则表达式进行修改自定义ini配置文件
    pythonunittest(7)
    使用loadrunner进行服务器性能测试(winsocket)
    pythonunittest(8)
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13352004.html
Copyright © 2011-2022 走看看