본문 바로가기

ALL LIST12

PMD, 정책관리형 데이터베이스, 관리자관리형 데이터베이스, 서버풀 PMD, 정책관리형 데이터베이스, 관리자관리형 데이터베이스, 서버풀에 대한 개념을 설명하기전에 사전에 미리 인지하고 있어야될 개념부터 1)~3) 항목에 설명해 놓겠습니다..~ 4) 항목부터 정책관리형 데이터베이스, 관리자관리형 데이터베이스, 서버풀에 대한 개념을 정리해 놓았습니다. 1) OCR(Oracle Cluster Registry) CRS(Cluster Ready Service)의 핵심 구성요소이며 클러스터의 구성resource들의 정보를 저장관리하는 디스크 공간. # 저장관리하는 구성resource 정보 - Cluster를 구성하는 서버노드 list - Cluster Database Instance(SID)와 서버 노드간 node 매핑정보 - CRS Application resource profi.. 2020. 7. 15.
"Begin Backup" 명령을 사용한 백업복원에서 Archive 파일이 필요한 이유. 1. 사전 용어 본문을 읽기전에 본문에서 표현된 "정합성이 깨졌다","손상되었다." 라는 뜻은 아래 내용과 같다. 오라클의 블럭단위 : 8KB OS의 블럭단위 : 4KB # 오라클의 Datafile을 OS의 cp 명령으로 원하는 장소에 복사하는 상황이 있다 가정하자. [1] OS에서 cp명령으로 Oracle datafile을 원하는 특정장소에 복사를 수행하려한다. [2] cp 명령이 수행될때 OS의 블럭단위는 4KB이기 때문에 오라클의 Datafile을 cp할때, 4KB씩 복사할것이다. [3] cp 명령이 수행되며 특정 A라는 Oracle 8KB짜리 블럭을 복사한다 가정한다. [4] A라는 Oracle 8KB짜리 블럭이 OS에 의해 4KB로 쪼개져 전체 4KB블럭 두개중(4KB*2=8KB) 앞에 하나의 .. 2020. 6. 30.
08 PL/SQL 함수 호출 부하 해소방안 08 PL/SQL 함수 호출 부하 해소방안 # 함수 사용 적정시기 - 소량의 데이터 조회시 사용 - 대량의 데이서 조회시 부분범위 처리가 가능한 상황에서 제한적으로 사용 - 조인 또는 스칼라 서브쿼리 형태로 변환 - 최후의 방법으로 함수를 쓰되 호출횟수를 최소화 할수 있는 방법 강구 # 함수 호출 부하방안 - 페이지처리(소량의 데이터), 부분범위 처리 활용 - DECODE함수 Case문으로 변환 - 뷰 머지 방지를 통한 함수 호출 최소화 - 스칼라 서브쿼리 캐싱효과를 이용한 함수 호출 최소화 - Deterministic 함수의 캐싱효과 활용 - 복잡한 함수로직을 풀어 SQL로 구현 1) 페이지처리(소량의 데이터), 부분범위 처리 활용 필요한 데이터를 다 만든뒤에 함수를 마지막에 사용. 만약 부분범위처리가.. 2020. 4. 12.
07 PL/SQL 함수의 특징과 성능부하 07 PL/SQL 함수의 특징과 성능부하 1) PL/SQL 함수의 특징 - PL/SQL도 JAVA처럼 인터프리터 언어이기 때문에 Native 코드로 완전 컴파일된 내장함수에 비해 느리다. - 작성한 PL/SQL 함수 실행시 매번 SQL 실행엔진과 PL/SQL 가상머신 사이에 컨텍스트 스위칭이 일어난다. CPU가 여러개 작업을 수행할때 하나의 작업을 마치고 다음작업을 수행하는것이 아니라 여러개의 작업을 동시에 돌아가며 수행하고, 다른 작업을 수행할 때 기존 CPU가 처리하던 프로세스의 수행내용을 백업하기도하고, 다시 CPU가 다른 프로세스를 처리할 때 해당프로세스에서 백업했던 수행내용을 불러오는 작업을 수행하는데 이를 컨텍스트 스위칭이라 한다. 2) Recursive Call을 포함하지 않는 함수의 성능부.. 2020. 4. 12.
06 페이지 처리의 중요성 06 페이지 처리의 중요성 # Database서버에 직접 연결되어 있는 클라이언트 서버(Orange, Toad, Client Tool 등..)에서는 한번 오픈한 커서를 닫지 않고, 사용자 이벤트(스크롤 내려 다음행 보기 같은..)발생시 결과집합을 Array size 만큼 Fetch 할수 있는 기능이 있다. # 웹 어플리케이션 환경에서는 데이터베이스와 연결을 지속적으로 하지 않기 때문에 커서를 계속 열어 놓고 Fetch를 할수 가 없다. 즉, 시용자가 다음 페이지를 요청하거나 스크롤 바를 내릴 때마다 개별적인 SQL문을 수행하는 방식으로 페이지 처리를 구현해야 한다. 그러다보니 페이지 처리구현 방식이 자주 이슈가되곤 한다. # 하기 코드 해설 및 개선 방안 >> 각 로우의 데이터를 계속 Fetch 하다가 .. 2020. 4. 12.
05 Fetch Call 최소화 05 Fetch Call 최소화 1) 부분범위처리 원리 # 1억건의 테이블 조회 - 쿼리툴에서 ( sql developer, Orange, Toad 등등 ) select 명령으로 1억건의 테이블 조회시 엄첨 빠르게 나온다.# 1억건의 테이블 조회가 빠르게 수행되는 이유 - Fetch size 만큼 일단 사용자에게 출력해주고 ( Fetch size가 1000이라면 쿼리툴에 일단 상위 1000 line만 출력됨 ) ,사용자가 Fetch call을 유발하는 행동 ( 마우스 스크롤을 하여, 1000 line 이후 라인을 보려는 행동 )을 하면 다음 Fetch size 만큼 일단 사용자에게 출력해주기 때문에 빠르다. 즉 Fetch size만큼씩만 사용자에게 우선적으로 보여주고 전체 요청내용을 바로 보여주지 않기 .. 2020. 4. 12.
04 Array Processing 활용 04 Array Processing 활용 # Array Processing 기능을 사용하면 한번의 SQL수행으로 다량의 로우를 insert/update/delete 할수 있다. 이를 통해 Network를 통한 데이터베이스 Call을 감소시켜 SQL수행시간과 CPU 사용량을 줄일 수 가 있다. # 예시상황 : "03 데이터베이스 Call이 성능에 미치는 영향"에 있는 예시상황 1) 3만건인 월요금납부실적 테이블에서 각로우를 fetch하여 읽은 다음 조건에 맞게끔 납입방법별_월요금집계 테이블에 중복삽입 2) stmt1.setFetchSize(1000); 구문을 통해 월요금납부실적 테이블을 fetch 할때 1000건씩 fetch 3) select시 fetch call : 30 insert시 execute ca.. 2020. 4. 12.
03 데이터베이스 Call이 성능에 미치는 영향 03 데이터베이스 Call이 성능에 미치는 영향 # 예시상황 세금납부에 대한 서비스중 하기의 테이블이 있다. '월요금납부_실적' 테이블은 고객별로 하나의 례코드로 입력 '납입방법별_월요금집계' - 닙입방법코드별로 하나의 례코드로 입력 기간계(OLTP)와 정보계(DW)서비스에 서는 각각 아래와 같은 방법으로 서비스를 운영한다. 기간계 시스템에서는 주로 고객별로 조회 >> 월요금납부_실적 테이블을 주로 모델링하여 사용 정보계 시스템에서는 주로 납입방법별로 조회 >> 납입방법별_월요금집계 테이블을 주로 모델링하여 사용각서비스의 데이터를 공유하거나, 기간계에 입력된 데이터를 정보계에 데이터 Migration을 할 때 ETL( 추출, 변환, 적제 ) 배치프로그램을 사용하여 서로 다른 테이블 모델링에 데이터를 넘긴.. 2020. 4. 12.
02 User Call VS Recursive Call 02 User Call VS Recursive Call # 정의 1) User Call : OCI(Oracle Call Interface)를 통해 외부로부터 들어오는 Call 2) Recursive Call : 오라클 내부에서 발생하는 Call, - SQL파싱과 최적화 과정에서 발생하는 Data Dictionary 조회, - PL/SQL로 작성된 사용자 정의 함수 , Procedure , Trigger로 인한 SQL수행 # 특징 1) User Call * User Call 발생 빈도를 결정하는 요소들 * 개발자의 기술 * 프레임워크 내에 Array processing을 지원유무 * 설계 표준 가이드 * 사용자 정의 함수/프로시저에 대한 무조건적인 제약 * 모듈이 지나치게 단위로 구성되어 SQL이 건건이 .. 2020. 4. 12.
01 Call 통계, 쿼리별 Parse, Execute, Fetch Call 발생 유형 01 Call 통계 1) Parse Call : 커서를 파싱하는 과정( 실행계획을 생성하거나, 찾는 과정 )을 수행한 횟수 2) Execute Call : 커서를 실행하는 과정을 수행한 횟수 3) Fetch Call : select문에서 실제 레코드를 읽어 사용자가 요구한 결과집합을 출력한 횟수# select 문일 때 Execute Call 단계에서는 커서만 오픈하고, 실제 데이터를 처리하는 과정은 모두 Fetch 단계에서 일어난다. # group by 문장은 Fetch 지점에서 처리가 일어남 # Fetch Call이 발생하지 않는 DML >> insert, update, delete, merge # insert .. select 문장은 클라이언트로부터 받은 명령에 의해 명시적인 Fetch Call이 발.. 2020. 4. 12.
PostgreSQL Install script ( 9.4 ~ 12) PostgreSQL설치 스크립트이다. 설치 가능 버전은 9.4 ~ 12 1. 본스크립트 장점 1) 서버의 물리메모리 값에 따라 하기 Database 관련 설정파라미터들이 권장값으로 자동 설정이 되게끔 구현 - shared_buffers : 물리메모리 / 4 - maintenace_work_mem : 물리메모리 / 16 - work_mem : ( 물리메모리 - ( 물리메모리 / 4 ) - ( 물리메모리 / 16 ) ) / 접속자수 보다 작은 2의 승수 * shared_buffers : 메모리에 데이터들을 공유할수 있는 영역의 크기 * maintenace_work_mem : vacuum 과 같은 유지관리에 필요할 명령 수행시 사용될수 있는 메모리 영역의 크기 * work_mem : 하나의 유저프로세스가 갖는.. 2020. 3. 27.
Hash algorithm ( 해시 알고리즘 ) SQLP를 공부하며 Hash algorithm에 대한 이해를 기본 바탕으로 알고 있어야 공부를 하기 쉬웠었고, 그러한 Hash algorithm을 쉽고, 꼼꼼하게 설명해보고자 글을 작성하였다. # Hash algorithm은 무엇인가? Hash 알고리즘은 데이터들을 메모리에 저장할 때 메모리의 어느위치에 저장할지, 데이터의 저장위치를 지정할 때 사용되는 기법이며 오라클 내부에서 데이터 저장이나, 처리시 수행되는 여러 프로세스나, 기법에서 사용이 되고있다. 그리고 오라클에서 Hash algorithm이 사용되는 여러 프로세스나 기법은 아래와 같다.1. Library cache라는 메모리 영역에 SQL커서(SQL 실행계획, 쿼리가 담겨있는 정보단위)를 저장할 때 2. 디스크에 있는 데이터를 Data buff.. 2020. 3. 27.