Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1055671
  • 博文数量: 171
  • 博客积分: 55
  • 博客等级: 民兵
  • 技术积分: 2077
  • 用 户 组: 普通用户
  • 注册时间: 2012-01-04 10:11
个人简介

pugna

文章分类

全部博文(171)

文章存档

2021年(4)

2020年(1)

2019年(4)

2018年(5)

2017年(7)

2016年(9)

2015年(36)

2014年(8)

2013年(96)

2012年(1)

分类: Oracle

2013-08-29 14:29:03

最近发现Oracle中不少SQL使用了 update /* append */ 语句,这种使用方式我从来没见过。由于Oracle对于无效的hint不会报错,所以无法得知这个Hint是否生效。只好通过dump实验来核实使用update /* append */ 语句的hint是否生效。


实验准备:
建立一个测试表,本例中为SCOTT.TEST_2013。
create table SCOTT.TEST_2013 as select * from dba_objects;

实验步骤:
1.开启一个新session。

2.输入并执行测试语句,并commit。

3.刷新buffer cache
alter system flush buffer_cache;

4.查询测试表的段头
select header_file,header_block from dba_segments where segment_name='TEST_2013' and owner='SCOTT';
HEADER_FILE HEADER_BLOCK
----------- ------------
      6      814355

5.dump段头block
alter system dump datafile 6 block 814355;

6.查询生成的trace文件路径

实验有一个观察组,两个对照组。
观察组A使用的测试语句为 update /* append */ SCOTT.TEST_2013 set object_name = 'a' where object_id = 100;
对照组B使用的测试语句为 update SCOTT.TEST_2013 set object_name = 'test' where object_id = 100;
对照组C使用的测试语句为 insert /* append */ into SCOTT.TEST_2013 select * from SCOTT.TEST_2013 where rownum <= 1;

A组生成的trace文件中,关于HMW的部分内容为
  -----------------------------------------------------------------
  Extent Header:: spare1: 0      spare2: 0      #extents: 16     #blocks: 128   
                  last map  0x00000000  #maps: 0      offset: 2716  
      Highwater::  0x018cba0f  ext#: 15     blk#: 6      ext size: 8     
  #blocks in seg. hdr's freelists: 0     
  #blocks below: 126   
  mapblk  0x00000000  offset: 15    
                   Unlocked
  --------------------------------------------------------
  Low HighWater Mark :
      Highwater::  0x018cba0f  ext#: 15     blk#: 6      ext size: 8     
  #blocks in seg. hdr's freelists: 0     
  #blocks below: 126   
  mapblk  0x00000000  offset: 15    
  Level 1 BMB for High HWM block: 0x018c6d81
  Level 1 BMB for Low HWM block: 0x018c6d81
  --------------------------------------------------------

B组生成的trace文件中,关于HMW的部分内容为
  -----------------------------------------------------------------
  Extent Header:: spare1: 0      spare2: 0      #extents: 16     #blocks: 128   
                  last map  0x00000000  #maps: 0      offset: 2716  
      Highwater::  0x018cba0f  ext#: 15     blk#: 6      ext size: 8     
  #blocks in seg. hdr's freelists: 0     
  #blocks below: 126   
  mapblk  0x00000000  offset: 15    
                   Unlocked
  --------------------------------------------------------
  Low HighWater Mark :
      Highwater::  0x018cba0f  ext#: 15     blk#: 6      ext size: 8     
  #blocks in seg. hdr's freelists: 0     
  #blocks below: 126   
  mapblk  0x00000000  offset: 15    
  Level 1 BMB for High HWM block: 0x018c6d81
  Level 1 BMB for Low HWM block: 0x018c6d81
  --------------------------------------------------------

C组生成的trace文件中,关于HMW的部分内容为
  -----------------------------------------------------------------
  Extent Header:: spare1: 0      spare2: 0      #extents: 16     #blocks: 128   
                  last map  0x00000000  #maps: 0      offset: 2716  
      Highwater::  0x018cba11  ext#: 15     blk#: 8      ext size: 8     
  #blocks in seg. hdr's freelists: 0     
  #blocks below: 128   
  mapblk  0x00000000  offset: 15    
                   Unlocked
  --------------------------------------------------------
  Low HighWater Mark :
      Highwater::  0x018cba11  ext#: 15     blk#: 8      ext size: 8     
  #blocks in seg. hdr's freelists: 0     
  #blocks below: 128   
  mapblk  0x00000000  offset: 15    
  Level 1 BMB for High HWM block: 0x018c6d81
  Level 1 BMB for Low HWM block: 0x018c6d81
  --------------------------------------------------------

此这3个trace文件可以看到,A和B的HWM都在0x018cba0f,且在HWM之下有126个block,而在C组中,HWM都在0x018cba11,且在HWM之下有128个block,block号由6号变为8号。

也就是说,update /* append */ 的效果和普通update是一样的,即append的hint没有生效。

阅读(1632) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~