Q6 많이 사용하는 데이터베이스에서 몇몇 테이블의 크기를 구하고자 합니다. SQL 구문으로 가능한지요?
A sysmaster 데이터베이스에는 각 테이블들이 할당받은 extent 크기 정보를 가지고 있습니다. DB Server 내부에서 할당받은 모든 extent에 대하여 어느 데이터베이스의 어느 테이블에 할당한 extent인지, 그 시작 위치와 그 크기를 저장하고 있는 테이블이 바로 sysmaster의 sysextents 라는 테이블입니다. 이런 정보가 저장되어 있으므로 다음과 같이 간단한 SQL 구문으로 원하는 테이블 크기를 구할 수 있습니다.
여기서 "size"는 "Page 단위"입니다. 한 Page 크기는 H/W 시스템마다 다를 수 있으며, 일반적으로 Solaris와 HP-UX는 2KBytes이며, AIX는 4KBytes입니다.
database sysmaster;
select dbsname, tabname, sum(size) --dbsname;database name
from sysextents --tabname;table name
where dbsname="bluesky"
group by 1,2
order by 3 desc;
위의 질의는 "bluesky"라는 데이터베이스의 모든 table에 대해서 그 extent 크기의 합을 구해 줄 것입니다. 만일 원하는 한 테이블에 대해서만 크기를 구하고 싶다면 다음과 같이 사용하십시오. 다음의 질의는 "bluesky" 데이터베이스의 "maint" 테이블의 크기만 리턴할 것입니다.
database sysmaster;
select dbsname, tabname, sum(size) --dbsname;database name
from sysextents --tabname;table name
where dbsname="bluesky"
and tabname="maint"
group by 1,2;
dbsname tabname (sum)
bluesky maint 3700
|