11g 新特性之–Query Cache Result 研究(2)

时间:2021-07-24 07:37:34

 原文链接 个人博客 http://www.killdb.com/?p=216

在11g 新特性之--query result cache 的第一篇文章中,我讲述该特性的使用以及相关的管理等等,
其中在最后提出了几个疑问,query cache结构如何?跟shared pool有何关系?
该特性真的是说的那么好吗?它适用于OLTP 系统吗? 下面这篇文章将给出解答。

SQL> conn roger/roger
Connected.
SQL> create table ht02 as select owner,object_id,object_name from dba_objects;
Table created.
SQL> select count(*) from ht02;
  COUNT(*)
----------
     71884
SQL> create index ht02_id_idx on ht02(object_id);
Index created.
SQL>
SQL> select  owner,count(*) from ht02 group by owner;
OWNER                            COUNT(*)
------------------------------ ----------
OWBSYS_AUDIT                           12
MDSYS                                1509
ROGER                                   4
PUBLIC                              27696
OUTLN                                   9
CTXSYS                                366
OLAPSYS                               719
FLOWS_FILES                            12
OWBSYS                                  2
SYSTEM                                529
ORACLE_OCM                              8
EXFSYS                                310
APEX_030200                          2406
SCOTT                                   6
DBSNMP                                 57
ORDSYS                               2532
ORDPLUGINS                             10
SYSMAN                               3491
APPQOSSYS                               3
XDB                                   842
ORDDATA                               248
SYS                                 30789
WMSYS                                 316
SI_INFORMTN_SCHEMA                      8
SQL> select count(*) from ht02 where mod(object_id,2)=0 and owner='SYS';
  COUNT(*)
----------
     15428
SQL> select max(object_id) from ht02 where mod(object_id,2)=0 and owner='SYS';
MAX(OBJECT_ID)
--------------
         73410
SQL>
---session 1 (delete)
SQL> set timing on
SQL> begin
  2  for i in 1..100 loop
  3  if mod(i,2)=0 then
  4  delete from ht02 where object_id=i;
end if;
  5    6  end loop;
  7  end;
  8  /
PL/SQL procedure successfully completed.
Elapsed: 00:00:00.19
SQL> begin
  2  for i in 1..100 loop
if mod(i,2)=0 then
delete from ht02 where  owner='SYS' and object_id=i;
  3    4    5  end if;
  6  end loop;
  7  end;
  8  /
PL/SQL procedure successfully completed.
Elapsed: 00:00:00.05
SQL>
---session 2
SQL> show user
USER is "ROGER"
SQL> set autot traceonly
SQL> set lines 150
SQL> select /*+ RESULT_CACHE */ owner,object_name
  2  from ht02 where object_id=73400;
no rows selected
Execution Plan
----------------------------------------------------------
Plan hash value: 796030940
-----------------------------------------------------------------------------------------------------------
| Id  | Operation                    | Name                       | Rows  | Bytes | Cost (%CPU)| Time     |
-----------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT             |                            |     1 |    96 |     1   (0)| 00:00:01 |
|   1 |  RESULT CACHE                | 183x3yt1jbbc42u69x2fv0kh7y |       |       |            |          |
|   2 |   TABLE ACCESS BY INDEX ROWID| HT02                       |     1 |    96 |     1   (0)| 00:00:01 |
|*  3 |    INDEX RANGE SCAN          | HT02_ID_IDX                |     1 |       |     1   (0)| 00:00:01 |
-----------------------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
   3 - access("OBJECT_ID"=73400)
Result Cache Information (identified by operation id):
------------------------------------------------------
   1 - column-count=2; dependencies=(ROGER.HT02); attributes=(ordered); name="select /*+ RESULT_CACHE */ owner,object_name
from ht02 where object_id=73400"
Note
-----
   - dynamic sampling used for this statement (level=2)
Statistics
----------------------------------------------------------
          9  recursive calls
          0  db block gets
         55  consistent gets
          1  physical reads
          0  redo size
        350  bytes sent via SQL*Net to client
        404  bytes received via SQL*Net from client
          1  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          0  rows processed
SQL>
SQL>
SQL> /
no rows selected
Execution Plan
----------------------------------------------------------
Plan hash value: 796030940
-----------------------------------------------------------------------------------------------------------
| Id  | Operation                    | Name                       | Rows  | Bytes | Cost (%CPU)| Time     |
-----------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT             |                            |     1 |    96 |     1   (0)| 00:00:01 |
|   1 |  RESULT CACHE                | 183x3yt1jbbc42u69x2fv0kh7y |       |       |            |          |
|   2 |   TABLE ACCESS BY INDEX ROWID| HT02                       |     1 |    96 |     1   (0)| 00:00:01 |
|*  3 |    INDEX RANGE SCAN          | HT02_ID_IDX                |     1 |       |     1   (0)| 00:00:01 |
-----------------------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
   3 - access("OBJECT_ID"=73400)
Result Cache Information (identified by operation id):
------------------------------------------------------
   1 - column-count=2; dependencies=(ROGER.HT02); attributes=(ordered); name="select /*+ RESULT_CACHE */ owner,object_name
from ht02 where object_id=73400"
Note
-----
   - dynamic sampling used for this statement (level=2)
Statistics
----------------------------------------------------------
          0  recursive calls
          0  db block gets
          2  consistent gets
          0  physical reads
          0  redo size
        350  bytes sent via SQL*Net to client
        404  bytes received via SQL*Net from client
          1  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          0  rows processed
SQL> /
no rows selected
Execution Plan
----------------------------------------------------------
Plan hash value: 796030940
-----------------------------------------------------------------------------------------------------------
| Id  | Operation                    | Name                       | Rows  | Bytes | Cost (%CPU)| Time     |
-----------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT             |                            |     1 |    96 |     1   (0)| 00:00:01 |
|   1 |  RESULT CACHE                | 183x3yt1jbbc42u69x2fv0kh7y |       |       |            |          |
|   2 |   TABLE ACCESS BY INDEX ROWID| HT02                       |     1 |    96 |     1   (0)| 00:00:01 |
|*  3 |    INDEX RANGE SCAN          | HT02_ID_IDX                |     1 |       |     1   (0)| 00:00:01 |
-----------------------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
   3 - access("OBJECT_ID"=73400)
Result Cache Information (identified by operation id):
------------------------------------------------------
   1 - column-count=2; dependencies=(ROGER.HT02); attributes=(ordered); name="select /*+ RESULT_CACHE */ owner,object_name
from ht02 where object_id=73400"
Note
-----
   - dynamic sampling used for this statement (level=2)
Statistics
----------------------------------------------------------
          0  recursive calls
          0  db block gets
          2  consistent gets
          0  physical reads
          0  redo size
        350  bytes sent via SQL*Net to client
        404  bytes received via SQL*Net from client
          1  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          0  rows processed
SQL>
--session 3
SQL> select count(*) from ht02 where owner='SYS' and object_id=1001;
  COUNT(*)
----------
         4
Elapsed: 00:00:00.30
SQL>  begin
  2     for i in 1..100000 loop
  3     if mod(i,2)=1 then
  4     update  ht02 set owner='killdb.com'  where  owner='SYS' and object_id=i;
  5     end if;
  6     end loop;
  7     end;
  8     /
PL/SQL procedure successfully completed.
Elapsed: 00:00:12.34
--session 4
SQL> set timing on
SQL> set lines 160
SQL> set autot traceonly
SQL>  select /*+ RESULT_CACHE */ owner,object_name
  2    from ht02 where object_id=1001;
Elapsed: 00:00:00.24
Execution Plan
----------------------------------------------------------
Plan hash value: 796030940
-----------------------------------------------------------------------------------------------------------
| Id  | Operation                    | Name                       | Rows  | Bytes | Cost (%CPU)| Time     |
-----------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT             |                            |     4 |   144 |     5   (0)| 00:00:01 |
|   1 |  RESULT CACHE                | 20kb0gt7yvjj01xngsp2bcwsub |       |       |            |          |
|   2 |   TABLE ACCESS BY INDEX ROWID| HT02                       |     4 |   144 |     5   (0)| 00:00:01 |
|*  3 |    INDEX RANGE SCAN          | HT02_ID_IDX                |     4 |       |     1   (0)| 00:00:01 |
-----------------------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
   3 - access("OBJECT_ID"=1001)
Result Cache Information (identified by operation id):
------------------------------------------------------
   1 - column-count=2; dependencies=(ROGER.HT02); attributes=(ordered); name="select /*+ RESULT_CACHE */ owner,object_name
  from ht02 where object_id=1001"
 
Statistics
----------------------------------------------------------
         24  recursive calls
          0  db block gets
        467  consistent gets
          0  physical reads
        280  redo size
        548  bytes sent via SQL*Net to client
        415  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          4  rows processed
SQL> /
Elapsed: 00:00:00.02
Execution Plan
----------------------------------------------------------
Plan hash value: 796030940
-----------------------------------------------------------------------------------------------------------
| Id  | Operation                    | Name                       | Rows  | Bytes | Cost (%CPU)| Time     |
-----------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT             |                            |     4 |   144 |     5   (0)| 00:00:01 |
|   1 |  RESULT CACHE                | 20kb0gt7yvjj01xngsp2bcwsub |       |       |            |          |
|   2 |   TABLE ACCESS BY INDEX ROWID| HT02                       |     4 |   144 |     5   (0)| 00:00:01 |
|*  3 |    INDEX RANGE SCAN          | HT02_ID_IDX                |     4 |       |     1   (0)| 00:00:01 |
-----------------------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
   3 - access("OBJECT_ID"=1001)
Result Cache Information (identified by operation id):
------------------------------------------------------
   1 - column-count=2; dependencies=(ROGER.HT02); attributes=(ordered); name="select /*+ RESULT_CACHE */ owner,object_name
  from ht02 where object_id=1001"
 
Statistics
----------------------------------------------------------
          0  recursive calls
          0  db block gets
        464  consistent gets
          0  physical reads
        256  redo size
        548  bytes sent via SQL*Net to client
        415  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          4  rows processed
SQL> /
Elapsed: 00:00:00.02
Execution Plan
----------------------------------------------------------
Plan hash value: 796030940
-----------------------------------------------------------------------------------------------------------
| Id  | Operation                    | Name                       | Rows  | Bytes | Cost (%CPU)| Time     |
-----------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT             |                            |     4 |   144 |     5   (0)| 00:00:01 |
|   1 |  RESULT CACHE                | 20kb0gt7yvjj01xngsp2bcwsub |       |       |            |          |
|   2 |   TABLE ACCESS BY INDEX ROWID| HT02                       |     4 |   144 |     5   (0)| 00:00:01 |
|*  3 |    INDEX RANGE SCAN          | HT02_ID_IDX                |     4 |       |     1   (0)| 00:00:01 |
-----------------------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
   3 - access("OBJECT_ID"=1001)
Result Cache Information (identified by operation id):
------------------------------------------------------
   1 - column-count=2; dependencies=(ROGER.HT02); attributes=(ordered); name="select /*+ RESULT_CACHE */ owner,object_name
  from ht02 where object_id=1001"
 
Statistics
----------------------------------------------------------
          0  recursive calls
          0  db block gets
        464  consistent gets
          0  physical reads
        300  redo size
        548  bytes sent via SQL*Net to client
        415  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          4  rows processed
SQL> /
Elapsed: 00:00:00.01
Execution Plan
----------------------------------------------------------
Plan hash value: 796030940
-----------------------------------------------------------------------------------------------------------
| Id  | Operation                    | Name                       | Rows  | Bytes | Cost (%CPU)| Time     |
-----------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT             |                            |     4 |   144 |     5   (0)| 00:00:01 |
|   1 |  RESULT CACHE                | 20kb0gt7yvjj01xngsp2bcwsub |       |       |            |          |
|   2 |   TABLE ACCESS BY INDEX ROWID| HT02                       |     4 |   144 |     5   (0)| 00:00:01 |
|*  3 |    INDEX RANGE SCAN          | HT02_ID_IDX                |     4 |       |     1   (0)| 00:00:01 |
-----------------------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
   3 - access("OBJECT_ID"=1001)
Result Cache Information (identified by operation id):
------------------------------------------------------
   1 - column-count=2; dependencies=(ROGER.HT02); attributes=(ordered); name="select /*+ RESULT_CACHE */ owner,object_name
  from ht02 where object_id=1001"
 
Statistics
----------------------------------------------------------
          0  recursive calls
          0  db block gets
        464  consistent gets
          0  physical reads
        300  redo size
        548  bytes sent via SQL*Net to client
        415  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          4  rows processed
SQL> /
Elapsed: 00:00:00.02
Execution Plan
----------------------------------------------------------
Plan hash value: 796030940
-----------------------------------------------------------------------------------------------------------
| Id  | Operation                    | Name                       | Rows  | Bytes | Cost (%CPU)| Time     |
-----------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT             |                            |     4 |   144 |     5   (0)| 00:00:01 |
|   1 |  RESULT CACHE                | 20kb0gt7yvjj01xngsp2bcwsub |       |       |            |          |
|   2 |   TABLE ACCESS BY INDEX ROWID| HT02                       |     4 |   144 |     5   (0)| 00:00:01 |
|*  3 |    INDEX RANGE SCAN          | HT02_ID_IDX                |     4 |       |     1   (0)| 00:00:01 |
-----------------------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
   3 - access("OBJECT_ID"=1001)
Result Cache Information (identified by operation id):
------------------------------------------------------
   1 - column-count=2; dependencies=(ROGER.HT02); attributes=(ordered); name="select /*+ RESULT_CACHE */ owner,object_name
  from ht02 where object_id=1001"
 
Statistics
----------------------------------------------------------
          0  recursive calls
          0  db block gets
          7  consistent gets
          0  physical reads
          0  redo size
        562  bytes sent via SQL*Net to client
        415  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          4  rows processed
SQL> /
Elapsed: 00:00:00.01
Execution Plan
----------------------------------------------------------
Plan hash value: 796030940
-----------------------------------------------------------------------------------------------------------
| Id  | Operation                    | Name                       | Rows  | Bytes | Cost (%CPU)| Time     |
-----------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT             |                            |     4 |   144 |     5   (0)| 00:00:01 |
|   1 |  RESULT CACHE                | 20kb0gt7yvjj01xngsp2bcwsub |       |       |            |          |
|   2 |   TABLE ACCESS BY INDEX ROWID| HT02                       |     4 |   144 |     5   (0)| 00:00:01 |
|*  3 |    INDEX RANGE SCAN          | HT02_ID_IDX                |     4 |       |     1   (0)| 00:00:01 |
-----------------------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
   3 - access("OBJECT_ID"=1001)
Result Cache Information (identified by operation id):
------------------------------------------------------
   1 - column-count=2; dependencies=(ROGER.HT02); attributes=(ordered); name="select /*+ RESULT_CACHE */ owner,object_name
  from ht02 where object_id=1001"
 
Statistics
----------------------------------------------------------
          0  recursive calls
          0  db block gets
          7  consistent gets
          0  physical reads
          0  redo size
        562  bytes sent via SQL*Net to client
        415  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          4  rows processed
 
 
SQL> conn /as sysdba
Connected.
SQL> alter session set events 'immediate trace name heapdump level 2';
Session altered.
Elapsed: 00:00:01.41
SQL> @ gettrc.sql
TRACE_FILE_NAME
-----------------------------------------------------------------------
/oracle/product/diag/rdbms/roger/roger/trace/roger_ora_3732.trc
Elapsed: 00:00:00.17
SQL>
[oracle@roger trace]$ cat /oracle/product/diag/rdbms/roger/roger/trace/roger_ora_3732.trc|grep Bucket
 Bucket 0 size=16
 Bucket 1 size=20
 Bucket 2 size=24
 Bucket 3 size=28
 Bucket 4 size=32
 Bucket 5 size=36
 Bucket 6 size=40
 Bucket 7 size=44
 Bucket 8 size=48
 Bucket 9 size=52
 Bucket 10 size=56
 Bucket 11 size=60
 Bucket 12 size=64
 Bucket 13 size=68
 Bucket 14 size=72
 Bucket 15 size=76
 Bucket 16 size=80
 Bucket 17 size=84
 Bucket 18 size=88
 Bucket 19 size=92
 Bucket 20 size=96
 Bucket 21 size=100
 Bucket 22 size=104
 Bucket 23 size=108
 Bucket 24 size=112
 Bucket 25 size=116
 Bucket 26 size=120
 Bucket 27 size=124
 Bucket 28 size=128
 Bucket 29 size=132
 Bucket 30 size=136
 Bucket 31 size=140
 Bucket 32 size=144
 Bucket 33 size=148
 Bucket 34 size=152
 Bucket 35 size=156
 Bucket 36 size=160
 Bucket 37 size=164
 Bucket 38 size=168
 Bucket 39 size=172
 Bucket 40 size=176
 Bucket 41 size=180
 Bucket 42 size=184
 Bucket 43 size=188
 Bucket 44 size=192
 Bucket 45 size=196
 Bucket 46 size=200
 Bucket 47 size=204
 Bucket 48 size=208
 Bucket 49 size=212
 Bucket 50 size=216
 Bucket 51 size=220
 Bucket 52 size=224
 Bucket 53 size=228
 Bucket 54 size=232
 Bucket 55 size=236
 Bucket 56 size=240
 Bucket 57 size=244
 Bucket 58 size=248
 Bucket 59 size=252
 Bucket 60 size=256
 Bucket 61 size=260
 Bucket 62 size=264
 Bucket 63 size=268
 Bucket 64 size=272
 Bucket 65 size=276
 Bucket 66 size=280
 Bucket 67 size=284
 Bucket 68 size=288
 Bucket 69 size=292
 Bucket 70 size=296
 Bucket 71 size=300
 Bucket 72 size=304
 Bucket 73 size=308
 Bucket 74 size=312
 Bucket 75 size=316
 Bucket 76 size=320
 Bucket 77 size=324
 Bucket 78 size=328
 Bucket 79 size=332
 Bucket 80 size=336
 Bucket 81 size=340
 Bucket 82 size=344
 Bucket 83 size=348
 Bucket 84 size=352
 Bucket 85 size=356
 Bucket 86 size=360
 Bucket 87 size=364
 Bucket 88 size=368
 Bucket 89 size=372
 Bucket 90 size=376
 Bucket 91 size=380
 Bucket 92 size=384
 Bucket 93 size=388
 Bucket 94 size=392
 Bucket 95 size=396
 Bucket 96 size=400
 Bucket 97 size=404
 Bucket 98 size=408
 Bucket 99 size=412
 Bucket 100 size=416
 Bucket 101 size=420
 Bucket 102 size=424
 Bucket 103 size=428
 Bucket 104 size=432
 Bucket 105 size=436
 Bucket 106 size=440
 Bucket 107 size=444
 Bucket 108 size=448
 Bucket 109 size=452
 Bucket 110 size=456
 Bucket 111 size=460
 Bucket 112 size=464
 Bucket 113 size=468
 Bucket 114 size=472
 Bucket 115 size=476
 Bucket 116 size=480
 Bucket 117 size=484
 Bucket 118 size=488
 Bucket 119 size=492
 Bucket 120 size=496
 Bucket 121 size=500
 Bucket 122 size=504
 Bucket 123 size=508
 Bucket 124 size=512
 Bucket 125 size=516
 Bucket 126 size=520
 Bucket 127 size=524
 Bucket 128 size=528
 Bucket 129 size=532
 Bucket 130 size=536
 Bucket 131 size=540
 Bucket 132 size=544
 Bucket 133 size=548
 Bucket 134 size=552
 Bucket 135 size=556
 Bucket 136 size=560
 Bucket 137 size=564
 Bucket 138 size=568
 Bucket 139 size=572
 Bucket 140 size=576
 Bucket 141 size=580
 Bucket 142 size=584
 Bucket 143 size=588
 Bucket 144 size=592
 Bucket 145 size=596
 Bucket 146 size=600
 Bucket 147 size=604
 Bucket 148 size=608
 Bucket 149 size=612
 Bucket 150 size=616
 Bucket 151 size=620
 Bucket 152 size=624
 Bucket 153 size=628
 Bucket 154 size=632
 Bucket 155 size=636
 Bucket 156 size=640
 Bucket 157 size=644
 Bucket 158 size=648
 Bucket 159 size=652
 Bucket 160 size=656
 Bucket 161 size=660
 Bucket 162 size=664
 Bucket 163 size=668
 Bucket 164 size=672
 Bucket 165 size=676
 Bucket 166 size=680
 Bucket 167 size=684
 Bucket 168 size=688
 Bucket 169 size=692
 Bucket 170 size=696
 Bucket 171 size=700
 Bucket 172 size=704
 Bucket 173 size=708
 Bucket 174 size=712
 Bucket 175 size=716   ---bucket 0~175   以4递增
 Bucket 176 size=724
 Bucket 177 size=732
 Bucket 178 size=740
 Bucket 179 size=748
 Bucket 180 size=756
 Bucket 181 size=764
 Bucket 182 size=772
 Bucket 183 size=780
 Bucket 184 size=788
 Bucket 185 size=796
 Bucket 186 size=804
 Bucket 187 size=812  -----bucket 176~187  以8递增
 Bucket 188 size=876
 Bucket 189 size=940
 Bucket 190 size=1004
 Bucket 191 size=1068
 Bucket 192 size=1072
 Bucket 193 size=1076
 Bucket 194 size=1132
 Bucket 195 size=1196
 Bucket 196 size=1260
 Bucket 197 size=1324
 Bucket 198 size=1388
 Bucket 199 size=1452 
 Bucket 200 size=1516
 Bucket 201 size=1580
 Bucket 202 size=1644
 Bucket 203 size=1708
 Bucket 204 size=1772
 Bucket 205 size=1836
 Bucket 206 size=1900
 Bucket 207 size=1964
 Bucket 208 size=2028
 Bucket 209 size=2092
 Bucket 210 size=2156
 Bucket 211 size=2220
 Bucket 212 size=2284
 Bucket 213 size=2348
 Bucket 214 size=2412
 Bucket 215 size=2476
 Bucket 216 size=2540
 Bucket 217 size=2604
 Bucket 218 size=2668
 Bucket 219 size=2732
 Bucket 220 size=2796
 Bucket 221 size=2860
 Bucket 222 size=2924
 Bucket 223 size=2988
 Bucket 224 size=3052
 Bucket 225 size=3116
 Bucket 226 size=3180
 Bucket 227 size=3244
 Bucket 228 size=3308
 Bucket 229 size=3372
 Bucket 230 size=3436
 Bucket 231 size=3500
 Bucket 232 size=3564
 Bucket 233 size=3628
 Bucket 234 size=3692
 Bucket 235 size=3756
 Bucket 236 size=3820
 Bucket 237 size=3884
 Bucket 238 size=3948
 Bucket 239 size=4012  --bucket 188~239   以64递增
 Bucket 240 size=4096
 Bucket 241 size=4100
 Bucket 242 size=4108
 Bucket 243 size=8204
 Bucket 244 size=8460
 Bucket 245 size=8464
 Bucket 246 size=8468
 Bucket 247 size=8472
 Bucket 248 size=9296
 Bucket 249 size=9300
 Bucket 250 size=12320
 Bucket 251 size=12324
 Bucket 252 size=16396
 Bucket 253 size=32780
 Bucket 254 size=65548
 
 
[oracle@roger ~]$ grep -i Result  /oracle/product/diag/rdbms/roger/roger/trace/roger_ora_3732.trc
  Chunk 24ab3094 sz=    24576    freeable  "Result Cache   "  ds=0x272758b4
  Chunk 24bf2000 sz=    24576    recreate  "Result Cache   "  latch=(nil)
  Chunk 24c18f9c sz=    32816  R-freeable  "Result Cache   "  ds=0x272758b4
  Chunk 24c20fcc sz=    32816  R-freeable  "Result Cache   "  ds=0x272758b4
[oracle@roger ~]$
这里对查询sql语句多执行几次
[oracle@roger ~]$ grep -i Result  /oracle/product/diag/rdbms/roger/roger/trace/roger_ora_3946.trc
sword xsoqsqlresultsetcachesize_ [106E3EB0, 106E3EB4) = 000008A7
        RESILVER_TEST_RESULT = 0
result_cache_mode                   = MANUAL
_result_cache_auto_size_threshold   = 100
_result_cache_auto_time_threshold   = 1000
result_cache_mode                   = MANUAL
_result_cache_auto_size_threshold   = 100
_result_cache_auto_time_threshold   = 1000
  Chunk 24ab3094 sz=    24576    freeable  "Result Cache   "  ds=0x272758b4
  Chunk 24bf2000 sz=    24576    recreate  "Result Cache   "  latch=(nil)
  Chunk 24c18f9c sz=    32816  R-freeable  "Result Cache   "  ds=0x272758b4
  Chunk 24c20fcc sz=    32816  R-freeable  "Result Cache   "  ds=0x272758b4
[oracle@roger ~]$
SQL> select 24576*2+32816*2 from dual;
24576*2+32816*2
---------------
         114784
Elapsed: 00:00:00.06
SQL> select * from v$sgastat where name like '%Result%';
POOL         NAME                            BYTES
------------ -------------------------- ----------
shared pool  Result Cache: State Objs         2852
shared pool  Result Cache                   114720
shared pool  Result Cache: Memory Mgr          124
shared pool  Result Cache: Bloom Fltr         2048
shared pool  Result Cache: Cache Mgr          4416
Elapsed: 00:00:00.15
SQL>
SQL> select ksmchcom, ksmchcls, ksmchsiz from x$ksmsp
  2  where ksmchcom like '%Result%';
KSMCHCOM         KSMCHCLS   KSMCHSIZ
---------------- -------- ----------
Result Cache     R-freea       32816
Result Cache     R-freea       32816
Result Cache     recr          24576
Result Cache     freeabl       24576
Elapsed: 00:00:00.10
SQL>
SQL> oradebug setmypid
Statement processed.
SQL> oradebug dump heapdump_addr 2 656890036;
Statement processed.
SQL> oradebug tracefile_name
/oracle/product/diag/rdbms/roger/roger/trace/roger_ora_4201.trc
SQL>
*** 2011-08-20 07:56:10.092
Processing Oradebug command 'dump heapdump_addr 2 656890036'
******************************************************
HEAP DUMP heap name="Result Cache"  desc=0x272758b4
 extent sz=0x8024 alt=32767 het=32767 rec=0 flg=2 opc=2
 parent=0x200010b4 owner=(nil) nex=(nil) xsz=0x8024 heap=(nil)
 fl2=0x20, nex=(nil)
EXTENT 0 addr=0x24c18fa8
  Chunk 24c18fb0 sz=    32796    perm      "perm           "  alo=32784
Dump of memory from 0x24C18FB0 to 0x24C20FCC
24C18FB0 5000801D 00000000 24C20FE0 00008010  [...P.......$....]
24C18FC0 00000000 24C18FC0 00000000 00000002  [.......$........]
24C18FD0 24C22630 24C22630 27276A48 27276A48  [0&.$0&.$Hj''Hj'']
24C18FE0 00000002 9B29D2C8 D0E973A6 8006F2E4  [......)..s......]
24C18FF0 00000000 4E4ED8C5 00000055 14086F78  [......NNU...xo..]
24C19000 002F2506 00011EDF 00000002 00070000  [.%/.............]
24C19010 000001FF 24C19BC0 24C19FC0 24C1A3C0  [.......$...$...$]
24C19020 24C1A7C0 24C1ABC0 24C1AFC0 24C1B3C0  [...$...$...$...$]
24C19030 24C1B7C0 24C1BBC0 00000000 00000000  [...$...$........]
24C19040 00000000 00000000 00000000 00000000  [................]
        Repeat 55 times
24C193C0 00000001 24C193C0 00000000 00000003  [.......$........]
24C193D0 27276A50 24C197D0 24C193D8 24C193D8  [Pj''...$...$...$]
24C193E0 00000001 FAA0BF7D CF693355 800558B9  [....}...U3i..X..]
24C193F0 00000000 00000000 00000055 14086F78  [........U...xo..]
24C19400 002F2506 00000000 00000000 00000000  [.%/.............]
24C19410 00000001 00000000 03000002 00000000  [................]
24C19420 00000001 00000000 00000000 00000000  [................]
24C19430 00000000 00000000 00010001 00000000  [................]
24C19440 4315AD84 140FA3F6 B60940FE 2D193D13  [...C.....@...=.-]
24C19450 A4C47F50 F2BD2A87 F93C5839 725A0720  [P....*..9X<. .Zr]
24C19460 00000000 24C19474 0000004C 00011EDF  [....t..$L.......]
24C19470 24C18FC0 656C6573 2F207463 52202B2A  [...$select /*+ R]
24C19480 4C555345 41435F54 20454843 6F202F2A  [ESULT_CACHE */ o]
24C19490 72656E77 6A626F2C 5F746365 656D616E  [wner,object_name]
24C194A0 6F72660A 7468206D 77203230 65726568  [.from ht02 where]
24C194B0 6A626F20 5F746365 373D6469 30303433  [ object_id=73400]
24C194C0 00000000 00000000 00000000 00000000  [................]
        Repeat 47 times
24C197C0 00000002 24C197C0 00000000 00000003  [.......$........]
24C197D0 24C193D0 27276A50 24C197D8 24C197D8  [...$Pj''...$...$]
24C197E0 00000001 FAA0BF7D CF693355 80060C27  [....}...U3i.'...]
24C197F0 00000000 00000000 00000055 14086F78  [........U...xo..]
24C19800 003B2A06 00000000 00000000 00000000  [.*;.............]
24C19810 00000000 00000000 03000002 00000000  [................]
24C19820 00000001 00000000 00000000 00000000  [................]
24C19830 00000000 00000000 00010001 00000000  [................]
24C19840 4315AD84 140FA3F6 B60940FE 2D193D13  [...C.....@...=.-]
24C19850 A4C47F50 F2BD2A87 F93C5839 725A0720  [P....*..9X<. .Zr]
24C19860 00000000 24C19874 0000004C 00011EDF  [....t..$L.......]
24C19870 24C18FC0 656C6573 2F207463 52202B2A  [...$select /*+ R]
24C19880 4C555345 41435F54 20454843 6F202F2A  [ESULT_CACHE */ o]
24C19890 72656E77 6A626F2C 5F746365 656D616E  [wner,object_name]
24C198A0 6F72660A 7468206D 77203230 65726568  [.from ht02 where]
24C198B0 6A626F20 5F746365 373D6469 30303433  [ object_id=73400]
24C198C0 00000000 00000000 00000000 00000000  [................]
。。。。。。。。。。
24BF7FF0 00000005 00000006 0001A310 00000000  [................]
Total free space   =    24488
UNPINNED RECREATABLE CHUNKS (lru first):
PERMANENT CHUNKS:
  Chunk 24c18fb0 sz=    32796    perm      "perm           "  alo=32784
Dump of memory from 0x24C18FB0 to 0x24C20FCC
24C18FB0 5000801D 00000000 24C20FE0 00008010  [...P.......$....]
24C18FC0 00000000 24C18FC0 00000000 00000002  [.......$........]
24C18FD0 24C22630 24C22630 27276A48 27276A48  [0&.$0&.$Hj''Hj'']
24C18FE0 00000002 9B29D2C8 D0E973A6 8006F2E4  [......)..s......]
24C18FF0 00000000 4E4ED8C5 00000055 14086F78  [......NNU...xo..]
24C19000 002F2506 00011EDF 00000002 00070000  [.%/.............]
24C19010 000001FF 24C19BC0 24C19FC0 24C1A3C0  [.......$...$...$]
24C19020 24C1A7C0 24C1ABC0 24C1AFC0 24C1B3C0  [...$...$...$...$]
24C19030 24C1B7C0 24C1BBC0 00000000 00000000  [...$...$........]
24C19040 00000000 00000000 00000000 00000000  [................]
        Repeat 55 times
24C193C0 00000001 24C193C0 00000000 00000003  [.......$........]
24C193D0 27276A50 24C197D0 24C193D8 24C193D8  [Pj''...$...$...$]
24C193E0 00000001 FAA0BF7D CF693355 800558B9  [....}...U3i..X..]
24C193F0 00000000 00000000 00000055 14086F78  [........U...xo..]
24C19400 002F2506 00000000 00000000 00000000  [.%/.............]
24C19410 00000001 00000000 03000002 00000000  [................]
24C19420 00000001 00000000 00000000 00000000  [................]
24C19430 00000000 00000000 00010001 00000000  [................]
24C19440 4315AD84 140FA3F6 B60940FE 2D193D13  [...C.....@...=.-]
24C19450 A4C47F50 F2BD2A87 F93C5839 725A0720  [P....*..9X<. .Zr]
24C19460 00000000 24C19474 0000004C 00011EDF  [....t..$L.......]
24C19470 24C18FC0 656C6573 2F207463 52202B2A  [...$select /*+ R]
24C19480 4C555345 41435F54 20454843 6F202F2A  [ESULT_CACHE */ o]
24C19490 72656E77 6A626F2C 5F746365 656D616E  [wner,object_name]
24C194A0 6F72660A 7468206D 77203230 65726568  [.from ht02 where]
24C194B0 6A626F20 5F746365 373D6469 30303433  [ object_id=73400]
24C194C0 00000000 00000000 00000000 00000000  [................]
        Repeat 47 times
24C197C0 00000002 24C197C0 00000000 00000003  [.......$........]
24C197D0 24C193D0 27276A50 24C197D8 24C197D8  [...$Pj''...$...$]
24C197E0 00000001 FAA0BF7D CF693355 80060C27  [....}...U3i.'...]
24C197F0 00000000 00000000 00000055 14086F78  [........U...xo..]
24C19800 003B2A06 00000000 00000000 00000000  [.*;.............]
24C19810 00000000 00000000 03000002 00000000  [................]
24C19820 00000001 00000000 00000000 00000000  [................]
24C19830 00000000 00000000 00010001 00000000  [................]
24C19840 4315AD84 140FA3F6 B60940FE 2D193D13  [...C.....@...=.-]
24C19850 A4C47F50 F2BD2A87 F93C5839 725A0720  [P....*..9X<. .Zr]
24C19860 00000000 24C19874 0000004C 00011EDF  [....t..$L.......]
24C19870 24C18FC0 656C6573 2F207463 52202B2A  [...$select /*+ R]
24C19880 4C555345 41435F54 20454843 6F202F2A  [ESULT_CACHE */ o]
24C19890 72656E77 6A626F2C 5F746365 656D616E  [wner,object_name]
24C198A0 6F72660A 7468206D 77203230 65726568  [.from ht02 where]
24C198B0 6A626F20 5F746365 373D6469 30303433  [ object_id=73400]
24C198C0 00000000 00000000 00000000 00000000  [................]
从上面的的信息我们可以看出,query cache 这部分内存存在shared pool中,
而且其管理方式跟shared pool类似,甚至我们可以认为一样,其内存类型
也分为freeable,recr,R-freea等等。
另外从上面的query cache 查询来看,对于dml操作频繁的表,使用该特性可能没有想象中的那么好。
我们可以看到上面第2个sql的执行计划,按照以前的情况来看,该处的逻辑读应该为0,而此时却为2.
测试update频繁操作的时候,执行sql语句,发现也不是想象中的那么好。
不过我这里测试不太严谨,最好是能准备一个千万级别的表,然后做相关测试,然后记录cpu以及内存等
的消耗变化然后进行对比,那样估计比较有说服力。
当然从前面的测试来看,query cache特性对于OLTP系统可能并不合适,这样看来,该特性到时适合DW。