database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
ㆍOracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
Oracle Q&A 21064 게시물 읽기
No. 21064
[질문]디스크 I/O 튜닝에 대해...
작성자
김선구
작성일
2004-12-15 11:08
조회수
2,471

안녕하세요.

현재 레드헷리눅스9 + Oracle9i를 운영하고 있는 초보입니다.

 

앞으로 Oracle 9i DataBase 전용 서버를 구입할 예정입니다.

사양은 Linux에 Dual CPU, Main 메모리 4G, Swap 4G, SCSI * 7 로 구성된 2U 장비입니다.

Database 서버는 ASP 서비스를 제공하기 때문에 서비스 가입자들마다 각자 Schema를 생성해 사용하기 때문에 가능한 많은 사용자들을 수용하기 위해 고려할것이 많은거 같습니다.

그래서 예전에는 디스크 하나마다 Tablespace와 하나의 Disk file를 할당해 하나의 테이블스페이스에서 40개 정도의 Schema를 저장하는 형태였습니다.(물론 Index는 별도의 Tablespace에 구성되어 있습니다.)

 

제가 궁금한것은,

최대한 많은 Shema를 포용하면서도 성능이 우수한 구조로 디스크 I/O를 튜닝한다면 어떤 구조가 가장 나을까요?

(단, Backup은 고려하지 않습니다.)

1. 각 디스크마다 Tablespace와 datafile을 할당하고, 사용자 Shema를 각각의 테이블스페이스에 분산 배치한다.

2. 하나의 Tablespace를 생성하고 각 디스크마다 datafile을 생성해 테이블스페이스에 할당한다(디스크 스트라이핑)

 

또, 궁금한건...

현재 하나의 테이블스페이스에 하나의 데이터파일을 할당하고, 데이터 파일 크기는 초기 2G에 자동으로 계속 증가되도록 해놨는데,

그게 올바른 선택이었을까요?

아니면, 하나의 테이블스페이스에 여러개의 고정크기의 데이터파일을 할당하는게 디스크 I/O에 효율적일까요?

 

개발자에서 DBA까지 하려니깐 정말 힘드네요.

항상 초보자에게 도움 주시는 모든 분들께 감사드립니다.

좋은하루 되세요.

이 글에 대한 댓글이 총 4건 있습니다.

만약 스토리지를 사용중이시라면

1,2번 모두 무시하시고 고민없이 하나의 테이블스페이스에 하나의 테이블 스페이스만 할당합니다.  다만, 스토리지 구성방법에 대해서 더 고민해야합니다.

 

스토리지가 없다면

1. 하나의 테이블 스페이스에 데이터파일을 나누워서 설치합니다.

  1.1 테이블 생성시 패러럴로 생성해서 성능향상을 시킵니다.

    모든 테이블을 패러럴로 생성해서는 안됩니다. 패러럴 정책은 생각

    보다 어렵습니다. index로 패러럴로 되어있어야 하고 join시 패러럴

   테이블과 페러럴이 아닌테이블을 join하면 성능이 더저하되기도 합니다. )

 

2. join이 많은 테이블 (a,b) 의 조인이 많고 사이즈가  테이블은 테이블스페이스를 나눕니다. 특히 code성 테이블을 한군데 모아놓습니다. join시 io성능을 향상시킵니다.

   

장종훈(우연을가장한인연)님이 2004-12-15 11:39에 작성한 댓글입니다.

저같은 경우는 단 하나의 테이블스페이스를 만들고 데이터 파일을 여러 디스크에 분산 생성하여 사용합니다.

인덱스 역시 별도의 테이블스페이스에 저장하지 않고 데이터와 같은 테이블 스페이스에 저장합니다.

(인덱스와 데이터를 하나의 테이블 스페이스에 저장하는 이유는 index와 데이터가 동시에 접근되는 객체가 아니기 때문에 구지 분리시킬 이유를 찾지 못하겠더군요. dbms는  인덱스를 읽은 후 데이터를 읽죠. 인덱스와 데이터에 대한 접근 비율이 동일 하지 않은 이상  데이터와 인덱스를 별도의 디스크에 저장하는것이 더 비효율 적일것 같습니다.)

 

테이블 스페이스는 locally managed tablespace를 사용하구요.   

uniform extent size 옵션과 함께 사용하면 데이터들이 각 disk에 고르게 분산이 되어 저장 됩니다.

 

물론 아시겠지만 가장 좋은 분산 방법은 hardware혹은 file system의 기능을 사용한 raid 1+0 입니다. ^^;

 

그리고 데이터 파일의 갯수는 성능에 영향을 미치지 않는것으로 알고 있습니다. 

고서진(dreamt)님이 2004-12-17 09:47에 작성한 댓글입니다.

보통 하나의 테이블스페이스에 여러개의 데이타 파일이 붙여집니다.

(필요하면요^^)

위 장종훈님의 말씀대로 고려하시면 될거 같구요 다만 고서진님의

경우 하나의 테이블 스페이스에 인덱스와 데이타를 같이 이용하신

다면 운영상에 애로점이 많습니다. 그리고 미처 생각하지 못하신

부분이 있는데 혼자서 사용하는 시스템이라면 맞을지 몰라도 오라클

을 혼자서 사용하지는 않지요^^ 누군가는 일은 인덱스에 데이타를

생성하는거고 누군가는 데이타를 또 수정/생성/읽기를 할건데

같은 디스크에 있다고 하면 당연히 하드I/O에 병목현상이 생깁니다.

그리고 용량관리에 있어서도 굉장히 난해해 지지요. 아주 약간의

인덱스 영역만 필요할건데 커다란 데이타영역이 다 차지하고 있다면

추가로 데이타파일을 더해줘야 하기땜에 공간관리면에서도 손해지요^^

손주한(arena)님이 2004-12-20 17:24에 작성한 댓글입니다.

여러사람이 사용하기 때문에 그렇게 설정한것 입니다. ^^;

인덱스 블럭과 데이터 블럭은 접근되는 양과 빈도수가 많이 차이가 납니다. 만약 두개의 디스크가 있다고 가정하고 각각의 디스크에 인덱스와 데이터를 따로 저장 한다면

두 disk의 load가 동일하리라고 볼 수 없습니다.

만약 index용 disk에 부가하 많이 걸리는 상황이라면 index를 통해 data를 접근하는 쿼리들 역시 같이 느려질 것입니다. data를 저장하는 disk가 한가하더라두요.

 

하지만 index와 data를 두개의 디스크걸쳐서  저장한다고 하면 통계적으로 볼때 두개의 디스크는 거의 비슷한 부하를 갖게 되겠지요.

 

index segment던 data table segment던 결국 데이터를 저장하는 block의 집합체 일 뿐이고

어느 비록 다른 디스크에 저장되어 있다고 하더라도

각가의 부하에 대해서 완벽히 자유로울 수는 없습니다.

 

이런 상황이라면 통계적으로 균일하게 load를 받게 설정하는게 부하 분산 측면에서 낳지 않을까요? ^^

 

>>누군가는 일은 인덱스에 데이타를

>>생성하는거고 누군가는 데이타를 또 수정/생성/읽기를 할건데

>>같은 디스크에 있다고 하면 당연히 하드I/O에 병목현상이 생깁니다

제가 말한 tablespace layout은 단 하나의 디스크에 index와 data를 저장하는 상황을 말한것이 아니고

여러 디스크에 걸쳐 index와 data를 무작위로 저장한다는 것입니다.

 

용량관리역시 하나의 테이블 스페이스로 관리하는게 편하지 않나요? ^^;   테이블 스페이스를 잘게 나누게 되면 어느 한쪽 공간은 남고 어느 한쪽 공간은 모자라게되는 경우가 자주 생기게 되지요.( 초기에 완벽하게 data size와 index size를 산정하지 않는한이요.)

하나의 테이블 스페이스로 저장하게 되면 그저 그 테이블스페이스 하나의 용량만 관리하면 index가 커지든 data가 커지든 신경쓸게 없습니다.

 

운용상의 애로점은 어떤게 있을지 좀 알려주세요. ^^;

저도 오라클 만저본지 얼마되지 않아서 모르는점이 많거든요. 제가 기존의 오라클 사용 관습을 잘 몰라서 좀 엉뚱하게 사용하는것 같긴 합니다. ^^

 

고서진(dreamt)님이 2004-12-20 18:26에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
21067ORA_00604 에러 [1]
초보
2004-12-15
3998
21066그룹 합계에 관하여 질문드립니다. [4]
이진홍
2004-12-15
2076
21065테이블 스페이스 크기 조정 [1]
초보
2004-12-15
1358
21064[질문]디스크 I/O 튜닝에 대해... [4]
김선구
2004-12-15
2471
21063group by 절을 쓰면서 통계를 출력 [3]
정진종
2004-12-15
4058
21061오라클 04031 에러 질문이요.. [3]
로그파일
2004-12-14
1882
21060[질문]시작일과 끝날자를 입력 받는 쿼리 [2]
신승익
2004-12-14
1341
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.027초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다