在线精品99_中国九九盗摄偷拍偷看_91免费版在线观看_91.app_91高清视频在线_99热最新网站

如何理解Oracle逻辑读和物理读

124次阅读
没有评论

共计 4007 个字符,预计需要花费 11 分钟才能阅读完成。

本篇文章为大家展示了如何理解 Oracle 逻辑读和物理读,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

1. 物理读(physical read)

物理读即是把数据从磁盘读入到 buffer catch 的过程。通常情况下是,如果需要数据的时候发现不存在于 buffer catch 当中,即 oracle 就会执行物理读。

当数据块第一次读取到, 就会缓存到 buffer cache 中, 而第二次读取和修改该数据块时就在内存 buffer cache 了 以下是例子:

1.1 *** 次读取:

C:\Documents and Settings\Paul Yi sqlplus /as sysdba

SQL*Plus: Release 9.2.0.4.0 – Production on Thu Feb 28 09:32:04 2008

Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.

Connected to:

Oracle9i Enterprise Edition Release 9.2.0.4.0 – Production

With the Partitioning, OLAP and Oracle Data Mining options

JServer Release 9.2.0.4.0 – Production

SQL set autotrace traceonly

SQL select * from test;

Execution Plan

———————————————————-

0 SELECT STATEMENT ptimizer=CHOOSE (Cost=2 Card=4 Bytes=8)

1 0 TABLE ACCESS (FULL) OF TEST (Cost=2 Card=4 Bytes=8)

Statistics

———————————————————-

175 recursive calls

0 db block gets

24 consistent gets

9 physical reads –9 个物理读

0 redo size

373 bytes sent via SQL*Net to client

503 bytes received via SQL*Net from client

2 SQL*Net roundtrips to/from client

2 sorts (memory)

0 sorts (disk)

1 rows processed

1.2 第二次读取

SQL select * from test;

Execution Plan

———————————————————-

0 SELECT STATEMENT ptimizer=CHOOSE (Cost=2 Card=4 Bytes=8)

1 0 TABLE ACCESS (FULL) OF TEST (Cost=2 Card=4 Bytes=8)

Statistics

———————————————————-

0 recursive calls

0 db block gets

7 consistent gets

0 physical reads – 没有发生物理读了, 直接从 buffer cache 中读取了

0 redo size

373 bytes sent via SQL*Net to client

503 bytes received via SQL*Net from client

2 SQL*Net roundtrips to/from client

0 sorts (memory)

0 sorts (disk)

1 rows processed

1.3 数据块被重新读入 buffer cache , 这种发生在

如果有新的数据需要被读入 Buffer Cache 中,而 Buffer  Cache 又没有足够的空闲空间,Oracle 就根据 LRU 算法将 LRU 链表中 LRU 端的数据置换出去。当这些数据被再次访问到时,需要重新从磁盘读入。

SQL alter session set events immediate trace name flush_cache  – 清空数据缓冲区

Session altered.

SQL select * from test;

Execution Plan

———————————————————-

0 SELECT STATEMENT ptimizer=CHOOSE (Cost=2 Card=4 Bytes=8)

1 0 TABLE ACCESS (FULL) OF TEST (Cost=2 Card=4 Bytes=8)

Statistics

———————————————————-

0 recursive calls

0 db block gets

7 consistent gets

6 physical reads – 又重新发生了物理读

0 redo size

373 bytes sent via SQL*Net to client

503 bytes received via SQL*Net from client

2 SQL*Net roundtrips to/from client

0 sorts (memory)

0 sorts (disk)

1 rows processed

2. 逻辑读(buffer read)

逻辑读指的就是从 (或者视图从)Buffer Cache 中读取数据块。按照访问数据块的模式不同,可以分为即时读(Current  Read) 和一致性读(Consistent Read)。注意:逻辑 IO 只有逻辑读,没有逻辑写。

即时读

即时读即读取数据块当前的 *** 数据。任何时候在 Buffer  Cache 中都只有一份当前数据块。即时读通常发生在对数据进行修改、删除操作时。这时,进程会给数据加上行级锁,并且标识数据为“脏”数据。

SQL select * from test for update;

Execution Plan

———————————————————-

0 SELECT STATEMENT ptimizer=CHOOSE (Cost=2 Card=4 Bytes=8)

1 0 FOR UPDATE

2 1 TABLE ACCESS (FULL) OF TEST (Cost=2 Card=4 Bytes=8)

Statistics

———————————————————-

0 recursive calls

1 db block gets

14 consistent gets

0 physical reads

252 redo size

386 bytes sent via SQL*Net to client

503 bytes received via SQL*Net from client

2 SQL*Net roundtrips to/from client

0 sorts (memory)

0 sorts (disk)

1 rows processed

SQL

一致性读

Oracle 是一个多用户系统。当一个会话开始读取数据还未结束读取之前,可能会有其他会话修改它将要读取的数据。如果会话读取到修改后的数据,就会造成数据的不一致。一致性读就是为了保证数据的一致性。在 Buffer  Cache 中的数据块上都会有 *** 一次修改数据块时的 SCN。如果一个事务需要修改数据块中数据,会先在回滚段中保存一份修改前数据和 SCN 的数据块,然后再更新 Buffer  Cache 中的数据块的数据及其 SCN,并标识其为“脏”数据。当其他进程读取数据块时,会先比较数据块上的 SCN 和自己的 SCN。如果数据块上的 SCN 小于等于进程本身的 SCN,则直接读取数据块上的数据; 如果数据块上的 SCN 大于进程本身的 SCN,则会从回滚段中找出修改前的数据块读取数据。通常,普通查询都是一致性读。

下面这个例子帮助大家理解一下一致性读:

会话 1 中:

SQL select * from test;

ID

———-

1000

SQL update test set id=2000;

1 row updated.

会话 2 中:

SQL set autotrace on

SQL select * from test;

ID

———-

1000

Execution Plan

———————————————————-

0 SELECT STATEMENT ptimizer=CHOOSE (Cost=2 Card=4 Bytes=8)

1 0 TABLE ACCESS (FULL) OF TEST (Cost=2 Card=4 Bytes=8)

Statistics

———————————————————-

0 recursive calls

0 db block gets

9 consistent gets 没有事物做 update 时 是 7 consistent gets 说明多了 2 个 consistent gets   这 2 个是要从回滚段中获取的

0 physical reads

52 redo size

373 bytes sent via SQL*Net to client

503 bytes received via SQL*Net from client

2 SQL*Net roundtrips to/from client

0 sorts (memory)

0 sorts (disk)

1 rows processed

SQL

上述内容就是如何理解 Oracle 逻辑读和物理读,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注丸趣 TV 行业资讯频道。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-19发表,共计4007字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)
主站蜘蛛池模板: 久久美女精品国产精品亚洲 | 一级免费毛片 | 在线观看特色大片免费视频 | 国产成人在线视频 | 成人午夜视频免费观看 | 自拍亚洲色图 | 亚洲av午夜精品一区二区三区 | 91成人午夜在线精品 | 一级做a爰片久久毛片免费 一级做a爰片久久毛片欧美 | www.日本在线观看 | 亚洲国产人在线播放首页 | 色综合av男人的天堂伊人 | 久久高清精品 | 特级黄一级播放 | 香港三级日本三级a视频 | 日本乱偷人妻中文字幕 | 看一级特黄a大一片 | 亚洲精品久久久久中文字幕m男 | 婷婷综合网 | 大学生被内谢粉嫩无套 | 国产精品久久久久久久久久一区 | 伊人中文网| 女同久久另类99精品国产 | 亚洲熟妇无码爱v在线观看 亚洲熟妇无码八av在线播放 | 亚洲一区在线免费观看 | 国内精品区一区二区三 | 日韩国产一区二区 | 久久久日本久久久久123 | 艳女伦交一级毛片 | 欧美亚洲国产精品久久高清 | 美丽人妻在夫前被黑人 | 一级一片一_级一片一 | 国产亚洲精品久久久美女18黄 | 亚洲色图清纯唯美 | 精品热99 | 日韩综合nv一区二区在线观看 | 18禁止看的免费污网站 | 国产无遮挡a片又黄又爽网站 | 九色视频网 | 国产大屁股喷水视频在线观看 | 91视频中文 |