U N I T 0 7 테이블스페이스 테이블스페이스는한개이상의컨테이너로이루어진논리적인오브젝트입니다. 데이터를테이블에저장하는 SQL문을실행하면, 실제적인데이터는연관된테이블스페이스의물리적인저장공간인컨테이너에라운드로빈방식으로균등하게저장됩니다. UNIT 06 버퍼풀 69
DB 9.7 운영자가이드 Administrator Edition 테이블스페이스기본테이블스페이스 SMS 테이블스페이스 DMS 테이블스페이스 LARGE 테이블스페이스 SYSTEM TEMPORARY 테이블스페이스 USER TEMPORARY 테이블스페이스디렉토리컨테이너파일컨테이너디바이스컨테이너페이지 (PAGE) 익스텐트 (EXTENT) 페이지클리너 (I/O Cleaners) I/O 프리페치 (I/O Prefetch) 테이블스페이스생성테이블스페이스특성변경테이블스페이스컨테이너변경 High Water Mark 조정테이블스페이스제거 SYSCAT.TABLESPACES 뷰 70 DB 운영자가이드
테이블스페이스 데이터베이스의데이터는물리적인저장공간인컨테이너에저장됩니다. 테이블스페이스는한개이상의컨테이너묶음에대한논리적인이름입니다. CREATE TABLESPACE 문, ALTER TABLESPACE 문, DROP TABLESAPCE 문으로관리합니다. 테이블스페이스에대한정보는 SYSCAT.TABLESPACES 에저장됩니다. 한데이터베이스에한개이상의테이블스페이스를생성하여사용합니다. 테이블스페이스는한개이상의컨테이너묶음에대한논리적인이름입니다. 컨테이너는디렉토리, 파일, 논리적파티션중의한가지입니다. Container 한테이블스페이스는여러개의컨테이너로구성됩니다. 한컨테이너는한개의테이블스페이스에만속합니다. 한테이블의데이터는기본적으로한개의테이블스페이스에저장됩니다. 지원되는페이지크기는 K, 8K, 6K, K 입니다. 기본값은 K 페이지입니다. Figure A 테이블스페이스와다양한컨테이너 데이터베이스를생성하면 개의기본테이블스페이스가자동으로생성됩니다. 테이블스페이스 설명 SYSCATSPACE 시스템카탈로그테이블을저장합니다. TEMPSPACE SQL문을처리하기위한임시데이터를저장합니다. USERSPACE 사용자테이블을저장합니다. DB 9.부터테이블스페이스생성시 Large 유형이기본입니다. LARGE 테이블스페이스는반드시 DMS 유형이어야합니다. 테이블스페이스는관리주체에따라 가지의방식으로구분됩니다. 방식 SMS DMS 테이블스페이스는용도에의해 가지의유형으로구분됩니다. 유형 설명 REGULAR 모든영구데이터를저장. SMS( 기본 ), DMS ( 지원 ) LARGE 모든영구데이터를저장. DMS( 기본 ), SMS( 지원안함 ) SYSTEM TEMPORARY USER TEMPORARY 설명 System Managed Space 의약자입니다. 필요시 OS 가컨테이너로지정된디렉토리에파일을할당하고 I/O 를관리합니다. Database Managed Space 의약자입니다. 미리정의된컨테이너를이용하여 DB 엔진이직접 I/O 를관리합니다. 엔진이 SQL 문을실행하기위해임시로사용하는영역 세션의전역임시테이블의데이터를임시로저장하는영역 7 DB 9.7 운영자가이드
0 기본테이블스페이스 데이터베이스를생성하면기본적으로 SYSCATSPACE, TEMPSPACE, USERSPACE 이라는세개의테이블스페이스가 SMS 유형으로생성됩니다. CREATE DB 문에서사용자가유형과컨테이너정보를지정할수도있습니다. < 인스턴스사용자 > 로로그인합니다. SYSCATSPACE 에는사용자의테이블을저장할수없으며, 사용자가제거할수없습니다. create database 문에서특별한옵션을지정하지않으면, 개의기본테이블스페이스는 SMS 유형으로기본디렉토리에생성됩니다. SYSCATSPACE 는시스템카탈로그테이블을저장하며, TEMPSPACE은 SQL문의처리시에정렬또는조인작업을위해엔진이사용하는임시공간입니다. USERSPACE은사용자의테이블이저장될수있는공간입니다. DB 9.7에서 list table space [show detail] 가 Deprecate 되어, 향후릴리스에서지원되지않을예정입니다. 9.7부터는 MON_GET_TABLESPACE, MON_GET_CONTAINER 의사용을권장합니다. 기본생성된 USERSPACE, TEMPSPACE의기능에대응하는테이블스페이스를사용자가생성한후에는제거할수도있습니다. $ db create db < 데이터베이스명 > $ db connect to < 데이터베이스명 > $ db list tablespaces 또는 db select * from table(mon_get_tablespace(,-)) as t $ db list tablespace containers for 0 또는 db select * from table(mon_get_container(,-)) as t create database 문에서 개의기본테이블스페이스의유형및컨테이너에대한정보를사용자가지정할수있습니다. $ vi < 임의의파일명 > create db < 데이터베이스명 > CATALOG TABLESPACE < 테이블스페이스옵션 > USER TABLESPACE < 테이블스페이스옵션 > TEMP TABLESPACE < 테이블스페이스옵션 >; $ db svtf < 임의의파일명 > CREATE DATABASE sample CATALOG TABLESPACE MANAGED BY SYSTEM USING ( '/SMS/catspace' ) USER TABLESPACE MANAGED BY DATABASE USING ( FILE '/DMS/usertbs 000, FILE '/DMS/usertbsp 000 ) TEMP TABLESPACE MANAGED BY SYSTEM USING ( '/SMS/systemp' ) SYSCATSPACE 의컨테이너를변경합니다. USERSPACE 의컨테이너를변경합니다. TEMPSPACE 의컨테이너를변경합니다. Figure 0A 기본테이블스페이스변경 UNIT 테이블스페이스 7
0 SMS 테이블스페이스 사용자는한개이상의디렉토리를컨테이너로지정하면 OS 가지정된디렉토리에파일을생성하여필요시에자동으로공간을할당하거나축소하면서관리하는방식입니다. 시스템임시테이블스페이스또는사용자임시테이블스페이스에주로사용됩니다. < 인스턴스사용자 > 로로그인합니다. 테이블스페이스를생성하려면데이터베이스에대한접속이필요합니다. $ db connect to < 데이터베이스명 > SMS 방식은컨테이너의크기를지정하지않습니다. 지정한디렉토리가속한파일시스템의가용공간이없을때까지증가할수있습니다. create tablespace 문에서 MANAGED BY SYSTEM 옵션을이용하여 SMS 방식의 테이블스페이스를생성합니다. USING 옵션으로한개이상의디렉토리명을나열합니다. $ db create tablespace < 테이블스페이스명 > managed by system using ( < 디렉토리명 >') $ db create tablespace < 테이블스페이스명 > managed by system using ( < 디렉토리명 >, < 디렉토리명 >') 컨테이너로사용되는디렉토리에생성되는파일의이름은 DB 엔진에의해결정되며, OS에의해필요시에결정됩니다. ls 명령어를이용하여컨테이너로사용되는디렉토리를확인할수있습니다. 컨테이너로사용되 는디렉토리또는 OS 가관리하는파일이손상되면데이터베이스가손상됩니다. $ ls lia < 디렉토리명 > 5 시스템임시테이블스페이스와사용자임시테이블스페이스에저장되는데이터는한시적이므로 가능한 SMS 방식으로생성하도록합니다. Figure 0A SMS 방식테이블스페이스 7 DB 9.7 운영자가이드
0 DMS 테이블스페이스 미리정의한한개이상의컨테이너에데이터베이스관리시스템이직접 I/O 를관리하는방식입니다. 테이블스페이스생성시에파일또는디바이스유형의컨테이너의이름과크기가결정되며, 향후에컨테이너에대한변경작업이가능합니다. < 인스턴스사용자 > 로로그인합니다. 테이블스페이스를생성하려면데이터베이스에대한접속이필요합니다. $ db connect to < 데이터베이스명 > CIO 또는 DIO를지원하는 OS환경에서 NO FILE SYSTEM CACHING 기능을사용하면, 파일컨테이너를사용하는 DMS 방식의테이블스페이스도디바이스컨테이너와동일한성능을냅니다. DB 9.5 이후직접입출력을지원하는 NO FILE SYSTEM CACHING 기능이기본설정입니다. DB 9.7부터기본파일시스템이 GPFS인경우에도 NO FILE SYSTEM CACHING이기본설정입니다. create tablespace 문에서 MANAGED BY DATABASE 옵션을이용하여 DMS 방식의테이블스페이스를생성합니다. $ db create tablespace < 테이블스페이스명 > managed by database using (file < 파일명 >' < 크기 >) $ db create tablespace < 테이블스페이스명 > managed by database using (device < 디바이스파일명 >' < 크기 >) ls 명령어로컨테이너로사용되는파일과논리적볼륨에대응되는디바이스파일을확인할수있습니다. 파일또는논리적볼륨이손상되면데이터베이스가손상됩니다. $ ls lia < 파일명 > $ ls lia < 디바이스파일명 > $ lslv l < 논리적파티션명 > DMS 유형의테이블스페이스는생성후에도컨테이너구성을변경할수있습니다. Figure 0A DMS 방식테이블스페이스 UNIT 테이블스페이스 7
05 LARGE 테이블스페이스 한테이블의데이터를테이블, 인덱스, LONG 데이터로분리해서저장할때 LONG 데이터는 DMS 유형의 LARGE 테이블스페이스에저장합니다. 기본적으로는 LARGE 테이블스페이스에테이블, 인덱스데이터와함께저장됩니다. DB 9. 이후 Regular 기본값이사라지고유형을지정하지않을경우 managed by 절에서테이블스페이스유형을지정합니다. Large 옵션이기본값입니다. < 인스턴스사용자 > 로로그인하여데이터베이스에접속합니다. $ db connect to < 데이터베이스명 > DMS 방식의 LARGE 유형으로 개의테이블스페이스를생성하면, 한테이블의테이블데이터와인덱스데이터를따로저장할수있습니다. create tablespace 문에서 DMS 방식의 LARGE 유형으로테이블스페이스를생성합니 다. $ db create tablespace < 테이블스페이스명 > managed by database using (file < 파일명 > < 크기 >) $ db create tablespace < 테이블스페이스명 > managed by database using (device < 디바이스파일명 >' < 크기 >) 테이블을생성하는 create table 문에서 IN < 테이블스페이스명 > INDEX IN < 테이블스페이스명 > 옵션으로사용됩니다. SYSCAT.TABLESPACES 의 DATATYPE 컬럼의값은 L 로표시됩니다. $ db "select substr(tbspace,,0) tbspace, datatype, tbspaceid, tbspacetype from syscat.tablespaces" 테이블을생성하는 create table 문에서 LONG IN <LARGE 테이블스페이스명 > 옵션으로사용됩니다. create tablespace ts managed by database using (file '/DB/TS/cont.dat' 000, file '/DB/TS/cont0.dat' 000, file '/DMS/TS/cont0.dat' 000 ); create tablespace ts managed by database using (device '/dev/rcont_ts' 000); Figure 05A LARGE 유형의테이블스페이스 75 DB 9.7 운영자가이드
06 SYSTEM TEMPORARY 테이블스페이스 요청된 SQL 문을처리하기위해 DB 엔진이임시로생성하는파일또는테이블을저장하는테이블스페이스를시스템임시테이블스페이스라고합니다. 기본적으로 TEMPSPACE 이생성되며, 추가적으로생성할수있습니다. K 이외의페이지크기를가진테이블스페이스가존재하면해당페이지와동일한크기를가진시스템임시테이블스페이스가필요합니다. < 인스턴스사용자 > 로로그인하여데이터베이스에접속합니다. $ db connect to < 데이터베이스명 > create tablespace 문에서 SYSTEM TEMPORARY 옵션을이용하여 SMS 방식의 SYSTEM TEMPORARY 유형으로테이블스페이스를생성합니다. $ db create system temporary tablespace < 테이블스페이스명 > managed by system using ( < 디렉토리명 > ) DMS 방식도지원되지만, SMS 방식을사용하는것이일반적입니다. 그러나 Large 파일이자주생성된다면, DMS를고려하십시오. create tablespace 문에서 SYSTEM TEMPORARY 옵션을이용하여 DMS 방식의 SYSTEM TEMPORARY 유형으로테이블스페이스를생성합니다. $ db create system temporary tablespace < 테이블스페이스명 > managed by database using (file < 파일명 > < 크기 >) $ db create system temporary tablespace < 테이블스페이스명 > managed by database using (device < 디바이스파일명 >' < 크기 >) SYSCAT.TABLESPACES 의 DATATYPE 컬럼의값은 T 로표시됩니다. $ db "select substr(tbspace,,0) tbspace, datatype, tbspaceid, tbspacetype from syscat.tablespaces" create SYSTEM TEMPORARY tablespace systemptbs managed by database using (file '/DB/tmp0.dat' 000); create SYSTEM TEMPORARY tablespace systemptbs managed by system using ( /DB/tmp'); Figure 06A 시스템임시테이블스페이스생성 UNIT 테이블스페이스 76
USER TEMPORARY 테이블스페이스 세션별로임시테이블을정의하여일반테이블과동일하게데이터를처리할수있습니다. 임시테이블은세션별로독립적이며, 세션이실행되는동안에만사용자임시테이블스페이스에저장됩니다. 기본적으로제공되는사용자임시테이블스페이스는없습니다. 임시테이블을사용하려면반드시사용자임시테이블스페이스를미리생성해야합니다. < 인스턴스사용자 > 로로그인하여데이터베이스에접속합니다. $ db connect to < 데이터베이스명 > create tablespace 문에서 USER TEMPORARY 옵션을이용하여 SMS 방식의 USER TEMPORARY 유형으로테이블스페이스를생성합니다. $ db create user temporary tablespace < 테이블스페이스명 > managed by system using ( < 디렉토리명 > ) DMS 방식도지원되지만, SMS 방식을사용하는것이일반적입니다. 그러나 Large 파일이자주생성된다면, DMS를고려하십시오. create tablespace 문에서 USER TEMPORARY 옵션을이용하여 DMS 방식의 USER TEMPORARY 유형으로테이블스페이스를생성합니다. $ db create user temporary tablespace < 테이블스페이스명 > managed by database using (file < 파일명 > < 크기 >) $ db create user temporary tablespace < 테이블스페이스명 > managed by database using (device < 디바이스파일명 >' < 크기 >) SYSCAT.TABLESPACES 의 DATATYPE 컬럼의값은 U 로표시됩니다. $ db "select substr(tbspace,,0) tbspace, datatype, tbspaceid, tbspacetype from syscat.tablespaces" create USER TEMPORARY tablespace usrtemptbs managed by database using (file '/DB/tmp0.dat' 000); create USER TEMPORARY tablespace usrtemptbs managed by system using ('/DB/tmp0'); Figure A 사용자임시테이블스페이스생성 77 DB 9.7 운영자가이드
08 디렉토리컨테이너 SMS 방식의테이블스페이스는디렉토리유형의컨테이너만지원합니다. CREATE TABLESPACE 문의 USING 옵션에서컨테이너로사용할디렉토리명을지정합니다. 컨테이너로지정된디렉토리는자동으로생성됩니다. < 인스턴스사용자 > 로로그인하여데이터베이스에접속합니다. $ db connect to < 데이터베이스명 > create tablespace 문의 USING 옵션에서디렉토리명을지정합니다. < 디렉토리명 > 은 < 절대경로명 > 또는 < 상대경로명 > 으로지정할수있습니다. 지정한디렉토리를생성할수없으면, SQL0970N 오류가반환됩니다. 컨테이너로지정한디렉토리에파일이존재하는경우에는 SQL098N 이반환됩니다. 파일시스템생성시기본생성되는 (lost+found) 도삭제해야합니다. DB 9.7에서 list tablespaces[show detail] 이 Deprecate되었습니다. 디렉토리유형의컨테이너는 OS에의해필요할때공간이할당되므로, < 사용가능한페이지수 > 는대부분 < 전체페이지수 > 와일치합니다. $ db create tablespace < 테이블스페이스명 > managed by system using ( < 디렉토리명 >') $ db create tablespace < 테이블스페이스명 > managed by system using ( < 디렉토리명 >, < 디렉토리명 >') 컨테이너로지정된디렉토리는자동으로생성됩니다. $ ls lia < 디렉토리명 > 테이블스페이스와컨테이너의연관정보는데이터베이스내부의제어파일에저장됩니다. list tablespaces 명령어를이용하여 < 테이블스페이스 ID> 를확인하고, list tablespace containers 명령어로 < 컨테이너유형 > 항목이 경로 인것을확인합니다. $ db list tablespaces show detail 또는 db select * from table(mon_get_tablespace(,-)) as t $ db list tablespace containers for < 테이블스페이스 ID> show detail 또는 db select * from table(mon_get_container(,-)) as t UNIX : create system temporary tablespace temptbs managed by database using (file '/DB/tmp/cont 000, file '/DB/tmp0 /cont 000); Intel : create system temporary tablespace temptbs managed by database using (file 'C:\DB\tmp\cont 000, file C:\DB\tmp0\cont 000); Figure 08A 디렉토리컨테이너를가지는 SMS 테이블스페이스 UNIT 테이블스페이스 78
09 파일컨테이너 DMS 방식의테이블스페이스는파일유형의컨테이너를지원합니다. CREATE TABLESPACE 문의 USING 옵션에서컨테이너의유형을 file 로지정하고, 컨테이너로사용될파일명과크기를지정합니다. 컨테이너로지정된파일은자동으로생성됩니다. < 인스턴스사용자 > 로로그인하여데이터베이스에접속합니다. $ db connect to < 데이터베이스명 > 컨테이너로사용되는파일들의크기는동일한것이좋습니다. 지정한파일을생성할수없으면, SQL0970N 오류가반환됩니다. 컨테이너의크기는적어도 < * 익스텐트의크기 > 페이지이상이어야합니다. 파일의크기가유효하지않으면 SQLN 가반환됩니다. < 전체페이지수 > 이상의공간은사용될수없으므로, < 사용가능한페이지수 > 가 0 이되면, SQL089N이반환됩니다. DB 9.7에서 list tablespaces[show detail] 이 Deprecate되었습니다. create tablespace 문의 USING 옵션에서컨테이너의유형을 file 이라고지정하고, 컨 테이너로사용될파일명과크기를지정합니다. < 파일명 > 은 < 절대경로명 > 또는 < 상대경로 명 > 을이용하여지정할수있습니다. < 크기 > 는테이블스페이스의페이지단위로지정합니다. K, M, G 단위를이용한지정도가능합니다. $ db create tablespace < 테이블스페이스명 > managed by database using (file < 파일명 > < 크기 >, file < 파일명 > < 크기 >) 컨테이너로지정된파일이자동으로생성됩니다. $ ls lia < 파일명 > 테이블스페이스와컨테이너의연관정보는데이터베이스내부의제어파일에저장됩니다. list tablespaces 명령어를이용하여 < 테이블스페이스 ID> 를확인하고, list tablespace containers 명령어로 < 컨테이너유형 > 항목이 파일 인것을확인합니다. $ db list tablespaces show detail 또는 db select * from table(mon_get_tablespace(,-)) as t $ db list tablespace containers for < 테이블스페이스 ID> show detail 또는 db select * from table(mon_get_container(,-)) as t UNIX : create tablespace indextbs managed by database using (file '/DB/INDEX/cont0.dat' 0); Intel : create tablespace indextbs managed by database using (file 'C:\DB\INDEX\cont0.dat' 0); Figure 09A 파일컨테이너를가지는 DMS 테이블스페이스 79 DB 9.7 운영자가이드
0 디바이스컨테이너 DMS 방식의테이블스페이스는디바이스유형의컨테이너를지원합니다. CREATE TABLESPACE 문의 USING 옵션에서컨테이너의유형을 device 로지정하고, 미리생성된디바이스파일명과크기를지정합니다. root 사용자가컨테이너로사용될논리적볼륨을정의합니다. 논리적볼륨에대한디바이스파일 의소유자를인스턴스사용자로변경합니다. 논리적파일명이 X 인경우에디바이스파일명은 /dev/rx 입니다. 지정한디바이스파일의소유자가유효하지않으면, SQL0970N 오류가반환됩니다. 지정한디바이스파일이존재하지않으면 SQL098N 오류가반환됩니다. 파일의크기는논리적볼륨의크기이하입니다. 파일의크기가유효하지않으면 SQLN 가반환됩니다. < 전체페이지수 > 이상의공간은사용될수없으므로, < 사용가능한페이지수 > 가 0 이되면, SQL089N이반환됩니다. DB 9.7에서 list tablespaces[show detail] 이 Deprecate되었습니다. $ login root $ mklv -y'< 논리적파티션명 >' < 볼륨그룹명 > < 논리파티션개수 > $ chown < 인스턴스의사용자명 >.< 인스턴스의그룹명 > < 디바이스파일명 > $ ls lia < 디바이스파일명 > < 인스턴스사용자 > 로로그인하고, 데이터베이스에접속합니다. $ login <DB 사용자 > $ db connect to < 데이터베이스명 > create tablespace 문의 USING 옵션에서컨테이너의유형을 device 라고지정하고, 컨테이너로사용될디바이스파일명과크기를지정합니다. < 크기 > 는테이블스페이스의페이지 단위로지정합니다. K, M, G 단위를이용한지정도가능합니다. $ db create tablespace < 테이블스페이스명 > managed by database using (device < 디바이스파일명 > < 크기 >)" 테이블스페이스와컨테이너의연관정보는데이터베이스내부의제어파일에저장됩니다. list tablespaces 명령어를이용하여 < 테이블스페이스 ID> 를확인하고, list tablespace containers 명령어로 < 컨테이너유형 > 항목이 디스크 인것을확인합니다. $ db list tablespaces show detail 또는 db select * from table(mon_get_tablespace(,-)) as t $ db list tablespace containers for < 테이블스페이스 ID> show detail 또는 db select * from table(mon_get_container(,-)) as t UNIX : NT : create tablespace kestbs managed by database using (device '/dev/rcont0' 0); create tablespace kestbs managed by database using (device '\\.\PhysicalDrive' 0); Figure 0A 디바이스를컨테이너로가진 DMS 테이블스페이스 UNIT 테이블스페이스 80
페이지 컨테이너에서데이터의입출력이발생되는기본단위는페이지이며, 지원되는페이지의크기는 K, 8K, 6K, K 바이트입니다. 페이지의크기는 CREATE TABLESPACE 문의 PAGESIZE 옵션으로지정되며향후변경될수없습니다.. < 인스턴스사용자 > 로로그인하여데이터베이스에접속합니다. 테이블스페이스의페이지크기와동일한페이지크기를가지는버퍼풀을사용해야합니다. 테이블스페이스가생성되면페이지의크기는변경할수없습니다. 테이블의레코드길이가테이블공간의페이지크기를초과시에는생성할수없습니다. 5 $ db connect to < 데이터베이스명 > create tablespace 문의 PAGESIZE 옵션으로페이지의크기를지정합니다. < 크기 > 는 바이트또는 K 단위를이용하여지정합니다. $ db create tablespace < 테이블스페이스명 > PAGESIZE < 크기 > managed by system using ( < 디렉토리명 > ) dblook 유틸리티를이용하여테이블스페이스에대한 DDL 을확인하면, PAGESIZE 옵션에 서페이지크기를바이트단위로확인할수있습니다. $ dblook d < 데이터베이스명 > -l grep p i < 테이블스페이스명 > 시스템카탈로그를조회하여 PAGESIZE 항목을확인합니다. $ db "select substr(tbspace,,0) tbspace, tbspaceid, pagesize from syscat.tablespaces" list tablespaces 명령어로테이블스페이스의정보를확인합니다. < 페이지크기 > 항목에서 페이지의크기를바이트단위로확인할수있습니다. $ db list tablespaces show detail 또는 db select * from table(mon_get_tablespace(,-)) as t $ db list tablespace containers for < 테이블스페이스 ID> show detail 또는 db select * from table(mon_get_container(,-)) as t 익스텐트 = N 페이지 Extent 0 Extent Page 0 Page Page Page Figure A 페이지와익스텐트 6 http://publib.boulder.ibm.com/infocenter/dbluw/v9r7/topic/com.ibm.db.luw.admin.dbobj.doc/doc/c0058.html 에서페이지의크기별제약사항을확인합니다. 8 DB 9.7 운영자가이드
익스텐트 컨테이너에데이터를저장할때할당되는기본단위를익스텐트라고합니다. 한개의테이블스페이스는여러개의컨테이너로구성되므로, 데이터의고른분배를위해각컨테이너에익스텐트크기만큼씩라운드로빈방식으로저장합니다. 한익스텐트는 개이상의페이지로구성됩니다. < 인스턴스사용자 > 로로그인하여데이터베이스에접속합니다. $ db connect to < 데이터베이스명 > 익스텐트의크기를명시적으로지정하지않으면, DFT_EXTENT_SZ 구성변수에정의된값이사용됩니다. 테이블스페이스가생성되면익스텐트크기는변경할수없습니다. 디스크의 RAID stripe set 의크기와일치시키는것이성능에유리합니다. 5 create tablespace 문의 EXTENTSIZE 옵션으로페이지의크기를지정합니다. < 크기 > 는테이블스페이스의페이지단위로지정합니다. K, M, G 단위를이용한지정도가능합니다. $ db create tablespace < 테이블스페이스명 > managed by system using ( < 디렉토리명 > ) EXTENTSIZE < 크기 > dblook 유틸리티를이용하여테이블스페이스에대한 DDL 을확인하면, EXTENTSIZE 옵션 에서익스텐트의크기를페이지단위로확인할수있습니다. $ dblook d < 데이터베이스명 > -l grep p i < 테이블스페이스명 > 시스템카탈로그를조회하여 EXTENTSIZE 항목을확인합니다. $ db "select substr(tbspace,,0) tbspace, tbspaceid, pagesize, extentsize from syscat.tablespaces" list tablespaces 명령어로테이블스페이스의정보를확인합니다. <Extent 크기 > 항목에서 익스텐트의크기를페이지단위로확인할수있습니다. $ db list tablespace containers for < 테이블스페이스 ID> show detail 또는 db select * from table(mon_get_container(,-)) as t Figure A 익스텐트와라운드로빈방식 UNIT 테이블스페이스 8
페이지클리너 액세스요청시에버퍼풀에가용공간이없으면, 변경된데이터를컨테이너로반영하여가용공간을확보하므로성능이저하됩니다. 페이지클리너프로세스는비동기방식으로버퍼풀의변경된페이지를디스크로미리반영하여버퍼풀에가용공간을확보합니다. 'I/O 클리너 ' 라고도합니다. < 인스턴스사용자 > 로로그인하여데이터베이스구성변수인 NUM_IOCLEANERS 를이용하 여페이지클리너용프로세스의개수를숫자로지정합니다. Automatic으로지정하면 DB가자동으로페이지클리너수를정합니다. NUM_IOCLEANERS 의값은데이터베이스가사용하는물리적인디바이스의개수이하의값으로설정합니다. $ db update db cfg for < 데이터베이스 > using NUM_IOCLEANERS< 값 > 데이터베이스를재활성화합니다. $ db deactivate db < 데이터베이스명 > $ db activate db < 데이터베이스명 > dbpd 명령어를이용하여페이지클리너를담당하는프로세스인 dbpclnr 를확인합니다. $ dbpd -d sample -edu grep -i dbpclnr 페이지클리너용프로세스는데이터베이스구성변수인 CHNGPGS_THRESH 와 SOFTMAX 값에의해비동기적으로활동시점이결정됩니다. $ db get db cfg for < 데이터베이스명 > grep CHNGPGS_THRESH $ db get db cfg for < 데이터베이스명 > grep SOFTMAX SOFTMAX 구성변수는 Crash 복구에필요한로그파일의개수에영향을주며, 기본값은로그파일한개의크기인 00% 로설정됩니다. CHNGPGS_THRESH 구성변수는버퍼풀이허용하는변경페이지 (dirty page) 의최대비율입니다. 기본값은 60% 입니다. DB_USE_ALTERNATE_PAGE _CLEANING 레지스트리변수사용시 CHNGPGS_THRESH값은무시되고데이터베이스관리프로그램이버퍼풀에서유지되는더티페이지수를자동으로판별합니다. Figure A 페이지클리너 8 DB 운영자가이드
페이지프리페처 페이지프리페치프로세스는비동기방식으로컨테이너에서여러페이지씩미리버퍼풀로로드합니다. CREATE TABLESPACE 문의 PREFETCHSZ 옵션에서익스텐트크기의배수로설정하며, ALTER TABLESPACE 문으로변경할수있습니다. 'I/O 프리페처 ' 라고도합니다. < 인스턴스사용자 > 로로그인하여데이터베이스구성변수인 NUM_IOSERVERS 를이용하여 페이지프리페처용프로세스의개수를숫자로지정하고, 데이터베이스를재활성화합니다 Automatic으로지정하면 DB가자동으로페이지프리페처수를정합니다. $ db update db cfg for < 데이터베이스 > using NUM_IOSERVERS < 값 > $ db deactivate db < 데이터베이스명 > $ db activate db < 데이터베이스명 > ps 명령어를이용하여 I/O 프리페치를담당하는프로세스인 dbpfchr 를확인합니다. $ dbpd -d sample -edu grep -i dbpfchr 테이블스페이스의프리페치의크기는 create tablespace 문또는 alter tablespace 문의 PREFETCHSZ 옵션으로설정합니다. 익스텐트크기의배수로설정하는것이좋습니다. $ db create tablespace < 테이블스페이스명 > managed by system using ( < 디렉토리명 > ) PREFETCHSZ < 크기 > $ db alter tablespace < 테이블스페이스명 > PREFETCHSZ < 크기 > SEQDETECT 데이터베이스구성변수는기본적으로 YES로설정되어있습니다. NO로설정하면프리페치를실행하지않습니다. 프리페치의유형은다음과같이구분됩니다. 유형 Index prefetch Sequential prefetch List prefetch K Synchronous Read 이용시기 인덱스스캔, RUNSTATS, REORG 실행 테이블스캔 클러스터링되지않은테이블스캔 Buffer Pool Database Engine Prefetch Read I/O Server Data access is faster I/O Server Prefetch Read DFT_PREFETCH_SZ NUM_IOSERVERS SEQDETECT Figure A 페이지프리페처 UNIT 테이블스페이스 8
5 테이블스페이스생성 CREATE TABLESPACE 문을이용하여테이블스페이스를생성합니다. 테이블스페이스의관리방식, 용도, 컨테이너옵션, 페이지크기, 익스텐트크기, 프리페치크기, 버퍼풀명등을지정하는옵션이있습니다. create tablespace 문의형식은다음과같습니다. Figure 5A create tablespace 문 PAGESIZE의기본단위는바이트입니다. K 단위로표현할수있습니다. EXTENTSIZE, PREFETCHSZ 의기본단위는페이지입니다. K, M 단위로표현할수있습니다. 액세스요청이빈번하고데이터가많은테이블스페이스는전용버퍼풀을지정하는것이좋습니다. create tablespace 문에서사용되는주요옵션은다음과같습니다. 옵션 < 유형 > 테이블스페이스에저장될데이터의유형을지정합니다. REGULAR, LARGE, SYSTEM TEMPORARY, USER TEMPORARY 중에한가지를선택합니다. 생략하면 LARGE 가사용됩니다. 설명 < 테이블스페이스명 > 8 자이내의임의의이름으로생성합니다. 한데이터베이스내에서는고유해야합니다. PAGESIZE < 크기 > 한페이지의크기를바이트단위로지정합니다. K, 8K, 6K, K 중에선택할수있습니다. 컨테이너의기본 I/O 단위로사용됩니다. MANAGED BY < 관리방식 > 테이블스페이스의컨테이너에 I/O 를관리하는방식을지정합니다. SMS 또는 DMS 방식증에한가지를지정합니다. USING (< 컨테이너옵션 >) 관리방식에따라디렉토리, 파일, 논리적파티션유형중에한가지를지정합니다. 컨테이너가여러개인경우에는,( 쉼표 ) 를이용하여반복적으로지정합니다. 파일과논리적파티션유형인경우에는 PAGESIZE 옵션으로지정한페이지단위로크기를지정합니다. EXTENTSIZE < 크기 > 컨테이너에데이터를저장할때할당되는기본단위입니다. PAGESIZE 옵션으로지정한페이지단위로지정합니다. PREFETCHSIZE < 크기 > 프리페치의크기를 PAGESIZE 에서지정한페이지단위로지정합니다. EXTENTSIZE 옵션에서지정한값의배수로설정하도록합니다. 기본값으로데이터베이스구성변수인 DFT_PREFETCH_SZ 가사용됩니다. BUFFERPOOL < 버퍼풀명 > 사용할버퍼풀명을지정합니다. PAGESIZE 옵션에서지정한크기와동일한페이지크기를가진버퍼풀을지정할수있습니다. 다른테이블스페이스가사용하는버퍼풀도지정할수있습니다. 85 DB 9.7 운영자가이드
6 테이블스페이스특성변경 ALTER TABLESPACE 문을이용하여기존의모든테이블스페이스의프리페치크기와버퍼풀명을변경할수있습니다. 페이지크기와익스텐트크기는변경할수없습니다. alter tablespace 문의형식은다음과같습니다. Figure 6A 테이블스페이스의특성을변경하는 alter tablespace 문 alter tablespace 문에서사용되는주요옵션은다음과같습니다. 옵션 이용시기 PREFETCHSIZE 프리페치의크기를변경합니다. BUFFERPOOL 사용할버퍼풀명을변경합니다. NO FILE SYSTEM CACHING 이중버퍼링을하지않도록변경합니다. alter tablespace 문에서 PREFETCHSIZE 옵션으로테이블스페이스의프리페치크기를 변경합니다. $ db alter tablespace < 테이블스페이스명 > PREFETCHSIZE < 크기 > alter tablespace 문에서 PREFETCHSIZE 옵션으로 AUTOMATIC을지정하면테이블스페이스의컨테이너수가변경될때마다 DB 엔진이프리페치크기를자동으로갱신합니다. 갱신된프리페치크기는데이터베이스가재활성화될때적용됩니다. PREFETCHSIZE 절에숫자값을지정하면자동갱신모드는해제됩니다. $ db alter tablespace < 테이블스페이스명 > PREFETCHSIZE AUTOMATIC" 5 alter tablespace 문에서 BUFFERPOOL 옵션으로테이블스페이스가사용하는버퍼풀명 을변경합니다. $ db alter tablespace < 테이블스페이스명 > BUFFERPOOL < 버퍼풀명 > UNIT 테이블스페이스 86
7 테이블스페이스컨테이너변경 ALTER TABLESPACE 문에서 ADD, DROP, EXTEND, REDUCE, RESIZE 등의옵션으로 DMS 테이블스페이스의컨테이너에대한변경작업이가능합니다. SMS 유형의테이블스페이스는컨테이너를변경할수없습니다. alter tablespace 문을이용하여 DMS 유형의테이블스페이스의특성을변경합니다. 컨테이너를 DROP 할때는다른컨테이너에기존데이터를수용할충분한공간이있어야합니다. ADD DROP EXTEND REDUCE RESIZE Figure 7A 컨테이너의특성을변경하는 alter tablespace 문 개별적인컨테이너를명시하거나, ALL 키워드를이용하여모든컨테이너를지정합니다. 옵션설명 ADD 새로운컨테이너를추가합니다. DROP 기존컨테이너를제거합니다. EXTEND 기존컨테이너의크기를증가시킵니다. REDUCE 기존컨테이너의크기를감소시킵니다. RESIZE 기존컨테이너의크기를변경합니다. AUTORESIZE 테이블스페이스가가득차면자동증가합니다. alter tablespace 문의 ADD, DROP, EXTEND, REDUCE, RESIZE 옵션으로 DMS 테이블스페이스의컨테이너를변경합니다. $ db alter tablespace < 테이블스페이스명 > ADD < 컨테이너정의 >" $ db alter tablespace < 테이블스페이스명 > EXTEND < 컨테이너정의 >" $ db alter tablespace < 테이블스페이스명 > REDUCE < 컨테이너정의 >" $ db alter tablespace < 테이블스페이스명 > RESIZE < 컨테이너정의 >" $ db alter tablespace < 테이블스페이스명 > DROP < 컨테이너정의 > $ db alter tablespace < 테이블스페이스명 > AUTORESIZE YES create tablespace ts managed by database using (file '/DB/ts/cont.dat' 000) alter tablespace ts add (file '/DB/ts/cont.dat' 5000) alter tablespace ts extend (file '/DB/ts/cont.dat' 000) alter tablespace ts reduce (file '/DB/ts/cont.dat' 000) alter tablespace ts resize (all 6000) alter tablespace ts drop (file /DB/ts/cont.dat') alter tablespace ts autoresize yes Figure 7B 컨테이너의추가, 제거, 변경 87 DB 9.7 운영자가이드
8 High Water Mark 조정 HWM( 하이워터마크 ) 로인해빈공간이많지만테이블스페이스사이즈를줄일수없을경우하이워터마크를내리고사이즈를변경할수있습니다. Automatic Storage 와파일로구성되는 DMS 테이블공간에해당됩니다. Automatic storage table space 인경우 HWM 사이즈및 tablespace 사이즈를 줄일수있습니다. 일반 DMS 는 lower high water mark 수행후 reduce를따로진행합니다. ALTER TABLESPACE <tsname> REDUCE --+-----------------------------+--- '-- <size> --+-------------+--+--' +----- K -----+ +----- M -----+ +----- G -----+ '-- PERCENT --' '--- MAX ---------------------' '--- STOP --------------------' DMS table space 인경우다음명령어로 HWM 을줄일수있습니다. ALTER TABLESPACE <tsname> LOWER HIGH WATER MARK --+----------+--- '-- STOP --' db "select varchar(tbsp_name, 5) as tbsp_name, tbsp_free_pages,tbsp_total_pages, tbsp_page_top from table (mon_get_tablespace('ts',-)) as t TBSP_NAME TBSP_FREE_PAGES TBSP_TOTAL_PAGES TBSP_PAGE_TOP --------------- -------------------- -------------------- -------------------- TS 6080 9 8790 record(s) selected db "alter tablespace ts reduce max" DB0000I The SQL command completed successfully. Figure 8A 빈공간과하이워터마크확인후 reduce 진행 테이블오브젝트삭제후 HWM 조정도식을설명합니다. Figure 8B 하이워터마크조정 UNIT 테이블스페이스 88
9 테이블스페이스제거 DROP TABLESPACE 문을이용하여테이블스페이스를제거합니다. 테이블스페이스를위한컨테이너도모두제거되며, 테이블스페이스에저장된테이블과그데이터도모두제거됩니다. drop tablespace 문의형식은다음과같습니다. Figure 9A drop tablespace 문 제거된테이블스페이스의 ID는다른테이블스페이스를생성하면다시사용됩니다. drop tablespace 문으로특정한테이블스페이스를제거합니다. $ db drop tablespace < 테이블스페이스명 > 한테이블이여러테이블스페이스에분리되어정의된경우에는관련된테이블스페이스를한개의 drop tablespace 문으로함께제거합니다. 일부테이블스페이스만제거하려고하면 SQL08N 오류가반환됩니다. $ dblook d < 데이터베이스명 > -e t < 테이블명 > $ db drop tablespace < 테이블스페이스명 >, < 테이블스페이스명 > SMS 테이블스페이스를제거하면, 디렉토리에생성된데이터파일은제거됩니다. 디렉토리와제어파일은제거되지않으므로 rm 명령어로제거합니다. $ ls lia < 디렉토리명 > $ rm -Rf < 디렉토리명 > 5 DMS 테이블스페이스를제거하면, 컨테이너로사용된파일은제거됩니다. $ ls -lia < 파일명 > 6 DMS 테이블스페이스를제거하면컨테이너로사용된논리적파티션은다른테이블스페이스의컨테이너로사용될수있습니다. 사용자가생성한논리적파티션은자동으로제거되지않으므로필요시에는 rmlv 명령어로제거합니다. $ ls -lia < 디바이스파일명 > $ rmlv f '< 논리적파티션명 >' 데이터베이스를제거하면모든테이블스페이스는제거됩니다. 제거되지않은컨테이너는 dbuntag 명령어로태그정보를제거합니다. 7 테이블스페이스를제거하면컨테이너에저장된태그정보도자동으로제거되므로, 해당컨테이너는다른테이블스페이스에서사용될수있습니다. 비정상적인방법으로테이블스페이스를제거하면엔진이생성한태그정보가남게되므로 dbuntag 명령어를이용하여강제로태그정보를제거하여다른테이블스페이스가사용할수있도록합니다. $ dbuntag f < 파일명 > $ dbuntag f < 디바이스파일명 > 89 DB 9.7 운영자가이드
0 SYSCAT.TABLESPACES 뷰 CREATE TABLESPACE 문, ALTER TABLESPACE 문, DROP TABLESPACE 문으로관리하는테이블스페이스에대한정보는시스템카탈로그뷰인 SYSCAT.TABLESPACES 를통해확인할수있습니다. describe table 명령어로 SYSCAT.TABLESPACES 뷰의컬럼에대한정보를확인합니다. $ db conect to < 데이터베이스명 > $ db describe table SYSCAT.TABLESPACES SYSCAT.TABLESPACES 뷰의주요컬럼에대한설명은다음과같습니다. 컬럼 설명 TBSPACE 테이블스페이스의이름으로한데이터베이스에서고유합니다. TBSPACEID 관리를위해자동으로할당되는테이블스페이스의 ID 입니다. TBSPACETYPE DATATYPE 테이블스페이스의관리방식을표시합니다. 'S' 는 SMS, 'D' 는 DMS 를의미합니다. 테이블스페이스에저장된데이터의유형또는용도를표시합니다. 'A' 는 REGULAR, 'L' 은 LARGE, 'T' 는 SYSTEM TEMPORARY, 'U' 는 USER TEMPORARY 를나타냅니다. EXTENTSIZE 익스텐트의크기를페이지단위로표시합니다. PREFETCHSIZE 프리페치의크기를페이지단위로표시합니다. PAGESIZE 페이지의크기를바이트단위로표시합니다. BUFFERPOOLID 사용하는버퍼풀명을표시합니다. dblook 유틸리티를이용하여테이블스페이스에대한 DDL을추출할수있습니다. select 문을이용하여특정한테이블스페이스에대한정보를확인합니다. $ db "select * from syscat.tablespaces" select TBSPACE, TBSPACEID, TBSPACETYPE, DATATYPE, PAGESIZE, EXTENTSIZE, PREFETCHSIZE, BUFFERPOOLID from syscat.tablespaces; Figure 0A syscat.tablespaces 뷰 UNIT 테이블스페이스 90