반응형

# Altibase 버전

$ altibase -v



# tablespace 생성

iSQL> create tablespace 테이블스페이스명 datafile '파일명(tbs_users01.dbf)' size 10M autoextend on next 1M maxsize 100M;



# memory tablespace 사용량을 조회

iSQL> select 'MEM TOTAL SIZE' tablespace_name, round(MEM_MAX_DB_SIZE/1024/1024)  as 'max size(M)'   ,

round((MEM_MAX_DB_SIZE - MEM_ALLOC_PAGE_COUNT*32*1024)/1024/1024) as 'free size(MB)',

round(MEM_ALLOC_PAGE_COUNT*32*1024/1024/1024)  as 'alloc size(MB)',

round((MEM_MAX_DB_SIZE - MEM_ALLOC_PAGE_COUNT*32*1024)/MEM_MAX_DB_SIZE*100, 2) as 'free %'

from v$database

union all

select SPACE_NAME tablespace_name, 

case2(space_id =1, 0, round(case2(MAXSIZE=0,CURRENT_SIZE,MAXSIZE)/1024/1024)) as 'total size(MB)',

case2(space_id =1, 0, trunc((case2(MAXSIZE=0,CURRENT_SIZE,MAXSIZE) - CURRENT_SIZE)/1024/1024)) as 'free size(MB)',

round(ALLOC_PAGE_COUNT*32*1024/1024/1024)  as 'alloc size(MB)',

case2(space_id =1, 0, trunc((case2(MAXSIZE=0,CURRENT_SIZE,MAXSIZE) - CURRENT_SIZE)/case2(MAXSIZE=0,CURRENT_SIZE,MAXSIZE)*100,2)) 'free %'

from  v$mem_tablespaces

where SPACE_ID <> 0;



# user memory tablespace 사용량

# current_size 는 '테이블스페이스의 현재 크기' : 100M 의 테이블스페이스를 만들었다면  current_size는 100M

# 테이블스페이스의 실 사용량 : (ALLOC_PAGE_COUNT - FREE_PAGE_COUNT)*32/1024 (MB)

iSQL> SELECT 

UF.SPACE_NAME SPACENAME, 

ROUND(UF.MAXSIZE/1024/1024, 3)||' MB' MAXSIZE , 

ROUND(UF.ALLOC_PAGE_COUNT*32/1024, 3)||' MB' CURRSIZE, 

NVL(to_char(ROUND((UF.ALLOC_PAGE_COUNT - UF.FREE_PAGE_COUNT)*32/1024,3)),'N/A')||' MB' USEDSIZE, 

ROUND((UF.ALLOC_PAGE_COUNT-UF.FREE_PAGE_COUNT) / UF.ALLOC_PAGE_COUNT * 100, 3) ||' %' USAGE 

FROM 

V$MEM_TABLESPACES UF




# 메모리 테이블 스페이스에 속한 인덱스의 사용율

iSQL> SELECT  C.USER_NAME index_owner,

        E.INDEX_NAME index_name,

        case2(E.INDEX_TYPE=1,'B-TREE', E.INDEX_TYPE=2,'R-TREE') INDEX_TYPE

        , '(Memory)'||'16 bytes * ROWCOUNT ' 'allocate(M)'

        , table_name

FROM X$INDEX B,

     SYSTEM_.SYS_USERS_ C,

     V$MEM_TABLESPACES D,

     SYSTEM_.SYS_INDICES_ E,

     SYSTEM_.SYS_TABLES_ F

WHERE B.INDEX_ID = E.INDEX_ID

  AND E.USER_ID = C.USER_ID

  AND F.USER_ID = E.USER_ID

  AND F.TBS_ID = D.SPACE_ID

  AND F.TABLE_OID = B.TABLE_OID

  and c.user_id <> 1;



# 메모리 테이블 스페이스에 속한 테이블의 사용율

iSQL> SELECT USER_NAME table_owner, TABLE_NAME table_name, ROUND((FIXED_ALLOC_MEM + VAR_ALLOC_MEM)/1024/1024 ) 'allocate(M)', 'MEMORY' as TYPE

FROM SYSTEM_.SYS_TABLES_ A, SYSTEM_.SYS_USERS_ B,

     V$MEMTBL_INFO C

WHERE A.USER_ID = B.USER_ID

  AND A.TABLE_OID = C.TABLE_OID

  AND B.USER_ID <> 1

  AND TABLE_TYPE = 'T';




# 메모리 테이블 스페이스 크기 변경

-----------------------------------------------------------------

$ altibase_home/conf/altibase.properties

MEM_MAX_DB_SIZE 값 설정


$ server restart

iSQL> select name, value1 from v$property where name like '%MEM_MAX%';

-----------------------------------------------------------------


# Disk 테이블 스페이스 크기 변경.

iSQL> select id, name from v$tablespaces;

iSQL> select spaceid, name from v$datafiles;

iSQL> alter tablespace tbsname alter datafile 'datafile path' size 10G;





============================ 테이블 스페이스 확인 및 추가 =============================

iSQL> set linesize 300

iSQL> set colsize 50



used size 가 alloc size 보다 작은데 table space full 에러가 발생하는 이유.

 - 특정 테이블이 allocation 을 잡아놓고 free 해놓아서 그 테이블만의 공간으로 할당되어 있어서.




----------------------------------------------------------

############ 테이블 별 table space 사용 내역. ############

----------------------------------------------------------


select d.user_name||'.'||c.table_name as NAME,

a.name as tablespace_name ,

sum(a.a_EXTENT_PAGE_COUNT*a.page_size*b.EXTENT_TOTAL_COUNT)/1024/1024||' MB'  as allocSize,

sum(a.a_EXTENT_PAGE_COUNT*a.page_size*b.EXTENT_FULL_COUNT)/1024/1024||' MB'  as usage

from v$tablespaces a, v$segment b, system_.sys_tables_ c, system_.sys_users_ d 

where a.id = b.space_id 

and c.table_oid = b.table_oid 

and c.user_id=d.user_id 

group by a.name, name, d.user_name||'.'||c.table_name order by NAME asc;




------------------------------------------------

############ table space 파일 내역. ############

------------------------------------------------


select ID, NAME, MAXSIZE, CURRSIZE, AUTOEXTEND, STATE from v$datafiles;




------------------------------------------------

############ table space 사용 내역. ############

------------------------------------------------


select a.name, a.TOTAL_PAGE_COUNT*8/1024||' MB' as MAXSIZE,

sum(a.a_EXTENT_PAGE_COUNT*a.page_size*b.EXTENT_TOTAL_COUNT)/1024/1024||'MB'  as allocSize,

sum(a.a_EXTENT_PAGE_COUNT*a.page_size*b.EXTENT_FULL_COUNT)/1024/1024||'MB'  as usage 

from v$tablespaces a, v$segment b, system_.sys_tables_ c, system_.sys_users_ d 

where a.id = b.space_id and c.table_oid = b.table_oid and c.user_id=d.user_id group by a.name, a.TOTAL_PAGE_COUNT*8/1024;




------------------------------------------------

############ table space 파일 추가. ############

------------------------------------------------


alter tablespace tbs_data add datafile '/DATA/altibase/dbs/tbs_data_10.dbf' size 2G autoextend off;



autoextend off

 - 데이터들이 insert 될 때마다 , OS 에다가 파일에 대한 exetend 를

   요청하게 되면 , 그 extend 를 받아 오기 위한 i/o 및 부하가 발생을 해서

   성능이 지연되는 현상이 발생할 수 잇어요

   그래서 데이터 파일은 미리 2G 를 만들어 놓고 내부적으로 사용하는게 좋습니다. 


DB2 에도 추가.

 - 테이블 create , index create 등의 스키마(DDL) 작업은 이중화 안됩니다





--------------------------------------------------

############ 메모리 table space 확인. ############

--------------------------------------------------


select 

trunc(mem_max_db_size/1024, 2) as max_mem_kb,

trunc(mem_alloc_page_count*32, 2) as alloc_mem_kb,

trunc(mem_free_page_count*32, 2) as free_mem_kb 

from v$database;




4.3.9 는 메모리테이블 스페이스가 하나밖에 없음.

MEM_DB_MAX_SIZE : DB 내부 프로퍼티로 데이터 사용 제한 값.

메모리 테이블 스페이스가 부족하면 해당 프로퍼티를 수정하고 재구동.

 - /home1/altibase/altibase_home/conf/altibase.properties



반응형

+ Recent posts