Steady Mind For My Life

https://github.com/jongseok3910/Spring-Study

728x90
728x90

Oracle 10

바인드변수

바인드변수를 사용해야 하는 이유 오라클에서는 SQL을 실행하기 전에 하드파싱 or 소프트파싱이라는 과정을 거친다. 2023.07.18 - [Oracle] - 쿼리 처리 원리 쿼리 처리 원리 SQL의분석 SQL은 자바 같은 프로그래밍 언어와 달리 실행하기 전에 문법적인 에러를 검출할 방법이 없다. (자바는 컴파일 할 때 문법적에러를 검출 할 수 있다) 그래서 SQL을 실행하기 전에 분석을 hamutang.tistory.com 동일한 SQL문이 라이브러리캐시(공유 풀)에 존재하면 소프트파싱과정을 거쳐 실행되기 때문에 SQL이 빨리 실행될 수 있도록 도와준다. 즉, SQL문이 완전히 동일해야 효율이 좋다 아래 예시를 살펴보자. 바인드변수 사용 전 1 2 3 4 5 6 7 public void login(Str..

Oracle 2023.12.12

DB 재능 기부 세미나(DBian, Oracle, SQL Server)

세미나 수강 이유 어느 날 메일을 확인해 보니 SQL튜닝 강의를 들었었던 dbian으로 부터 한통의 메일이 도착했다. 내용은 DB 재능기부 세미나를 한다는 내용이었고 강의 내용은 아래와 같았다. 1. SQL Server 튜닝 첫걸음 2. ORACLE SQL 성능 모니터링 및 분석 3. tn을 활용한 오라클 성능 분석 8월에 수강한 튜닝강의를 복기 한다는 생각과, SQL 성능 분석에 대해 관심이 생겨서 참가 신청을 했다. 재능기부 형식으로 진행되는 강의였고, 그만큼 적은 비용에 좋은 지식들을 얻어 갈 수 있는 기회라서 인기가 많고 참가신청에 실패했다는 댓글들을 여럿 보았다. 이런 좋은 기회를 놓칠 수 없어서 대학생 때 이후로 오랫만에 시계를 켜놓고 10시에 참가 신청 대기를 했다. 운 좋게 참가신청에 성공..

Oracle 2023.11.12

SQL튜닝 수강 기록

SQL튜닝 수강 이유 23년 6월 SM업무 중이었다. 아침출근 후 평소처럼 로그 확인 중이었는데 에러로그를 하나 발견했다. 에러내용은 전날 새벽에 돈 배치쿼리 중 1시간 30분 ~ 2시간 걸렸던 쿼리가 있어서 DB연결이 끊겨 데이터를 제대로 select 하지 못한 에러였다. 해당쿼리는 select insert 쿼리였고 인라인뷰, 서브쿼리도 많은 복잡한 쿼리였다. select건수는 많아야 20건. 20건 select insert하는데 약 두 시간이 걸린다는 것이 너무 의아했다. 원인을 찾고 해결하려다가 진전이 없어서 결국 DBA분에게 도움을 요청했다. (운영반영하면서 인덱스가 깨진 것이 아니냐, insert 시 parallel로 해야 한다 등 온갖 설이 난무했다 ㅎ) 문제의 쿼리를 DBA분에게 전달 후 옆..

Oracle 2023.10.21

REDO 로그 파일 & REDO 데이터(2)

REDO 로그 파일의 순환 기록 데이터베이스에는 반드시 두 개 이상의 REDO 로그파일이 할당돼야 한다. LGWR은 할당된 REDO 로그 파일은 순환해 가며 REDO 데이터를 기록한다. (중요한 자료는 백업 하듯이 REDO로그도 기록하는 느낌) 순환 기록의 동작 REDO 로그 파일 세 개 중 한개가 'CURRENT' 상태다. (LGWR가 REDO 데이터를 내려 쓸 대상) #1에 REDO 로그 데이터를 기록하다가 데이터가 가득차면 로그 스위치가 발생하며 #2를 'CURRENT'로 전환한다. 로그파일 #2에 REDO 데이터를 기록한다. 이 과정이 반복되고 #3에서 #1로 로그 스위치가 일어나면 #1에 기록된 REDO데이터는 덮어쓰이게 된다. 오라클은 이렇게 여러 REDO 로그 파일은 순환하는 형태로 REDO..

Oracle 2023.10.18

REDO 로그 파일 & REDO 데이터(1)

REDO 로그 파일 REDO 로그 파일은 데이터 파일에 대한 변경 내역인 REDO 데이터를 기록하는 파일이다. 예를 들어, UPDATE문을 사용해 테이블의 데이터를 변경하거나 CREATE INDEX문을 사용해 인덱스를 추가하는 등의 작업을 수행 했을 때 그 변경 내용이 기록된다. REDO 로그 파일에 기록되는 시점 데이터 파일에 대한 모든 변경 내용을 트랜잭션이 commit된 시점에 REDO 로그 파일에 기록된다. 오라클은 장애가 발생하면 REDO 로그 파일을 이용해 복구 작업 을 수행한다. REDO 로그 파일이 손실되면 REDO 로그가 손실되기 이전 시점까지만 복구할 수 있다. REDO 로그 버퍼와 LGWR REDO 로그 버퍼는 생성된 REDO 데이터를 임시로 보관하는 메모리 영역이다. 데이터베이스에 ..

Oracle 2023.10.15

오라클의 메모리 관리(PGA & SGA)

오라클이 사용하는 메모리 영역은 크게 PGA, SGA로 구분된다. PGA(Program Global Area) 1. 특정 프로세스만이 사용하는 메모리영역 서버 프로세스는 각각 'PGA'라는 별도의 메모리 공간을 갖고 있다. 프로세스에 할당된 PGA는 해당 프로세스만 사용할 수 있으며 프로세스 간에 공유되지 않는다. ex: 내 개인 계정으로 접속 했다면 나한테만 할당되는 프로세스 2. PGA의 구성 요소 a. 세션메모리 세션 정보를 저장하기 위해 사용됨. b. Private SQL Area SQL 실행 시의 정보를 보관하고 정렬 등의 SQL 작업을 수행하기 위해 사용됨. * SQL작업은 Private SQL Area 내의 SQL Work Areas에서 수행된다. *서버프로세스는 RDBMS 원격 접속시 사용..

Oracle 2023.10.03

데이터베이스와 인스턴스(2)

인스턴스 SGA라 불리는 메모리 영역과 백그라운드 프로세스들로 구성되어있다. 인스턴스는 프로세스와 메모리 영역으로 구성되므로 데이터베이스가 정지돼 있을 때는 존재하지 않는다. SGA *데이터베이스 버퍼 캐시, REDO 로그 버퍼, *공유 풀, 라지 풀 자바 풀 등으로 구성돼 있으며, 프로세스 간에 공유하는 메모리 영역이다. 인스턴스를 기동하면 오라클은 초기화 파라미터라 불리는 설정값에 설정된 만큼의 SGA공간을 확보한다. (버퍼 캐시와 공유 풀은 SQL튜닝 공부 시 중요 개념이다) 백그라운드 프로세스 백그라운드 프로세스는 인스턴스의 기동에 맞춰 시작된다. 프로세스를 감시하거나 데이터를 파일에 기록하는 등의 작업을 백그라운드에서 수행한다. LGWR - REDO데이터를 REDO로그파일에 기록하는 역할 DBW..

Oracle 2023.08.27

데이터베이스와 인스턴스(1)

오라클의 데이터베이스와 인스턴스 구성도 데이터베이스 데이터베이스는 한 개 이상의 데이터 파일과 두개 이상의 REDO 로그 파일 한 개 이상의 컨트롤 파일로 구성되어있다. 파일종류 저장되는 데이터 데이터 파일 테이블 인덱스 UNDO 데이터 임시 데이터 REDO 로그 파일 변경 이력 컨트롤 파일 제어정보 데이터 파일 사용자가 생성한 테이블이나 인덱스 등의 데이터가 보관된다. 데이터베이스에 저장되는 데이터가 많아질수록 데이터 파일도 커진다. 과거의 데이터인 UNDO 테이터, 작업학 때 임시로 사용되는 임시데이터, 시스템 관리용 데이터도 보관된다. REDO 로그 파일 데이터베이스의 변경 이력은(ex:DML) REDO 로그 파일에 순차적으로 기록된다. 로테이션해 가면서 변경 이력을 기록하기 때문에 하나의 데이터베..

Oracle 2023.08.17

인덱스

데이터베이스 테이블에서 데이터를 찾는 방법은 두가지다 1. 테이블 전체 스캔한다. 2. 인덱스를 이용한다. 인덱스(책 뒤쪽에 있는 색인과 같은 느낌) 인덱스는 대용량 테이블에서 필요한데이터만 빠르게 효율적으로 액세스 하기 위해 사용하는 오브젝트이다. DBMS는 일반적으로 B*Tree 인덱스를 사용한다. B*Tree 인덱스(Balanced Tree) 인덱스 칼럼 값을 미리 정렬해 두고 정렬된 데이터 값을 비교해 매우 효율적으로 로우를 검색하는 인덱스다. 나무를 거꾸로 뒤집은 모양이어서 뿌리(Root), 가지(Branch). 잎사귀(Leaf) 순으로 구성되어있다. 리프블록에는인덱스 칼럼의 칼럼값이 ROWID와 함께 칼럼값으로 정렬된 상태로 저장된다. 인접한 리프블록은 서로 링크 돼 있다. 브랜치블록에는 자신..

Oracle 2023.07.31

쿼리 처리 원리

SQL의분석 SQL은 자바 같은 프로그래밍 언어와 달리 실행하기 전에 문법적인 에러를 검출할 방법이 없다. (자바는 컴파일 할 때 문법적에러를 검출 할 수 있다) 그래서 SQL을 실행하기 전에 분석을 해야한다. 분석작업은 아래와 같고 SELECT문 기준이다. 1.공유 풀 확인(SGA영역) 서버 프로세스는 전달받은 SQL과 같은 SQL의 분석 결과가 공유 풀에 존재하는지 확인한다. -하드파싱 a. 공유 풀에 사용 할 만한 분석결과가 있으면 분석단계를 넘어 SQL실행 단계로 간다. -소프트파싱 b. 공유 풀에 사용 할 만한 분석결과가 없으면 다음 SQL검증 단계로 진행된다. 아주 간단한 설명 홍길동을 구하는 SELECT쿼리를 수행한다. 1.SELECT NAME FROM 수첩 WHERE NAME = '홍길동'..

Oracle 2023.07.18
728x90
728x90