free block 관리
일반적으로 BLOCK의 free space에 관한 정보를 보기 위해 dbms_space 패키지를 주로 이용 했습니다. 그러나 9i의 auto segment space 관리를 이용한다면 dbms_space 패키지의 free_block 프로시저는 오류를 리턴 할 것 입니다.( freelists를 사용하지 않아서 … )
9i 부터는 dbms_space.space_usage 프러시저를 새로 추가하여 자동 시그먼트 관리에서의 segment에 대한 free space를 확인 하도록 하고 있습니다.
---------------------------------------------------
SCOTT으로 로그인 후 다음과 같이 테이블을 만듭니다.
---------------------------------------------------
create table test (
A varchar2(1000)
)
pctused 60
pctfree 20
initrans 5
maxtrans 20
storage (
initial 10k
next 10k
minextents 2
maxextents 3
pctincrease 50
freelists 3
)
tablespace autospace
------------------------------------------
SYS계정에서 다음을 실행 시켜 블럭을 확인 합니다.
------------------------------------------
SQL> var unfbs number
SQL> var unfbt number
SQL> var fs1bs number
SQL> var fs1bt number
SQL> var fs2bs number
SQL> var fs2bt number
SQL> var fs3bs number
SQL> var fs3bt number
SQL> var fs4bs number
SQL> var fs4bt number
SQL> var fbs number
SQL> var fbt number
SQL> var fbt number
SQL> print unfbs unfbt fbs fbt
UNFBS
----------
0
UNFBT
----------
0
FBS
----------
0
FBT
----------
0
SQL> print fs1bs fs1bt fs2bs fs2bt fs3bs fs3bt fs4bs fs4bt
FS1BS
----------
0
FS1BT
----------
0
FS2BS
----------
0
FS2BT
----------
0
FS3BS
----------
0
FS3BT
----------
0
FS4BS
----------
0
FS4BT
----------
0
모두 0 임,,,, 데이터가 한 건도 없으니...
이젠 데이터를 넣습니다.
----------------------
SCOTT 계정 에서
-----------------------
SQL> insert into test values ('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa');
1 개의 행이 만들어졌습니다.
SQL> commit;
커밋이 완료되었습니다.
위의 insert를 아래 카운트 수 정도까지 반복 합니다.
SQL> select count(*) from test;
COUNT(*)
----------
274
-----------------------------
SYS 계정에서 블록의 사용을 확인
-----------------------------
SQL> exec dbms_space.space_usage('SCOTT','TEST','TABLE', :unfbs, :unfbt, :f
s1bs, :fs1bt, :fs2bs, :fs2bt, :fs3bs, :fs3bt, :fs4bs, :fs4bt, :fbs, :fbt)
PL/SQL 처리가 정상적으로 완료되었습니다.
SQL> print unfbs unfbt fbs fbt
UNFBS
----------
0
UNFBT
----------
0
FBS
----------
21
FBT
----------
172032
insert가 불가능 한 블록의 수가 21개 이며 그 사이즈는 172032 byte라는 의미(pct_free를 넘어선 블록들의 수가 21이라는 의미)
SQL> print fs1bs fs1bt fs2bs fs2bt fs3bs fs3bt fs4bs fs4bt
FS1BS
----------
0
FS1BT
----------
0
FS2BS
----------
0
FS2BT
----------
0
FS3BS
----------
0
FS3BT
----------
0
FS4BS
----------
5
FS4BT
----------
40960
fs1은 0~25%, fs2는 25~50%, fs3는 50~75%, fs4는 75% ~ 100% free space를 가지고 block 의 수와 크기를 보여 줍니다. 현재 75~100%가 비어 있는 블록은 5개 있으며 그사이즈는 40960 이라는 의미
참고로 알아둘 것은 …
위 예의 경우 데이터를 가득 넣었기 때문에 많은 불록들이 사용되어 pct_free가 20%가 된 블록이 많이 있을 것이다. 그런데 0~25%가 0이라니(fs1bs 값)…
그 이유는 pct_free를 넘어선 블록들은 fs1이건 fs2건 그 대상에서 제외하므로 그렇습니다. 즉 이런 것들은 full 상태가 되는 것입니다.
일반적으로 BLOCK의 free space에 관한 정보를 보기 위해 dbms_space 패키지를 주로 이용 했습니다. 그러나 9i의 auto segment space 관리를 이용한다면 dbms_space 패키지의 free_block 프로시저는 오류를 리턴 할 것 입니다.( freelists를 사용하지 않아서 … )
9i 부터는 dbms_space.space_usage 프러시저를 새로 추가하여 자동 시그먼트 관리에서의 segment에 대한 free space를 확인 하도록 하고 있습니다.
---------------------------------------------------
SCOTT으로 로그인 후 다음과 같이 테이블을 만듭니다.
---------------------------------------------------
create table test (
A varchar2(1000)
)
pctused 60
pctfree 20
initrans 5
maxtrans 20
storage (
initial 10k
next 10k
minextents 2
maxextents 3
pctincrease 50
freelists 3
)
tablespace autospace
------------------------------------------
SYS계정에서 다음을 실행 시켜 블럭을 확인 합니다.
------------------------------------------
SQL> var unfbs number
SQL> var unfbt number
SQL> var fs1bs number
SQL> var fs1bt number
SQL> var fs2bs number
SQL> var fs2bt number
SQL> var fs3bs number
SQL> var fs3bt number
SQL> var fs4bs number
SQL> var fs4bt number
SQL> var fbs number
SQL> var fbt number
SQL> var fbt number
SQL> print unfbs unfbt fbs fbt
UNFBS
----------
0
UNFBT
----------
0
FBS
----------
0
FBT
----------
0
SQL> print fs1bs fs1bt fs2bs fs2bt fs3bs fs3bt fs4bs fs4bt
FS1BS
----------
0
FS1BT
----------
0
FS2BS
----------
0
FS2BT
----------
0
FS3BS
----------
0
FS3BT
----------
0
FS4BS
----------
0
FS4BT
----------
0
모두 0 임,,,, 데이터가 한 건도 없으니...
이젠 데이터를 넣습니다.
----------------------
SCOTT 계정 에서
-----------------------
SQL> insert into test values ('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa');
1 개의 행이 만들어졌습니다.
SQL> commit;
커밋이 완료되었습니다.
위의 insert를 아래 카운트 수 정도까지 반복 합니다.
SQL> select count(*) from test;
COUNT(*)
----------
274
-----------------------------
SYS 계정에서 블록의 사용을 확인
-----------------------------
SQL> exec dbms_space.space_usage('SCOTT','TEST','TABLE', :unfbs, :unfbt, :f
s1bs, :fs1bt, :fs2bs, :fs2bt, :fs3bs, :fs3bt, :fs4bs, :fs4bt, :fbs, :fbt)
PL/SQL 처리가 정상적으로 완료되었습니다.
SQL> print unfbs unfbt fbs fbt
UNFBS
----------
0
UNFBT
----------
0
FBS
----------
21
FBT
----------
172032
insert가 불가능 한 블록의 수가 21개 이며 그 사이즈는 172032 byte라는 의미(pct_free를 넘어선 블록들의 수가 21이라는 의미)
SQL> print fs1bs fs1bt fs2bs fs2bt fs3bs fs3bt fs4bs fs4bt
FS1BS
----------
0
FS1BT
----------
0
FS2BS
----------
0
FS2BT
----------
0
FS3BS
----------
0
FS3BT
----------
0
FS4BS
----------
5
FS4BT
----------
40960
fs1은 0~25%, fs2는 25~50%, fs3는 50~75%, fs4는 75% ~ 100% free space를 가지고 block 의 수와 크기를 보여 줍니다. 현재 75~100%가 비어 있는 블록은 5개 있으며 그사이즈는 40960 이라는 의미
참고로 알아둘 것은 …
위 예의 경우 데이터를 가득 넣었기 때문에 많은 불록들이 사용되어 pct_free가 20%가 된 블록이 많이 있을 것이다. 그런데 0~25%가 0이라니(fs1bs 값)…
그 이유는 pct_free를 넘어선 블록들은 fs1이건 fs2건 그 대상에서 제외하므로 그렇습니다. 즉 이런 것들은 full 상태가 되는 것입니다.
![]() | ![]() ![]() | 12-27 | 2893 | |
![]() | ![]() ![]() | 12-11 | 2105 | |
53 | ![]() ![]() | 03-15 | 1974 | |
52 | ![]() ![]() | 01-31 | 2106 | |
51 | ![]() ![]() | 01-31 | 3067 | |
50 | ![]() ![]() | 01-31 | 1623 | |
49 | ![]() ![]() | 01-19 | 1947 | |
48 | ![]() ![]() | 01-11 | 1814 | |
47 | ![]() ![]() | 01-03 | 2431 | |
46 | ![]() ![]() | 12-27 | 2893 | |
45 | ![]() ![]() | 12-19 | 2026 | |
44 | ![]() ![]() | 12-14 | 1996 | |
43 | ![]() ![]() | 12-11 | 2105 | |
42 | ![]() ![]() | 12-09 | 1637 | |
41 | ![]() ![]() | 12-01 | 1862 | |
40 | ![]() ![]() | 12-01 | 2110 | |
39 | ![]() ![]() | 12-01 | 1509 |
댓글 없음:
댓글 쓰기