스터디 진행 중 Index ROW 를 삭제 후 INSERT 했을때 현상은
로그는 정상적이 었습니다.
저희가 미처 체크 못하는 이유가 숨어 있는듯..
아래는 욱짜님 블로그 링크
http://sites.google.com/site/ukja/oracle-is-madr/index-space-reuse
오타가 많네요ㅡ_ㅡ;
SQL> drop table t_index purge;
SQL> create table t_index(id int, name varchar(100));
SQL> create index t_index_idx on t_index(id);
SQL> insert into t_index select rownum, object_name from all_objects where rownum <= 1000 ;
SQL> commit;
SQL> exec tree_dump2(v_owner=>user, v_name=>'t_index_idx');
PL/SQL procedure successfully completed.
– delete 2 row and get index tree dump
SQL> delete from t_index where id <= 2;
2 rows deleted.
SQL> commit ;
Commit complete.
SQL> exec tree_dump2(v_owner=>user, v_name=>'t_index_idx');
PL/SQL procedure successfully completed.
– insert additional big value and get index tree dump
SQL> insert into t_index values(400, 'name');
1 row created.
SQL> commit ;
Commit complete.
SQL> exec tree_dump2(v_owner=>user, v_name=>'t_index_idx');
PL/SQL procedure successfully completed.
– insert additional small value and get index tree dump
SQL> insert into t_index values(-1, 'name');
1 row created.
SQL> commit ;
Commit complete.
SQL> exec tree_dump2(v_owner=>user, v_name=>'t_index_idx');
PL/SQL procedure successfully completed.
음 여기서 반대로 한번 해보자 우선 -1 을 입력 했을때 400 을 입력 했을 때처럼
아래 현상이 발생 되는지 보자
==> 특이하게 신규로 1row 가 insert 되면서 nrow 가 538 => 537, rrow 536 => 537 변경됨
마찬가지 이다.
즉 2 rows 를 삭제 한 상태에서 400 을 입력 하던지 -을 입력 하던지
leaf: 0x40fb83 4258691 (-1: nrow: 538 rrow: 536)
===> 아래처럼 되는것을 확인 하였다.
leaf: 0x40fb83 4258691 (-1: nrow: 537 rrow: 537)
왜 그런지는 모르겠음 ㅡ_ㅡ;
차이를 못찾겠네요 ㅡ_ㅡ;
더 찾아보구 Update 하겠습니다.
2.1 dba_Tables 에서 blocks
BLOCKS* NUMBER Number of used data blocks in the table
즉, Table 내에서 사용된 데이타 블록의 갯수
SQL> @gather T_INDEX
PL/SQL procedure successfully completed.
SQL> select table_name, blocks from dba_tables where table_name ='T_INDEX';
TABLE_NAME BLOCKS
2.2 dba_segments 에서 blocks
BLOCKS NUMBER Size, in Oracle blocks, of the segment
즉, 세그먼크의 사이즈
SQL> select segment_name, blocks, EXTENTS, bytes from dba_segments
where segment_name ='T_INDEX';
SEGMENT_NAME BLOCKS EXTENTS BYTES
==> 8k size Block 8개로 이루어지 Extent 하나로 구성된 Table
2.1 과 2.2 가 다른데.. 왜 이런 차이가 나오는지.. 개념적으로 차이가 있는것 같은데..