视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
实验讲解DB_FILE_MULTIBLOCK_READ_COUNT对物理读和IO次数的影响
2020-11-09 14:43:50 责编:小采
文档


当执行SELECT语句时,如果在内存里找不到相应的数据,就会从磁盘读取进而缓存至LRU末端(冷端),这个过程就叫物理读。当相应数据已在内存,就会逻辑读。 物理读是磁盘读,逻辑读是内存读;内存读的速度远比磁盘读来得快。 参数db_file_multiblock_read_coun

当执行SELECT语句时,如果在内存里找不到相应的数据,就会从磁盘读取进而缓存至LRU末端(冷端),这个过程就叫物理读。当相应数据已在内存,就会逻辑读。

物理读是磁盘读,逻辑读是内存读;内存读的速度远比磁盘读来得快。

参数db_file_multiblock_read_count=N,会决定在全表扫描或索引全扫描时单次IO最大读取N个数据块。

下在结合实验来讲解物理读:

创建测试表:

create table t3 as select * from dba_segments tablespace users;

对测试表进行统计信息收集:

begin
dbms_stats.gather_table_stats(ownname => 'SYS',tabname => 'T3',cascade => true);
end;

查看T3表的相关信息:

select * from dba_tables where table_name='T3'

数据分布在100个数据块

修改参数

SQL> alter session set db_file_multiblock_read_count=1;

对T3表全扫描

可以看到,T3全扫描过程读取了101个数据块,同时引起103内存读(包括当前读和一致读)

截取这个步骤的AWR信息

db_file_multiblock_read_count=1的情况下,查询T3全表数据期间发生100.3个数据块的物理读,IO次数为100.3次。

USERS表空间的user01.dbf数据文件发生了101次读操作

增大db_file_multiblock_read_count之后

SQL> alter session set db_file_multiblock_read_count=128;

Session altered.

SQL> alter system flush buffer_cache;

查询表T3

物理读依旧101,逻辑读也相应改变

USERS表空间users01.dbf数据文件读次数降为15次

同样的数量的数据块物理读,如果单次读取的数据块越多,那么IO次数就越少,系统性能则越好。

-------------------------------------------------------------------------------------------------

本文来自于我的技术博客 http://blog.csdn.net/robo23

转载请标注源文链接,否则追究法律责任!

下载本文
显示全文
专题