# 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
'Database > Altibase' 카테고리의 다른 글
[altibase] 구동 및 사용자 비번 변경. (0) | 2014.03.24 |
---|---|
[altibase] 할당된 메모리 크기 확인 및 변경 (0) | 2014.03.24 |
[altibase] lock 걸린 쿼리 확인. (0) | 2014.03.24 |
altibase export (3) | 2014.03.24 |
Altibase 접속시 encoding 설정. (0) | 2011.10.21 |