Oracle数据库全表扫描详解(三)

作者简介:惠星星,现就职于北京海天起点,持有OCP 10g、OCP 11g、OCM 11g证书,并有长达8年电力行业业务维护、数据库维护服务经验,擅长Oracle数据库性能优化、故障处理及数据可视化技术研究。

疑惑不解

问题1(已解决): Oracle全表扫描时会进行哪些操作,具体有哪些IO(物理IO、逻辑IO)?

问题2(已解决): 10046 中数据查询(物理IO:6), strace监测中物理IO为3,是6次或3次物理IO,这是一个问题?

问题3(已解决):是否逐个extent多块读数据块并且多块读不能跨extent。

问题4:sread(单块读)和mread(多块读)性能分析?

问题5:sread段头块目的?

问题6:全表扫描查询,有哪些优化方法?

接着上篇的问题继续分析问题4。

山穷水尽

mread 参数

继续插入数据,产生不同的extent size,将DB_FILE_MULTIBLOCK_READ_COUNT设置为99999,观察不同mread的物理读时间。DB_FILE_MULTIBLOCK_READ_COUNT特点如下,

  1. 为了减少IO次数,提高mread单次读取的blocks;
  2. maximum value:((max I/O size)/DB_BLOCK_SIZE), max I/O size表示操作系统最大IO,如果设置的参数值大于max I/O size,使用max I/O size

实验脚本

extent 自动扩展规律

max mread参数

小结:mread参数在11.2.0.4环境max为4096。

mread性能测试1

mread性能测试2

发现以上测试存在大量direct path read等待事件,修改参数

alter system set “_SERIAL_DIRECT_READ”=never;

重新测试结果如下,

mread性能测试汇总

对以上测试结果进行汇总如下,


W_NAME MREAD CN T_US

1

db file sequential read

1

15

4392

2

db file scattered read

8

9

1966

3

db file scattered read

128

1234

3849

4

direct path read

126

37

2245

5

direct path read

1020

64

29686

6

direct path read

4096

5

221046

柳暗花明

  1. mread在128以内和sread性能接近。
  2. scattered read在11.2.0.4环境max值为128。
  3. mread参数在linux 6.8 version 11.2.0.4环境max为4096
  4. direct path read在11.2.0.4环境受mread参数限制max值为4096。
  5. mread 128个块以内,direct path read比scattered read约快1倍。
  6. direct path read在mread 128以后性能衰减严重。
  7. mread参数不建议设置超过128。
  8. extent 自动扩展规律

问题来了

问题1(已解决): Oracle全表扫描时会进行哪些操作,具体有哪些IO(物理IO、逻辑IO)?

问题2(已解决): 10046 中数据查询(物理IO:6), strace监测中物理IO为3,是6次或3次物理IO,这是一个问题?

问题3(已解决):是否逐个extent多块读数据块并且多块读不能跨extent。

问题4(已解决):sread(单块读)和mread(多块读)性能分析?

问题5:sread段头块目的?

问题6:全表扫描查询,有哪些优化方法?

问题7:全表扫描真实环境优化效果?

以上问题待下节分析。

未经允许不得转载:Oracle一体机用户组 » Oracle数据库全表扫描详解(三)

相关推荐