본문 바로가기

공부 이야기

[Oracle] MView란? * With절 plan에 사용되는 것과 일반적인 View와 다름1. 쿼리 결과를 디스크의 별도 테이블 스페이스에서 데이터 파일 형태로 저장하는데 사용자는 MView 데이터를 직접 수정할 수 없고, 원본 테이블의 변경 사항에 따라 자동으로 갱신한다. 2. 데이터베이스 객체로 관리되기 때문에 데이터 딕셔너리에서 MView를 확인할 수 있다. 또는 SELECT * FROM USER_SEGMENTS 쿼리로 확인이 가능하다. 일반 VIEW는 조회되지 않는 반면 MVIEW는 조회가 가능하다.SQL이 다시 실행되어야 하는 일반 VIEW와는 달리 데이터가 미리 저장되기 때문에 더 빠른 조회가 가능하다.3. 쿼리가 재실행되는 경우 사용자에게 미리 저장된 결과를 전달함으로써 쿼리를 여러 차례 재실행하는 데 따르는 성능적인.. 더보기
[Oracle] Direct Path I/O 1. Insert 작업을 수행할 때, redo 또는 undo 로그에 기록하지 않고 바로 Disk에 병렬로 처리하는 작업2. Nologging 힌트를 줘야 redo 로그 기록을 하지 않는다.3. append 힌트를 줘야 한다.4. 블록 단위로 덤프 기록을 하며 HWM 위로 데이터 기록을 하기 때문에 이전 데이터와의 구분을 둘 수 있다. 더보기
[Oracle] RAC Failover 처리 과정 1. RAC 노드들은 public IP, private IP (Real IP, Virtual IP)를 가짐2. Virtual IP를 가지는 이유는 Failover에 빠르게 대응하기 위함3. Real IP를 이용하면 TCP Timeout 시간 동안 Failover를 진행할 수 없음(참고자료 확인)- 이는 TCP/IP 설계와도 관련이 있고 네트워크의 ARP 프로토콜에서 기존에 처리하는 방식이기 때문임- VIP는 네트워크 카드, OS에서 관리하는 것이 아닌 Grid Infrastructure > Oracle Notification Service에서 관리한다. 4. Virtual IP를 이용해서 즉시 Failover를 진행함5. 네트워크가 단절된 node의 Virtual IP를 살아있는 node의 Virtual.. 더보기
[Oracle] NL Join 대신에 Hash Join을 사용하는 이유 NL Join은 driving, driven 테이블을 루프를 돌며 반복하는 방식이다.선행 테이블에서 나온 결과값에 대해 후행 테이블에서 동치 혹은 범위 조회 연산을 한다.후행 테이블에서 N번의 탐색 연산을 수행하기 때문에 선행 테이블의 볼륨이 너무 많거나선행 테이블에 인덱스가 존재하지 않아 조회 속도가 느린 경우 Hash Join을 사용하는 방식이 효과적일 수 있다. 인덱스가 없는 대신 선행 테이블에 대해 해시 테이블을 만든 후, 후행 테이블에 대해 동치 연산을 진행하는데N번의 연산 대신 해시 함수를 이용한 O(1) 연산을 수행하면 조회 속도를 개선할 수 있기 때문이다. 해시 테이블은 만들어지는데도 시간이 걸릴 수 있으므로 두 개의 테이블 중 크기가 작은 테이블을 생성하도록 조인 순서를 정하는 것이 효과.. 더보기
[Oracle] HWM(High Water Mark), PCT, freelist 데이터베이스는 테이블 스페이스, 세그먼트, 익스턴트, 블록 순으로 각각 1대N의 관계로 세분화된다. 단편화를 줄이기 위한 방식으로 사료된다.세그먼트는 테이블 스페이스 내에 여기저기 산재될 수 있는 반면 익스턴트는 연속된 블록으로 이뤄져 있다.관련성 있는 데이터끼리 군집화시켜놓는 것이 조회 효율성을 높여주기 때문이다. 이 중 가장 작은 단위는 '데이터 블록'으로 실제 I/O가 발생할 때 읽고 쓰는 단위이다.단 1Byte 데이터를 읽으려고 해도 데이터 블록인 2KB를 읽는다.데이터 블록을 제외한 나머지는 유동적인 크기를 가진다. 세그먼트는 공간을 확장할 때 익스턴트 단위로 하나씩 늘린다. 이 때 사용되는 개념이 High Water Mark이다.오라클은 일종의 선을 먼저 지정한 후, 공간을 늘리는 방식을 사용.. 더보기
[Oracle] 서브 쿼리에 대해서 보통 자주 사용하는 조인 방식과 다르게 서브 쿼리를 통해 얻는 이점이 있다.메인 쿼리에서 반환되는 데이터의 양이 적은 경우, 후행 쿼리(=서브쿼리)의 조회 연산이 줄어들 수 있고만약 서브 쿼리의 input 값이 어느정도 일정한 경우, caching이 되기 때문이다. (Filter Operation) 펀드 상품 기준가 쿼리 작성시에 성능 이점을 볼 수 있었다.특정 기간에 가입한 상품을 찾고 당시의 상품 기준가와 가입 금액을 반환하는 쿼리였다.1-계좌 테이블, 2-상품 테이블, 3-기준가 테이블이 서로 조인되어 있었다.Nested Loop Join의 경우 같은 값을 가지는 칼럼에 대해 반복 조회를 수행하기 때문에 N x N x N번 수행하는 것으로 보였다. 하지만 펀드 상품의 경우, 같은 날에는 상품별로 하.. 더보기
Oracle 서버 시작하기, 종료하기 sqlplus에 접속한 후, 다음 명령어를 차례대로 수행한다.  각 단계는 다음과 같다.- nomount : spfile을 읽어서 SGA, PGA, Disk 등 데이터베이스 고유 메모리 영역을 할당한다.- mount : control file을 읽어서 세부적인 메모리 영역 혹은 데이터베이스에 필요한 환경설정을 세팅한다.- open : 최종 사용 가능한 상태로 user 접속이 이뤄진다. 그냥 startup 명령어를 수행하면 한 번에 바로 시작할 수 있다.반대로 데이터베이스를 종료하는 shutdown 명령어도 다양하다.shutdown -transactional : 현재 트랜잭션 수행 중인 세션이 완료되면 종료한다.shutdown -immediate : 현재 트랜잭션이 rollback 되며 연결된 세션을 해제.. 더보기
Oracle 23c 설치하기 1. 이왕 설치하는거 최신 버전을 설치해보자* window에 docker, bash가 다운로드 상태이어야 함2. docker로 이미지 가져오기docker pull container-registry.oracle.com/database/free:latest3. docker 이미지를 실행하기docker run -d --name ora23 container-registry.oracle.com/database/free* ora_container 대신 다른 이름 써도 됨4. 부팅 로그 확인하기docker logs --follow ora23Starting Oracle Net Listener. Oracle Net Listener started. Starting Oracle Database instance FREE. O.. 더보기