2020. 1. 9. 15:10ㆍSecurity/oracle database
- 그림과 달리 Block 사이즈는 전부다 똑같다.
- 그림상 RBS가 undo 테이블 스페이스다. undo 테이블 스페이스의 생성 갯수는 제약이 없지만 실제로는 1개만 사용한다.
- 템포러리 테이블 스페이스마다 세그먼트는 하나만 만들어 진다.
테이블
- 데이터베이스 내에 데이터를 저장하는 가장 일반적인 수단
- 테이블 세그먼트는 클러스터화되거나 분할되지 않은 테이블에 대한 데이터를 저장한다
테이블 분할(테이블 파티션)
- 하나의 물리적인 영역이 너무 클때 나눠서 물리적인 영역을 만들어 준다.
- 관리자는 분할된 것을 알지만 사용자는 그 사실을 모르기 때문에 똑같이 쓴다.
클러스터
- RDB의 검색시 대부분 join을 사용하는데 특정 테이블이 항상 join될 경우에 성능 향상을 위해 데이터를 같은 디스크 위치에 저장하는 것.
인덱스
- 특정 인덱스에 대한 항목을 하나의 인덱스 세그먼트에 저장.
* 데이터베이스에서 가지는 트리구조의 특징
- 루트에서 리프 노드까지의 거리가 같음.
- 데이터가 저장되는 노드는 오직 리프노드 뿐이다.
- 상방향으로 커진다.
인덱스 구성 테이블
- 현재 오라클에서는 삭제된 유형. RDBMS의 기본 원칙이 깨져서 지금은 사용하지 않는다.
인덱스 분할 영역
- 인덱스를 분할하여 여러 테이블스페이스에 분산시킬 수 있다. 이 경우 인덱스의 각 분할 영역은 세그먼트에 대응되고 여러 테이블스페이스로 확장할 수 없다.
- 사용하는 주된 이유는 인덱스 I/O(입/출력)를 분산시켜 경합을 최소화 하는데 있다.
undo 세그먼트
- 데이터베이스를 변경 중인 트랜잭션은 undo 세그먼트를 사용한다.
임시 세그먼트
- sort set을 저장할때 사용
* RDBMS의 특징 : 어플리케이션으로부터 독립적
LOB 세그먼트 : 텍스트, 이미지, 비디오 같은 대형 객체를 저장
중첩 테이블 : 각각의 행에 테이터가 저장
부트스트랩 세그먼트 : 데이터베이스가 스타트업될때 임시로 사용
* 확장 영역 할당 및 할당 해제
세그먼트가 extent를 할당 받는 경우
- 생성될때(Created)
- 확장될때(Extended)(계속해서 데이터가 들어와서 확장영역이 더 필요할때)
- 변경될때(Altered)
세그먼트가 extent가 할당 해제되는 경우
- 삭제될 경우(Dropped)
- 변경될 경우(Altered)(그러나 하이워터마크의 바깥쪽 부분이 extents가 없기때문에 할당 해제 되는 경우가 없다.)
- 잘릴경우
그림상 free extent가 연속적으로 붙어있지만 두개의 연속된 공간이라고 인지를 못 하는데 이것이 dictionary 관리 테이블 스페이스의 대표적인 단점이다.
데이터 베이스 블록
- 입출력의 최소 단위. 윈도우 같은 경우는 페이지라고 부른다.
- 하나 이상의 운영 체제 블록으로 구성
- 테이블 스페이스 생성시 설정
- DB_BLOCK_SIZE가 기본 블록 크기(8K)고 사이즈를 변경할 수 없다
- 2, 4, 8, 16, 32의 총 5개 종류의 블록사이즈 사용.
- 데이터 베이스는 표준 블록 사이즈(DB_BLOCK_SIZE) 하나와 비표준 블록 사이즈 4개까지 생성하여 사용 가능
- 사이즈가 작은게 좋은 경우는 OLTP, 사이즈가 큰게 좋은 경우는 세션이 적고 대량의 데이터를 엑세스 하는 DW
표준 블록 크기
해당 크기의 데이터베이스 버퍼 캐시를 활성화 시켜줘야 같은 크기의 비표준 블록 테이블 스페이스를 생성할 수 있다.
[실습]non standard block size를 사용하는 tablespace 생성과 삭제
<사용 명령어>
SELECT NAME, BYTES FROM V$SGASTAT
WHERE NAME LIKE '%buffer%' AND POOL IS NULL;
- database buffer cache나 redo log buffer 의 크기를 확인 한다.
SELECT POOL, SUM(BYTES) FROM V$SGASTAT
WHERE POOL IS NOT NULL
GROUP BY POOL;
- Shared pool, large pool, java pool 의 크기를 확인한다.
SELECT NAME, BLOCK_SIZE, BUFFERS, BUFFERS*BLOCK_SIZE AS "SIZE"
FROM V$BUFFER_POOL;
- 다양한 database buffer cache의 상태를 확인한다.
CREATE TABLESPACE <tablespace명>
DATAFILE '' SIZE <크기>
BLOCKSIZE <크기>;
- BLOCKSIZE에 지정된 크기의 block size를 갖는 tablespace를 생성한다.
SHOW PARAMETER db_block_size
// 표준 db_block_size가 8k임을 확인
SELECT tablespace_name, block_size FROM dba_tablespaces;
// 각 테이블 스페이스별 block 크기 확인. 전부 8k임을 알 수 있다.
SHOW SGA
SHOW PARAMETER sga_
SHOW PARAMETER cache_size
// 크기가 0이 아니라 자동으로 설정하기때문에 설정해주지 않는다는 뜻.
SELECT pool, sum(bytes) FROM v$sgastat
WHERE pool is not NULL
GROUP BY pool;
// 여러 pool size 크기 확인. shared pool의 크기는 의미가 없다.
SELECT NAME, BYTES FROM V$SGASTAT
WHERE NAME LIKE '%buffer%' AND POOL IS NULL;
// database buffer cache나 redo log buffer 의 크기를 확인 한다
SELECT name, block_size, buffers, buffers*block_size as "SIZE"
FROM v$buffer_pool;
// 현재 버퍼 캐시에는 8k 사이즈인 버퍼 캐시만 존재하는 것을 확인
CREATE TABLESPACE imsy
DATAFILE '/app/ora12c/oradata/disk1/imsy01.dbf' SIZE 5M
BLOCKSIZE 16K;
// 매칭되는 데이터베이스 버퍼 캐시가 없어서 만들어 지지 않는다.
ALTER SYSTEM SET db_16k_cache_size = 16M;
// 16k 블록 크기의 버퍼 캐시 설정
SHOW PARAMETER cache_size
// 16k 블록 크기의 버퍼 캐시의 크기
SELECT name, block_size, buffers, buffers*block_size as "SIZE"
FROM v$buffer_pool;
// 16k 사이즈의 버퍼 캐시가 새롭게 존재하는 것을 확인
CREATE TABLESPACE imsy
DATAFILE '/app/ora12c/oradata/disk1/imsy01.dbf' SIZE 5M
BLOCKSIZE 16K;
// 데이터베이스 버퍼 캐시가 생성됐기 때문에 16k 크기의 테이블 스페이스가 만들어 진다.
SELECT tablespace_name, block_size FROM dba_tablespaces
ORDER BY 1;
// 16k 크기의 imsy 테이블 스페이스 확인
SELECT tablespace_name, bytes, file_name FROM dba_data_files;
// 테이블 스페이스와 데이터 파일의 정보 확인
ALTER SYSTEM SET db_16k_cache_size = 0M;
// 데이터베이스 버퍼 캐시의 사이즈를 실제 물리 저장을 하지 않는 0메가로 만들어 데이터 버퍼 캐시가 지워지지만 이렇게 사용하지않는다. oracle 9i 이후 버전일 경우 에러메세지는 발생되지않지만 16k 크기의 테이블 스페이스가 사용 불능에 빠진다. 즉, 장애 상태에 빠진다.
SELECT tablespace_name, bytes, file_name FROM dba_data_files;
// open상태임에도 불구 dba_data_files이 조회 되지 않는다.
SELECT t.name tablespace_name, d.bytes, d.name file_name
FROM v$tablespace t, v$datafile d
WHERE t.ts#=d.ts#
ORDER BY 1;
// 장애 상황에서도 동적 성능 뷰는 조회가 가능하다.
CREATE TABLE imsy (no NUMBER) TABLESPACE imsy;
// 장애 상황이기때문에 imsy 테이블 스페이스를 사용할 수 없다.
DROP TABLESPACE imsy;
// 실무에서는 데이터 버퍼 캐시보다 테이블 스페이스를 먼저 삭제해준다.
!ls /app/ora12c/oradata/disk1/
!rm /app/ora12c/oradata/disk1/imsy01.dbf
!ls /app/ora12c/oradata/disk1/
// 테이블 스페이스가 삭제 된 것을 확인
SELECT tablespace_name, bytes, file_name FROM dba_data_files;
// 다시 정상적으로 테이블 스페이스의 정보가 조회되는 것을 확인할 수 있다.
* 용어 및 개념 정리
extent : 일정한 수의 연속된 오라클 block
optimizer : 명령을 받았을때 실행계획을 짜는 장치. 클러스터가 존재할 경우 무조건 사용하려고한다.
'Security > oracle database' 카테고리의 다른 글
오라클 데이터베이스 관리자 기초- (9)사용자 관리 (0) | 2020.01.14 |
---|---|
오라클 데이터베이스 관리자 기초- (8)저장 영역 구조 및 관계 2 (0) | 2020.01.13 |
오라클 데이터베이스 관리자 기초- (7)테이블 스페이스 및 데이터 파일 관리(2) (0) | 2020.01.09 |
오라클 데이터베이스 관리자 기초- (6)테이블 스페이스 및 데이터 파일 관리 (0) | 2020.01.08 |
오라클 데이터베이스 관리자 기초-(5)리두 로그 파일 유지 관리 (0) | 2020.01.07 |