首页 > 其他分享 >[20231020]为什么刷新缓存后输出记录顺序发生变化5.txt

[20231020]为什么刷新缓存后输出记录顺序发生变化5.txt

时间:2023-10-23 21:55:54浏览次数:33  
标签:10 00 缓存 20231020 -- 140372804078232 file txt id

[20231020]为什么刷新缓存后输出记录顺序发生变化5.txt

--//前几天做了单表刷新缓存后输出记录顺序发生变化的情况,今天测试2个表的情况。
--//我遇到一个奇怪的现象,做一个记录,我无法使用10046跟踪.

1.环境:
[email protected]:1521/orcl> @ ver1
[email protected]:1521/orcl> @ pr
==============================
PORT_STRING                   : x86_64/Linux 2.4.xx
VERSION                       : 18.0.0.0.0
BANNER                        : Oracle Database 18c Enterprise Edition Release 18.0.0.0.0 - Production
BANNER_FULL                   : Oracle Database 18c Enterprise Edition Release 18.0.0.0.0 - Production
Version 18.3.0.0.0
BANNER_LEGACY                 : Oracle Database 18c Enterprise Edition Release 18.0.0.0.0 - Production
CON_ID                        : 0
PL/SQL procedure successfully completed.

2.建立测试例子:
create table t1  pctfree 99 as select level id, lpad(level, 3500, 'T1') vc from dual connect by level <= 500 order by dbms_random.random;
create table t2  pctfree 99 as select level id, lpad(level, 3500, 'T2') vc from dual connect by level <= 500 order by dbms_random.random;
--//建立的表T1,T2非常特殊1块1条记录,这样便于后面的分析。

create index i_t1_id on t1(id) ;
create index i_t2_id on t2(id) ;

exec dbms_stats.gather_table_stats(null, 'T1', cascade=>true);
exec dbms_stats.gather_table_stats(null, 'T2', cascade=>true);

3.测试:
--//sqlplus 的版本18c.
[email protected]:1521/orcl> show sqlpluscompatibility
sqlpluscompatibility 18.0.0

[email protected]:1521/orcl> alter system flush buffer_cache;
System altered.

[email protected]:1521/orcl> SELECT /*+ leading (t1 t2) use_nl(t2) */ t1.id,substr(t1.vc,3496,5) vc1,substr(t2.vc,3496,5) vc2 FROM t1 , t2 WHERE t1.id = t2.id AND t1.id between 1 and 10;
 ID VC1        VC2
--- ---------- ----------
  1 1T1T1      2T2T1
  2 1T1T2      2T2T2
 10 1T110      2T210
  9 1T1T9      2T2T9
  3 1T1T3      2T2T3
  4 1T1T4      2T2T4
  5 1T1T5      2T2T5
  6 1T1T6      2T2T6
  7 1T1T7      2T2T7
  8 1T1T8      2T2T8
10 rows selected.
--//这次又与单表扫描不同id=10,9出现在前面.id=3,4出现在后面.

--//执行计划如下:
Plan hash value: 2852340061
-------------------------------------------------------------------------------------------------------------------------------------------
| Id  | Operation                             | Name    | Starts | E-Rows |E-Bytes| Cost (%CPU)| E-Time   | A-Rows |   A-Time   | Buffers |
-------------------------------------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                      |         |      1 |        |       |    33 (100)|          |     10 |00:00:00.01 |      32 |
|   1 |  NESTED LOOPS                         |         |      1 |      9 | 63090 |    33   (0)| 00:00:01 |     10 |00:00:00.01 |      32 |
|   2 |   NESTED LOOPS                        |         |      1 |     10 | 63090 |    33   (0)| 00:00:01 |     10 |00:00:00.01 |      22 |
|   3 |    TABLE ACCESS BY INDEX ROWID BATCHED| T1      |      1 |     10 | 35050 |    13   (0)| 00:00:01 |     10 |00:00:00.01 |      13 |
|*  4 |     INDEX RANGE SCAN                  | I_T1_ID |      1 |     10 |       |     2   (0)| 00:00:01 |     10 |00:00:00.01 |       3 |
|*  5 |    INDEX RANGE SCAN                   | I_T2_ID |     10 |      1 |       |     1   (0)| 00:00:01 |     10 |00:00:00.01 |       9 |
|   6 |   TABLE ACCESS BY INDEX ROWID         | T2      |     10 |      1 |  3505 |     2   (0)| 00:00:01 |     10 |00:00:00.01 |      10 |
-------------------------------------------------------------------------------------------------------------------------------------------

[email protected]:1521/orcl> @ oid 423778,423776,423779,423777
owner object_name object_type SUBOBJECT_NAME CREATED             LAST_DDL_TIME       status    DATA_OBJECT_ID  OBJECT_ID
----- ----------- ----------- -------------- ------------------- ------------------- --------- -------------- ----------
TTT   T1          TABLE                      2023-10-16 11:05:05 2023-10-16 11:05:17 VALID             423776     423776
TTT   T2          TABLE                      2023-10-16 11:05:09 2023-10-16 11:05:22 VALID             423777     423777
TTT   I_T1_ID     INDEX                      2023-10-16 11:05:17 2023-10-16 11:05:17 VALID             423778     423778
TTT   I_T2_ID     INDEX                      2023-10-16 11:05:22 2023-10-16 11:05:22 VALID             423779     423779

[email protected]:1521/orcl> select /*+ index(t1) */ id,substr(vc,3498,3),rowid,dbms_rowid.ROWID_BLOCK_NUMBER(rowid) from  t1 where id between 1 and 10;
        ID SUBSTR ROWID              DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID)
---------- ------ ------------------ ------------------------------------
         1 1T1    AABndgAAMAAC9GjAAA                               774563
         2 1T2    AABndgAAMAAC+6cAAA                               781980
         3 1T3    AABndgAAMAAC9ElAAA                               774437
         4 1T4    AABndgAAMAAC9EKAAA                               774410
         5 1T5    AABndgAAMAAC9CHAAA                               774279
         6 1T6    AABndgAAMAAC9H+AAA                               774654
         7 1T7    AABndgAAMAAC+6EAAA                               781956
         8 1T8    AABndgAAMAAC9DPAAA                               774351
         9 1T9    AABndgAAMAAC9GVAAA                               774549
        10 110    AABndgAAMAAC9GiAAA                               774562

10 rows selected.

[email protected]:1521/orcl> select /*+ index(t2) */ id,substr(vc,3498,3),rowid,dbms_rowid.ROWID_BLOCK_NUMBER(rowid) from  t2 where id between 1 and 10;
        ID SUBSTR ROWID              DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID)
---------- ------ ------------------ ------------------------------------
         1 2T1    AABndhAAMAAC9RMAAA                               775244
         2 2T2    AABndhAAMAAC9PjAAA                               775139
         3 2T3    AABndhAAMAAC9RUAAA                               775252
         4 2T4    AABndhAAMAAC9QoAAA                               775208
         5 2T5    AABndhAAMAAC9OOAAA                               775054
         6 2T6    AABndhAAMAAC9MDAAA                               774915
         7 2T7    AABndhAAMAAC9M4AAA                               774968
         8 2T8    AABndhAAMAAC9MNAAA                               774925
         9 2T9    AABndhAAMAAC9PWAAA                               775126
        10 210    AABndhAAMAAC9NUAAA                               774996
10 rows selected.

4.继续:
--//但是当我打开10046跟踪时候发现,输出顺序变了.我反复测试多次,结果都一样.

[email protected]:1521/orcl> alter system flush buffer_cache;
System altered.

[email protected]:1521/orcl> alter session set events '10046 trace name context forever, level 12';
Session altered.

[email protected]:1521/orcl> SELECT /*+ leading (t1 t2) use_nl(t2) */ t1.id,substr(t1.vc,3496,5) vc1,substr(t2.vc,3496,5) vc2 FROM t1 , t2 WHERE t1.id = t2.id AND t1.id between 1 and 10;

        ID VC1        VC2
---------- ---------- ----------
         1 1T1T1      2T2T1
         2 1T1T2      2T2T2
         3 1T1T3      2T2T3
        10 1T110      2T210
         4 1T1T4      2T2T4
         5 1T1T5      2T2T5
         6 1T1T6      2T2T6
         7 1T1T7      2T2T7
         8 1T1T8      2T2T8
         9 1T1T9      2T2T9
10 rows selected.
--//仅仅id=10记录在前.我反复多次结果都是一样.

[email protected]:1521/orcl> alter session set events '10046 trace name context off';
Session altered.

$ egrep "db file|FETCH" /u01/app/oracle/diag/rdbms/orclcdb/orclcdb/trace/orclcdb_ora_3512.trc
WAIT #140372804078232: nam='db file sequential read' ela= 17576 file#=41 block#=774867 blocks=1 obj#=423778 tim=11988387762053   --//I_T1_ID 的root
WAIT #140372804078232: nam='db file sequential read' ela= 737 file#=41 block#=774868 blocks=1 obj#=423778 tim=11988387762973     --//I_T1_ID 的leaf
WAIT #140372804078232: nam='db file sequential read' ela= 7799 file#=41 block#=774563 blocks=1 obj#=423776 tim=11988387770948    --//T1 id=1
WAIT #140372804078232: nam='db file sequential read' ela= 554 file#=41 block#=774875 blocks=1 obj#=423779 tim=11988387771727     --//I_T2_ID 的root
WAIT #140372804078232: nam='db file sequential read' ela= 372 file#=41 block#=774876 blocks=1 obj#=423779 tim=11988387772246     --//I_T2_ID 的leaf  
WAIT #140372804078232: nam='db file sequential read' ela= 13610 file#=41 block#=775244 blocks=1 obj#=423777 tim=11988387785993   --//T2 id=1
FETCH #140372804078232:c=3623,e=41865,p=6,cr=6,cu=0,mis=0,r=1,dep=0,og=1,plh=2852340061,tim=11988387786137                                            
WAIT #140372804078232: nam='db file sequential read' ela= 13947 file#=41 block#=781980 blocks=1 obj#=423776 tim=11988387801056   --//T1 id=2
WAIT #140372804078232: nam='db file sequential read' ela= 7307 file#=41 block#=775139 blocks=1 obj#=423777 tim=11988387808529    --//T2 id=2
WAIT #140372804078232: nam='db file sequential read' ela= 11484 file#=41 block#=774437 blocks=1 obj#=423776 tim=11988387820204   --//T1 id=3
WAIT #140372804078232: nam='db file sequential read' ela= 646 file#=41 block#=775252 blocks=1 obj#=423777 tim=11988387821049     --//T2 id=3
WAIT #140372804078232: nam='db file parallel read' ela= 30816 files=1 blocks=7 requests=7 obj#=423776 tim=11988387852962         --//T1 读取id=4..10
WAIT #140372804078232: nam='db file sequential read' ela= 6846 file#=41 block#=774996 blocks=1 obj#=423777 tim=11988387860062    --//T2 id=10
WAIT #140372804078232: nam='db file sequential read' ela= 314 file#=41 block#=775208 blocks=1 obj#=423777 tim=11988387860618     --//T2 id=4
WAIT #140372804078232: nam='db file sequential read' ela= 254 file#=41 block#=775054 blocks=1 obj#=423777 tim=11988387861046     --//T2 id=5
WAIT #140372804078232: nam='db file sequential read' ela= 260 file#=41 block#=774915 blocks=1 obj#=423777 tim=11988387861469     --//T2 id=6
WAIT #140372804078232: nam='db file sequential read' ela= 260 file#=41 block#=774968 blocks=1 obj#=423777 tim=11988387861902     --//T2 id=7
WAIT #140372804078232: nam='db file sequential read' ela= 311 file#=41 block#=774925 blocks=1 obj#=423777 tim=11988387862396     --//T2 id=8
WAIT #140372804078232: nam='db file sequential read' ela= 218 file#=41 block#=775126 blocks=1 obj#=423777 tim=11988387862765     --//T2 id=9
FETCH #140372804078232:c=4384,e=75795,p=18,cr=26,cu=0,mis=0,r=9,dep=0,og=1,plh=2852340061,tim=11988387862837


标签:10,00,缓存,20231020,--,140372804078232,file,txt,id
From: https://www.cnblogs.com/lfree/p/17783568.html

相关文章

  • mybatis的一级缓存和事务注解失效导致的查询结果缺失
    事情是这样的,测试发现有个查询接口,第一次调的时候没能返回数据,第二次调就可以正常返回。这个接口的功能是查询用户的现有福利数据。具体点的逻辑是1,查询数据库,mybatis,xml里面写的关联查询,主表和子表关联。2,判断查询结果,如果没有子表部分的信息,则按照业务逻辑生成子表数......
  • 【实测有效】.epub文件如何批量转换为word/AZW3/MOBI/DOCX/RTF/TXT/HTMLZ? 附工具下载
    常见电子书格式有很多种,其中有一种.epub格式,这种格式的文件比较多,也比较容易找到,阅读器也有多款软件支持。国内用的相对多点的比如ApabiReader。有时候,.epub文件明明是正常的,但ApabiReader却会报错而无法打开。上篇优爱酷分享了如何将.epub文件转换为可编辑的word,但是手动操作比......
  • 什么是缓存雪崩
    在同一时间大量请求同一个接口,接口就会不断的查询数据库,就会导致缓存的雪崩; 解决办法:在基础时间的基础上,再加上一个随机的过期时间比如10-15s; ps:不要使用newRandom生成随机数,因为大量的随机数使用newRandom可能会导致生成同一个数值;......
  • CmakeList.txt语法
    CmakeList语法PROJECT(hello)#PROJECT(名称,语言):指定工程名称和支持的语言#PROJECT(hello,CCXX):指定了工程名称,支持C和C++SET(SRC_LISTmain.cpp)#SET():用来显示指定变量#SET(SRC_LISTmain.cpptest.cpp)MESSAGE(STATUS"ThisisBINARYdir"${HELLO_BINARY_......
  • C#WebApi 对数据进行缓存加快前请求数据的速度
    usingClassLibrary1;usingClassLibrary2;usingMicrosoft.AspNetCore.Mvc;usingMicrosoft.Extensions.Caching.Memory;usingMicrosoft.Extensions.Logging;usingWebApplication1.IServices;usingWebApplication1.Utility.SwaggerExt;namespaceWebApplication1.......
  • celery包结构、celery延迟任务和定时任务、django中使用celery、接口缓存、双写一致性
    celery包结构project├──celery_task#celery包│├──__init__.py#包文件│├──celery.py#celery连接和配置相关文件,且名字必须叫celery.py│└──tasks.py#所有任务函数├──add_task.py#添加任务......
  • redis其他操作、redis管道、django中使用redis、django缓存、celery介绍、补充单例
    redis其他操作'''delete(*names)exists(name)keys(pattern='*')expire(name,time)rename(src,dst)move(name,db))randomkey()type(name)'''#redis的key值,最大可以是多少?最大不超过512M一般1KB#redis的value值,最大可以是多少?最大不超过512M......
  • celery包结构、celery延迟任务和定时任务、django中使用celery、接口缓存、双写一致性
    celery包结构project├──celery_task #celery包  这个包可以放在任意位置│├──__init__.py#包文件│├──celery.py#celery连接和配置相关文件,且名字必须叫celery.py│└──tasks.py#所有任务函数│├──add_task.p......
  • Canal实现缓存同步策略
    Canal介绍个人在学习Redis的过程中,遇到多级缓存的处理方法,我本人的多级缓存分类里面提到过个人学习中的项目构成。简单来说就是OpenResty集群负责缓存一些静态性比较强的数据,比如说这个网页上的分类信息等基本不变化的数据,而Redis和JVM进程缓存(使用Caffeine实现)负责缓存变化性......
  • 希捷推出Exos系列24TB硬盘:配备增强型缓存 性能提高三倍
    希捷推出了全新的Exos24TB硬盘。其基于传统的CMR构建,为3.5英寸规格,转速为7200RPM。同时,Exos系列24TB硬盘拥有10片磁盘,每片磁盘的容量为2.4TB,是希捷存储密度最高的硬盘,适用于超大规模企业和数据中心,提供业界领先的总拥有成本(TCO)。Exos24TB硬盘针对最大存储及最大机架空间设计,......