Database: 227개의 글
SQL의 작성과 파싱데이터베이스에서 어떤 결과값을 얻기 위해 SQL문을 작성할때에도 개발자 개개인마다 이를 표현하는 방법은 다릅니다. 데이터베이스는 같은 결과를 얻는 경우에도, SQL문의 표현이 다르면 새롭게 파싱해야합니다. SQL문을 실행하면, 데이터베이스는 아스키 값으로 계산합니다. 즉, 대문자, 띄어쓰기, 주석에 따라 아스키 값이 다르므로 표현이 달라지면 다른 SQL문으로 인식하게됩니다. 같은 결과를 얻지만 표현이 다른 SQL문은 실행할때마다 library Cache에서 하드파싱됩니다. 하드파싱은 SQL문의 검색과 공간확보를 위해 Shared Pool Latch와 Library Cache Latch를 필요로 합니다. 잦은 하드파싱은 리소스를 과도하게 사용하고 래치를 오래 점유하므로 SQL문의 수행에..
direct path writedirect path write 대기 이벤트는 세션 PGA(Program Global Area) 내부의 버퍼로부터 데이터파일로 기록할 때 발생됩니다. 세션은 다수의 direct write를 요청한 후 처리를 진행합니다. 세션이 I/O 처리가 완료되었다고 인지하는 시점에 direct path write 대기 이벤트를 대기합니다.direct path write 대기는 Direct load 작업이 발생함을 의미합니다. 이러한 작업이 요청될 경우 오라클은 SGA(System Global Area)를 경우하지 않고 데이터 파일에 직접 쓰기 작업을 수행합니다. 즉, DBWR(Database Writer) 프로세스에 의해 쓰기 작업이 이루어지는 것이 아니라 서버 프로세스에 의해 직접 쓰..
db file sequential readdb file sequential read 대기 이벤트는 싱글 블록 I/O 수행 시에 발생하는 대기 이벤트입니다. 한번의 싱글 블록 I/O가 발생할 때마다 한 번의 db file sequential read이벤트 대기가 발생합니다. 싱글 블록 I/O는 파일로부터 하나의 블록을 읽는 모든 작업들에서 발생 가능하며 일반적으로 인데스 스캔 및 ROWID에 의한 테이블 액세스 시에 발생합니다. * Parameter P1(파일#), P2(블록#), P3(블록 수(항상 1)) * Wait Time I/O를 수행하기 위해 대기한 시간을 의미 * 일반적인 문제 상황 및 개선방법 - 원인: 비효율적인 인덱스 스캔으로 인한 과다한 싱글 블록 I/O - 진단 방법: SQL 실행 계획..
* PCTFREE란? - 사용가능한 Block 공간 중에서 데이터 Row의 Update 등 데이터의 변경에 대비해서 확보해 놓은 BLOCK의 %값입니다. - PCTFREE의 Default 값은 10%입니다. - PCTFREE와 PCTUSED의 합이 100을 초과하지 않는 범위내에서 0~99까지 값을 PCTFREE값을 PCTFREE 값으로 사용할 수 있습니다. - 위 그림은 PCTFREE = 20%인 그림입니다. - BLOCK의 20%를 사용가능한 빈영역으로 유지하며 빈영역은 각 BLOCK의 ROW의 UPDATE 등 데이터를 갱신하는 데 사용합니다. * PCTFREE가 적을 경우 - 기존 테이블 행 갱신에 의한 확장을 위해 적은 공간을 확보합니다. - 많은 ROW가 한 BLOCK안에 INSERT 될 수 있..
SQL*Loader란? SQL*Loader란 외부 화일 데이터를 ORACLE 데이터베이스의 테이블에 넣기 위한 유틸리티 입니다. SQL*Loader 특징 1) 하나 이상의 입력 파일을 사용할 수 있습니다. 2) 로드를 위해 여러 개의 입력 레코드가 하나의 논리적 레코드로 결합될 수 있습니다. 3) 입력 필드는 고정된 길이를 가질 수도, 다양한 길이를 가질 수도 있습니다. 4) 입력 데이터는 문자, 이진, 팩 십진수(packed decimal), 날짜, 그리고 존 십진수(zoned decimal) 등의 어떤 유형도 사용할 수 있습니다. 5) 데이터는 디스크나 테이프, 또는 명명된 파이프 등 여러 유형의 매체로부터 로드될 수 있습니다. 6) 데이터는 한 번에 여러 테이블로 로드될 수 있습니다. 7) 데이터는..
spool 파일명 // ex) /user/test/a.txt -- spool 관련 명령어 . . . ex) set echo off; ....명령 구문..... // 쿼리 또는 @쿼리파일명 ex) /user/test/a.sql spool off spool은 명령들을 일괄로 처리해 주는 명령어 이다. spool 명령에 파일명을 파라미터로 지정하면 spool에서 실행된 모든 명령 들이 파일로 저장된다. ---------------------------------- spool 관련 명령어 ---------------------------------- set heading off : 헤더가 표시되지 않고 데이터만 표시한다. set pagesize 0 : 기본값은 14이며 공백을 없애기 위해 0으로 세팅, page..
* 테이블스페이스: 논리적(메모리) - 오라클 데이터베이스는 하나 이상의 논리적 저장영역 테이블스페이스가 있고 데이터를 집합적으로 저장합니다. - 하나 이상의 데이터 파일로 구성되어 있습니다. 1. 테이블 스페이스 유형 1.1. 시스템 테이블스페이스(사용자가 건드릴수 없다) - 데이터 베이스와 함께 생성됩니다. - 데이터 딕셔너리 포함 - 시스템 Undo Segment를 포함합니다. 1.2. 비시스템 테이블스페이스(사용자가 필요하면 만들고, 지우면서 사용가능) - 데이터베이스 관리와 공간 관리를 용이하게 할 수 있습니다. - Undo Segment, Temporary Segment, 응용 프로그램 데이터 세그먼트 및 인덱스 세그먼트를 분할합니다. - 사용자에게 할당된 공간의 양을 제어합니다. 2. 테이블..
SQL 튜닝은 "SQL + 튜닝"입니다. 즉, SQL 튜닝이란 튜닝 대상이 되는 SQL을 이해하고, SQL이 가진 정보(테이블/인덱스/컬럼의 정보 및 업무적 성격 등)를 치밀하게 분석하여 얻어지는 결과라고 생각합니다. SQL 튜닝을 시작하기 위해서는 SQL에 대한 이해가 선행되어야 한다고 생각합니다. 왜냐하면, SQL의 작성형태에 따라 다양한 성능 문제가 발생되기 때문입니다. SQL 튜닝의 시작은 SQL의 의미(작성 의도)를 제대로 파악하는 것입니다. SQL의 의미를 정확히 파악하지 못한다면, 원본 SQL에서 추출하고자 했던 결과 집합이 아닌 다른 집합을 추출하게 될지도 모릅니다. 이러한 개선안은 개선안이라고 할 수 없습니다. 즉, 원본 SQL의 작성 의도를 제대로 파악하지 않고, 단순히 I/O 발생량을..
파티션 개요오늘날 기업에서 관리하는 데이터는 수백테라 바이트에 이르는 데이터베이스를 관리합니다. 하지만 이런 데이터들 중 몇몇의 Big Transaction Table이 거의 모든 데이터를 가지고 있고 나머지 테이블들은 이 Big Transaction Table을 경유하여 액세스하는 용도로 사용됩니다. 이렇게 데이터 크기가 크고 중요한 Big Transaction Table을 관리하는 부분에서 Troubleshooting이 발생될 경우 데이터베이스의 성능 및 관리작업에 심각한 영향을 받을 수 있습니다. 이러한 리스크가 있는 Big Transaction Table을 보다 효율적으로 관리하기 위해 Table을 작은 단위로 나눔으로써 데이터 액세스 작업의 성능 향상을 유도하고 데이터 관리를 보다 수월하게 하고..
테이블을 저장하는 공간이란 의미도 틀린것은 아니지만 정확한 의미는 아닙니다. 오라클은 데이터베이스 관리 시스템이고 말 그대로 데이터들을 관리합니다. 즉 어딘가에 데이터들을 저장, 추출, 삭제, 변경하는 작업을 할 수 있는 것입니다. 그렇다면 데이터는 어디에 저장되는 것일까요? 물론 파일에 저장됩니다. 오라클 데이터베이스는 데이터 파일들을 가지고 있으며, 이 파일들에 데이터가 저장됩니다. 그런데 파일은 데이터가 저장되는 물리적인 공간을 말하는 것입니다. 오라클 내부에서는 데이터 블록(data block), 익스텐트(extent), 세그먼트(segment), 테이블스페이스(tablespace)라는 논리적인 개념으로 데이터 들을 관리합니다. 오라클에서 데이터를 저장하는 가장 최소의 논리적인 단위가 데이터 블록..