분류 전체보기
- 포트폴리오 2025.06.24
- 포트폴리오 2025.06.23
- ebms 서버 구성도 2025.06.05
- 배너관련정보 2025.01.31
- 파일테스트 2025.01.17
- JMeter 웹서버 부하테스트 2024.05.22
- 파일 첨부 2024.05.22
- 성능을 고려한 SQL 작성비법 2024.04.23
- SQLP 학습정리 2024.03.06
- 셧다운 2024.01.25
포트폴리오
포트폴리오
ebms 서버 구성도
배너관련정보
배너정보













파일테스트
JMeter 웹서버 부하테스트
https://lurutia.tistory.com/859
JMeter 웹서버 부하테스트
JMeter란 부하 테스트, 기능 동작과 성능을 측정하기 위해 제작된 JAVA 어플리케이션 오픈소스 소프트웨어입니다. JMeter는 정적 및 동적 리소스, 웹 동적 애플리케이션에서 성능을 테스트하는 데 사
lurutia.tistory.com
'기타 학습' 카테고리의 다른 글
| ebms 서버 구성도 (0) | 2025.06.05 |
|---|---|
| 파일 첨부 (0) | 2024.05.22 |
| 셧다운 (0) | 2024.01.25 |
| 멘딕스 강의 (0) | 2023.11.22 |
| 멘딕스 1차 시험정보 (0) | 2023.11.21 |
파일 첨부
'기타 학습' 카테고리의 다른 글
| ebms 서버 구성도 (0) | 2025.06.05 |
|---|---|
| JMeter 웹서버 부하테스트 (0) | 2024.05.22 |
| 셧다운 (0) | 2024.01.25 |
| 멘딕스 강의 (0) | 2023.11.22 |
| 멘딕스 1차 시험정보 (0) | 2023.11.21 |
성능을 고려한 SQL 작성비법
안녕하세요.
멀티캠퍼스 과정운영자 김현아입니다.
차주 [Live] 성능을 고려한 SQL 작성비법 4.22(월)~4.23(화) 실제 비대면 회의 번호 안내 드립니다.
구분
하석재 강사님
sjha72@gmail.com
control-o 쓰기 enter control-X
oracle 계정
ora_sql_test
강의진행 순서
1.RDBMS의 기초
2.도커기반 오라클 설치 및 예제설치
3.오라클 옵티마이저 이해
4.인덱스
5.조인
6.서브쿼리
7.트랜잭션
8.GROUP BY/ROLLUP/CUBE
9.분석함수
10.페이징 및 SQL 개발 가이드
상세내용
강의정보
URL : https://zoom.us
강의 회의번호 : 840 7270 6872 / pw : 1234
※ ZOOM 계정이 없는 경우 , 사전 가입 부탁드립니다
1) 로그인 후 상단 참여하기 클릭 (ZOOM 계정이 없으시면, 사전 가입 부탁드립니다.)
2) 회의참가 : 840 7270 6872 입력 후 참가 클릭
3) Zoom Meetings 열기 클릭
4) 회의 암호 입력 : 1234
5) 본인 성함으로 미팅 참여
감사합니다.
김현아 드림
• TEL | 02-3429-5177 (평일 09:00~18:00)
• E-mail| ha8.kim@partner.multicampus.com
02-3429-5740
하석재강사
출석 하루 세번
오전 점심 오후
sjha72@gmail.com
하석재 강사님 2HCUBE
성능을 고려한 SQL 작성비법
마이그레이션 : DB 이사 오라클 -> 다른 db로 이사중인 추세임
cpu 코어수로 가격계산
티베로, 코스트디베로
클로드
SQL 옵티마이저의 역할
1.쿼리 최적화
2.비용기반
RBO Rule-Based Optimization(RBO)
-
CBO Cost-Based Optimization(CBO) [최근에는 CBO 기반으로 가고있음]
-
SQL 옵티마이저의 역할
1. 쿼리 최적화
2. 비용 기반 최적화
3. 통계 정보 활용
4. 실행 계획 캐싱
5. 동적 최적화
강사의 블로그
https://blog.naver.com/ryu1hwan/221704174010
RDB : 관계형 데이터베이스
- 70년대 초반 나왔지만 80년대에 주류가 되었음
테이블기반(Table based)으로 데이터 저장하는 시스템
-
RDB : 테이블 기반의 데이터베이스
데이터를 CRUD 하는 시스템
DBMS는 다양한 종류의 인덱스지원
- B-tree/Hash/R-tree/Full-text index/..
- R-tree 거리기반
- 가장 기본되는 인덱스는 B-tree (정확하게는 b+트리)
B-tree/ Hash
- 데이터의 중복을 정규화(Normalization)를 통해 중복성제거
- 보통 1,2,3, BC(Boyce-codd) 정규화(Normal Form)까지 적용한 것을 정규화(Normal)
정규화 [쪼개기] 보통테이블이 큰 테이블에서 여러개의 작은 테이블로 나눠짐
제 1정규형
-
제 2정규형
-
제 3정규형
-
제 4정규형
-
제 5정규형
-
인덱스(B Tree ) B+
- 보통 B+트리를 말함
리프
인덱스(B treee)
- 보통 B+트리를 말함(인덱스와 데이터 저장소 분리)
- 인덱스파일만 별도로 구성하고 데이터 파일은 참조형태로
- 바이너리 검색(Binary Search)의 변형
인덱스(B treee)
- 약점
- 연속적인 검색(예.Range search)에 약점
- 연결 리스트(Linked list)
- Cartesian Product(cross join)
- 두릴레이션을그냥곱해서만들어진조인의형태
- Equi-Join(Theta Join)
- Cartesian Product를통해만들어진릴레이션중실제있는것만필터링한조인
- Non-equi join
- Equi-join의여집합
- Natural Join
- 알아서조인(컬럼을지정하지않음)
- Self Join
- 동일한테이블을기준으로조인
데이터의 추가패턴에 따라 트리의 모양이 skew 발생
self balanced tree
red back tree
인덱스를사용하는경우에도느려지는경우는?
- 저장되는데이터가많아지면 B-tree의 Depth(높이)가
늘어나게되서검색속도가느려짐
- 해결책 -> 파티셔닝 / 샤딩
외래키에 대해서는 인덱스가 안달림
외래키
- 참조무결성 제약조건(RI : Referential Integrity)
- 외래키로 연결되어 있는 테이블의 경우에는 외래키로 연결 테이블을 검색하면 데이터가 존재해야 함
- 삽입/삭제에 순서가 있어야 함
- 해당 순서를 어기면 에러발생
- 원 레코드를 삭제하려면 참조하는 레코드를 먼저 삭제해야 가능
- 외래키를 가지는 레코를 추가하려면 연결테이블에 레코드를 먼저 추가해야함
- (Inner) Join
- 드리이빙(기준) 테이블/ 드리븐(참조) 테이블의 널 값을 허용하지 않음
- A(기준테이블) Join B(드리븐테이블)
- Outer Join
-
조인(JOIN)
E-R(개념-관계) 모델링
스키마 생성(p.18)
…
select * from tab; 으로 테이블/뷰 리스트 확인
샘플 데이터 생성
set linesize 1000;
set pagesize 200;
set timing on;
column ITM_ID format a10
column ITM_NM format a20
column ITM_TP format a10
column ITM_PRC format a10
select * from M_ITM; 로 샘플테이블 레코드 확인
기본적으로 모든 관계는 M:N(다대다) 관계임
Entity - Relationship - Entity 3개의 테이블이 필요함
엔티티의 개수를 그대로 논리/물리 모델링화 하면 테이블의 개수가 많아짐
M:N -> 1:N / N:1 -> 1:1의 순서로 축소
1:N의 관계는 테이블 2개로 축소가능(외래키 연결)
1:1 관계는 테이블의 컬럼추가로 해결가능
논리모델링의 엔티티/릴레이션쉽/컬럼명은 한글명 지정
물리모델링은 영어로 모두 변환(Grocery)
GraphDB
CBO (Cost-based Optimizer)
- IO회수, CPU Time, 메모리 사용량
- 테이블의 통계 정보기간
- 통계값이 잘못되면 엉뚱한 결과가 나오기도 함
옵티마이저(오라클 vs MySQL)
cf. 자동/수동 미션-자동차
explain plan for select * from T_ORD where ORD_SEQ=4;
select * from table(DBMS_XPLAN.DISPLAY());
루프블록
브랜치블록
리프블록
- Parent(부모) / Child(자식) / Sibling(형제/자매)
- 일반적으로
- 자식이 부모보다 먼저 실행
- 동일한 레벨(Sibling)에서는 순서대로(형부터) 실행
- index unique scan
- tble access by index rowid
- GATHER_PLAN_STATISTIC(SQL힌트) 또는 세션에 Trace
- /*+ GATHER_PLAN_STATISTICS */
- 운영하는 상황에서는 안 들어가도록 주의 필요함
- DBMS_XPLAN.DISPLAY_CURSOR
- 다음 뷰에 SELECT 권한 필요
- V_$SQL
- V_$SQL_PLAN_STATISTICS_ALL
- V_$SQL_PLAN
- V_$SESSION
SELECT * /*+ GATHER_PLAN_STATISTICS */ FROM T_ORD T1,M_CUS T2
WHERE T1.CUS_ID = T2.CUS_ID
AND T1.ORD_DT >= TO_DATE('20170101','YYYYMMDD') AND T1.ORD_DT < TO_DATE('20170201','YYYYMMDD') AND T2.CUS_GD = 'A';
- ID: 실행계획의 오퍼레이션 ID
- Operation: 해당 단계에 수행한 작업 내용
- Name: 해당 단계에 작업을 수행한 대상 오브젝트(테이블 또는 인덱스)
- Starts:해단 단계를 수행한 회수
- E-Rows:해당 단계의 예상 데이터 건수
- A-Rows:해당 단계의 실제 데이터 건수
- A-Time:해당 단계까지 수행된 실제 시간(누적)
- 복잡한 실행계획이나 병렬 쿼리에서는 부정확한 경우 있슴
- Buffers:해당 단계까지 메모리 버퍼에서 읽은 블록 수(논리적 IO회수, 누적)
- Reads:해당 단계까지 디스크에서 읽은 블록 수(물리적 IO외수, 누적) -적을수록 좋음
- 0Mem, 1Mem, Used-Mem:SQL처리를 위해 사용한 메모리 수치
select * from M_CUS join T_ORD on M_CUS.CUS_ID = T_ORD.CUS_ID where M_CUS.CUS_ID='CUS_0001' and rownum <=1;
인덱스 정책
- 원칙적으로 PK(기본키)로 검색
- 쿼리 내용에 PK조건을 명시
- 인덱스가 안달린 컬럼을 추가해야 하는 경우
- RDBMS에서는
- 한 번(인덱스는 안다는 게 맞음)
- 여러 번(인덱스를 달아야 함)
- 어느 컬럼을 선택? 인덱스의 depth(높이)의 작은
- 인덱스를 여러개를 유지?
- 대부분의 NoSQL에서는
- PK 인덱스만 지원
조인(JOIN)
(Inner)
보안에서의 해시
- 해쉬의 충돌확률을 낮춤(거의 없게 만듬)
- 보안에서는 일종의 지문 개념으로 사용
- 입력이 다르면 해시값이 다르다
- NLJ(Nested Loop Join)
- 가장기본적인조인알고리즘
- 두테이블을중첩루프로순차스캔하여조인조건을만족하는행을찾음
- 조인조건에인덱스가있는경우에효과적
- 대용량데이터처리에는부적합
- SMJ(Sort-Merge Join) aka. MERGE JOIN
- 조인대상테이블이미리정렬되어있다는전제하에동작
- 정렬된데이터를효율적으로탐색하여조인수행
- 메모리사용량이적어대용량데이터에적합
- 사전정렬비용이들어부담이될수있음
- HJ(Hash Join)
- 작은테이블을메모리의해시테이블로구성하여빠른조인처리
- 조인조건에인덱스가없어도효과적
- 해시테이블구축을위해메모리사용량이많아지는단점이있음
엑사데이터
- 오라클 엑사데이터
- 램이 16기가 인메모리 처리
- 성능
- 해시조인 > 소트-머지조인 > 네스티드루프조인
- 메모리사용량
- 네스티드루프조인 < 소트-머지조인 < 해시조인
- 인덱스의존성
- 네스티드루프조인 > 소트-머지조인 = 해시조인
- 대용량데이터처리적합성
- 소트-머지조인 > 해시조인 > 네스티드루프조인
- 조인대상테이블의크기, 인덱스유무, 메모리용량등을고려하여최적의조인
알고리즘을선택
select /*+ GATHER_PLAN_STATISTICS LEADING(T1) USE_NL (T2) */
T1.RGN_ID, T1.CUS_ID, T1.CUS_NM
,T2.ORD_DT, T2.ORD_ST, T2.ORD_AMT
FROM M_CUS T1, T_ORD T2
WHERE T1.CUS_ID = T2.CUS_ID;
1xxbqrdhdr25f
cmcr9vzc47nmx
select T1.SQL_ID, T1.CHILD_NUMBER, T1.SQL_TEXT from V$SQL T1 where T1.SQL_TEXT like '%GATHER_PLAN_STATISTICS%' order by T1.LAST_ACTIVE_TIME desc;
fmf80mzwg7b70
select * from TABLE(DBMS_XPLAN.DISPLAY('1xxbqrdhdr25f'));
select * from TABLE(DBMS_XPLAN.DISPLAY_CURSOR('1xxbqrdhdr25f',0,'ALLSTATS LAST'));
select * from TABLE(DBMS_XPLAN.DISPLAY_CURSOR('14hmhd1j1n2zu',0,'ALLSTATS LAST'));
SELECT /*+ GATHER_PLAN_STATISTICS LEADING(T1) USE_NL(T2) */
T1.RGN_ID, T1.CUS_ID, T1.CUS_NM
,T2.ORD_DT
,T2.ORD_ST
,T2.ORD_AMT
FROM M_CUS T1,T_ORD T2
WHERE T1.CUS_ID = T2.CUS_ID;
select * from TABLE(DBMS_XPLAN.DISPLAY_CURSOR('fmf80mzwg7b70',0,'ALLSTATS LAST'));
CREATE INDEX SAMPLE_INDEX ON T_ORD(CUS_ID);
create index sample_index on T_ORD(CUS_ID);
- 실제 실행계획확인
select * from TABLE(DBMS_XPLAN.DISPLAY_CURSOR('cmcr9vzc47nmx',0,'ALLSTATS LAST'));
해시조인
- HJ(Hash Join)
- 작은테이블을메모리의해시테이블로구성하여빠른조인처리
- 조인조건에인덱스가없어도효과적
- 해시테이블구축을위해메모리사용량이많아지는단점이있음
조인과 성능(p.198~230)
- Driven 테이블 조인 컬럼이 인덱스가 꼭필요하다
- /* LEADING(1) USE_NL INDEX(T2_X_T_ORD_JOIN_T)*/
- A join B = B join A 결과는 동일하지만 성능은 다르다.
- 조인회수를 줄이자
- Driving 테이블이 레코드가 작을수록 유리
- like 조건을 사용하는 경우
드라이빙 드리븐
ㅁ NL 조인
Like 검색
- 부분매칭
- exact (=) 검색 매칭의 경우 B+트리와 같은 인덱스를 이용해서 찾아내면 검색 종료
- 전체 데이터의 일부 검색
- 조건에 맞는 레코드를 찾아도 검색이 종료되지 않고 계속 전체검색을 진행
- 전체 데이터를 조건에 맞는지 확인해야 함
- 여러 번 이상의 조인
- 다대다 관계는 무조건 2번의 조인 필요
- DBA 관계를 없애라
ㅁ Merge 조인
- 대량의 데이터
- /* FULL(T2) */ 풀스캔
ㅁ Hash 조인
- 충돌문제 개수제한 존재(주로 메모리 대상)
- 해쉬검색은 한번에 검색가능 속도가 빠르다
-
RDB는 인덱스 잘알고 조인잘알면 80%는 파악함
보통은 b+트리를 찾다가 찾아내면 검색종료
서브쿼리
대한민국 1년 예산 약 656조 6000억 원이며
1. COUNTRY 테이블 -> 쿼리의 실행 결과 code 'KOR' -> city 테이블
마이그레이션 : 오라클에서 다른 db로 가는 추세임
MySQL의 족쇄
- 메모리 엔진(굉장히 빨라야 함, 읽기는 빠르나 쓰기는 느리고, 락도 테이블락)
엑사 데이터
- 인메모리 db가 나오는 추세
-서브 쿼리 최적화
- in/exists 구현이 느리고 구림
mysql 서브쿼리 in exists
OLTP(실시간/집계)
- GROUP BY / SUM() / COUNT()
OLAP(분석)
- SUM() ? + OVER
DRILL DOWN ROLLUP
ROLLUP(월별)
-
ROLLUP VS DRILL-DOWN
https://bommbom.tistory.com/entry/오라클-힌트hint-종류-및-사용법
오라클 힌트(hint) 종류 및 사용법
이번 포스팅에서는 오라클 힌트 종류 및 사용법에 대해 알아보겠습니다. 힌트(Hint)는 쉽게 말하면 dbms에게 SQL를 최적화를 위해 힌트를 주는 것입니다. 데이터베이스관리자(DBA)나 개발자가 오라
bommbom.tistory.com
[SQL 튜닝] 오라클 힌트(hint)의 개념/ 사용법/자주쓰이는힌트 정리 (tistory.com)
[SQL 튜닝] 오라클 힌트(hint)의 개념/ 사용법/자주쓰이는힌트 정리
[SQL 튜닝] 오라클 힌트(hint)의 개념/ 사용법 정리 💡 힌트(Oracle Hint)란 무엇일까? 힌트란 SQL 튜닝의 핵심 부분으로 일종의 지시 구문이다. 즉, 오라클 옵티마이저(Optimizer)에게 SQL문 실행을 위한 데
devuna.tistory.com
블로그 위치
SQL BOOSTER 책 소개 및 전체스크립트 : 네이버 블로그 (naver.com)
SQL BOOSTER 책 소개 및 전체스크립트
프로젝트 성공을 위한 SQL 필독서 개발자에게 필요한 오라클 SQL 실전서 SQL BOOSTER 를 ...
blog.naver.com
Sort Merge JOIN -> NL 조인보다 왜 빠른가?
Sort Merge Join
랜덤 I/O -> 순차I/O 변환(이미 데이터 정렬 후)
예측이 잘되서 버퍼캐시의 효율(hit ratio)가 높아지는 효과
B tree가 제일 skew가 발생하도록 하려면?
- 정렬하고 난 다음 insert 하면 됨
- self balanced tree가 아님 (LR, LL, RR, RL회전에 비용)
순수한 B-TREE 오라클에 들어있는 B-TREE인지 확인
index skew
'DataBase > Oracle' 카테고리의 다른 글
| SQLP 학습정리 (0) | 2024.03.06 |
|---|---|
| [Oracle] 계층형 쿼리 Hierarchiacal Query ( + LISTAGG() 함수) (0) | 2023.12.18 |
| 성능을 향상 쿼리 튜닝 (0) | 2023.09.26 |
| 성능 쿼리 작성 (0) | 2023.09.25 |
| [ERWIN][ORACLE] erwin 연동해서 오라클 테이블 만들기 (0) | 2023.08.10 |
SQLP 학습정리
식별자 관계로만 설정할 경우의 문제점
단지 식별자관계와 비식별자 관계에 대한 설정을 고려하지않은 것이 개발의 복잡성을 증가시키는 요인이 될까?
반정규화된 테이블의 성능저하 사례
1차 정규화를 적용하면
함수적 종속성(functional Dependency)에 근거한 정규화 수행 필요
함수종속성
결정자(DETERMINANT) -> 종속자(DEPENDENT)
반정규화와 성능저하
반정규화의 정의
기본적으로 정규화는 입력/수정/삭제에 대한 성능을 향상시킬 뿐만 아니라 조회에 대해서도 성능을 향상시키는 역할을 한다. 그러나 정규화만을 수행하면 엔터티의 개수가증가하고 관계가 많아져 일부 여러개의 조인에 걸려야만 데이터를
가져오는 경우가 있다. 이러한 경우 업무적으로 조회에 대한처리성능이 중요하다고 판단될때 부분적으로 반정규화를 고려하게 되는 것이다. 또한 정규화의 함수적 종속관계는 위반하지 않지만 데이터의 중복성을 증가시켜야만
데이터 조회의 성능을 향상시키는 경우가 있다. 이러한 경우 반정규화를 통해서 성능을 향상시킬 수 있게 되는 것이다.
반정규화의 기법
넓은 의미에서 반정규화를 고려할 때 성능을 향사시키기 위한 반정규화는 여러가지가 나타날 수 있다.
테이블 반정규화는
테이블병합
1:1 관계 테이블병합 : 1:1관계를 통합하여 성능향상
1:M 관계 테이블병합 : 1:M관계 통합하여 성능향상
슈퍼/서브타입 테이블병합 : 슈퍼/서브 관계를 통합하여 성능향상
테이블분할 수직분할 : 칼럼단위의 테이블을 디스크 I/O를 분산처리 하기 위해 테이블을 1:1로 분리하여 성능향상(트랜잭션의 처리되는 유형을 파악이 선행되어야 함)
수평분할 : 로우 단위로 집중 발생되는 트랜잭션을 분석하여 디스크 I/O
SQL 최적화 기본 원리
1.NL JOIN
- NL JOIN은 프로그래밍에서 사용하는 중첩된 반복문과 유사항 방법으로 조인은 수행한다.
B-트리 인덱스 리프 블록
2.Sort Merge JOIN
- Sort Merge Join 은 조인 칼럼을 기준으로 데이터를 정렬하여 조인을 수행한다.
3.Hash Join
- Hash Join은 해슁 기법을 이용하여 조인을 수행한다.조인을 수행할 테이블의 조인칼럼을 기준으로 해쉬힘수를 수행하여 서로 동일한 해쉬값을 갖는 것들 사이에서 실제값이 같은지를 비교하면서조인을 수행한다.
데이터베이스 아키텍처
아키텍처 개관
Oracle 아키텍처 : 데이터베이스에 대한 정의가 조금씩 다르고 Oracle에서는 디스크에 저장된 데이터 집합(Datafile, Redo Log File, Control File)을 데이터베이스 라고 부른다. 그리고 SGA 공유 메모리 영역과
이를 액세스하는 프로세스 집합을 합쳐서 인스턴스라고 부른다.
프로세스 : SQL Server는 쓰레드 기반 아키텍처이므로 프로세스 대신 쓰레드라는 표현을 써야한다. SQL Server 뿐만 아니라 Oracle도 Windows 버전에선 쓰레드를 사용하지만, 프로세스와 일일이 구분하면서
설명하려면 복잡해지므로 특별히 쓰레드를 언급해야 할 경우가 아니라면 간단히 '프로세스'로 통칭하기로 한다. 잠시 후 표로써 정리해 보이겠지만, 주요 쓰레드의 역할은 Oracle 프로세스와 크게 다르지 ㅇ낳다.
프로세스는 서버 프로세스(Server Processes)와 백그라운드 프로세스(Background Processes)집합으로 나뉜다. 서버 프로세스는 전면에 나서 사용자가 던지는 각종 명령을 처리하고, 백그라운드 프로세스는
뒤에서 묵묵히 주어진 역할을 수행한다.
가. 서버 프로세스 : 서버프로세스는 사용자 프로세스와 통신하면서 사용자의 각종명령을 처리하며, SQL Server에선 Worker 쓰레드가 같은 역할을 담당한다.좀더 구체적으로 말해, SQL 파싱하고 필요하면 최적화를 수행하며,
커서를 열어 SQL를 실행하면서 블록을 읽고, 읽은 데이터를 정렬해서 클라이언트가 요청한 결과집합을 만들어 네트워크를 통해 전송하는 일련의 작업을 모두 서버 프로세스가 처리해준다. 스스로 처리하도록 구현되지 않은 기능,
이를테면 데이터 파일로부터 DB 버퍼 캐시로 블록을 적재하거나 Dirty블록을 캐시에서 밀어냄으로써 Free 블록을 확보하는일, 그리고 Redo로그 버퍼를 비우는 일등은 OS, I/O 서브시스템, 백그라운드 프로세스가 대신 처리하도록 시스템 Call을
통해 요청한다
클라이언트가 서버 프로세스와 연결하는 방식은 DBMS마다 다르지만 ORacle을 예로들면, 전용 서버 방식과 공유 서버 방식, 두가지가 있다
1)전용서버(Dedicated Server) 방식 : 1.연결요청(Listener) 2.프로세스 생성 및 연결 요청 상속 (Server) 3.Resend 패킷전송(사용자) 4.연결 후 작업 요청 (server) 5.처리 후 결과 전송
2)공유 서버(shared Server) 방식 : 공유 서버는 말 그대로 하나의 서버 프로세스를 여러 사요자 세션이 공유하는 방식으로서, 앞서 설명한 Connection Pooling 기법을 DBMS 내부에 구현해 놓은 것으로 생각하면 쉽다.
즉, 미리 여러개의 서버 프로세스를 띄어 놓고 이를 공유해서 반복 재사용한다.
1.연결요청 (Listener) 2.가용된 Dispatcher 포트번호 전송 3.연결 후 작업 요청 Dispatcher 4.요청등록 SGA(Request Queue) 5.요청접수 Server 6.결과등록 Reponse Queue 7.결과수령 Dispatcher 8.결과 전송하는
나.백그라운드 프로세스
System Monitor(SMON) :장애가 발생한 시스템을 재기동할 때 인스턴스 복구를 수행하고, 임시 세그먼트와 익스텐트를 모니터링한다
Process Monitor(PMON) : 이상이 생긴 프로세스가 사용하던 리소스를 복구한다.
Database Writers(DBWn) : 버퍼캐시에 있는 Dirty 버퍼를 데이터 파일에 기록한다.
Log Writer(LGWR) : 로그 버퍼 엔트리를 Redo 로그 파일에 기록한다.
Archiver (ARCn) : 꽉 찬 Redo 로그가 덮어 쓰여지기 전에 Archive 로그 디렉토리로 백업한다.
Chckpoint(CKPT) : Checkpoint 프로세스는 이전에 Checkpoint가 일어났던 마지막 시점 이후의 데이터베이스 변경 사항을 데이터파일로 기록하도록 트리거링하고, 기록이 완료되면 현재 어디까지 기록했는지를 컨트로 파일과 데이터 파일 헤더에 저장한다.
Recoverer(RECO) : 분산트랜잭션 과정에 발생한 문제를 해결한다.
'DataBase > Oracle' 카테고리의 다른 글
| 성능을 고려한 SQL 작성비법 (0) | 2024.04.23 |
|---|---|
| [Oracle] 계층형 쿼리 Hierarchiacal Query ( + LISTAGG() 함수) (0) | 2023.12.18 |
| 성능을 향상 쿼리 튜닝 (0) | 2023.09.26 |
| 성능 쿼리 작성 (0) | 2023.09.25 |
| [ERWIN][ORACLE] erwin 연동해서 오라클 테이블 만들기 (0) | 2023.08.10 |
셧다운
Option Explicit
Dim strComputer
strComputer = "."
'기본 Object 가져오기
Dim Shell : Set Shell = WScript.CreateObject("WScript.Shell")
Dim FSO : Set FSO = CreateObject("Scripting.FileSystemObject")
Dim objWMIService : Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Dim colMonitorCreateProcessesEvent : Set colMonitorCreateProcessesEvent = objWMIService.ExecNotificationQuery("select * from __InstanceCreationEvent within 1 where TargetInstance isa 'Win32_Process'" )
Dim colMonitorDeleteProcessesEvent : Set colMonitorDeleteProcessesEvent = objWMIService.ExecNotificationQuery("select * from __InstanceDeletionEvent within 1 where TargetInstance isa 'Win32_Process'" )
'CMD 윈도우 98에서도 적용 가능하게 COMSPEC으로 가져온다.
Dim COMSPEC : COMSPEC = Shell.ExpandEnvironmentStrings("%comspec%")
'메인 함수 실행
Call MainFunction()
Sub MainFunction
'중복 실행 방지 코드 - vbs 파일명을 입력합니다.
If( IsExistSameVBS( "ProcessEvent.vbs" ) ) Then
Wscript.Quit
End If
Dim strProcessName
strProcessName = "msedge.exe"
Do While True
Call ProcessCreatedEvent(strProcessName)
Wscript.Sleep( 100 )
Loop
Wscript.Quit
End Sub
Sub ProcessCreatedEvent(strProcessName)
' Terminate a Process
Dim colProcessList, objProcess
Set colProcessList = objWMIService.ExecQuery("Select * from Win32_Process Where Name = '"+strProcessName+"'")
For Each objProcess in colProcessList
Dim objLastestProcess : Set objLastestProcess = colMonitorDeleteProcessesEvent.NextEvent
'If( StrComp(Lcase(objLastestProcess.TargetInstance.Name), Lcase(strMonitorProcessName), 1) = 0 ) Then
'프로세스 종료
objProcess.Terminate()
' End If
Next
End Sub
Function IsExistSameVBS( strFileName )
IsExistSameVBS = False
Dim nSameVBSCount : nSameVBSCount = 0
Dim colProcessList, objProcess
Set colProcessList = objWMIService.ExecQuery("SELECT * FROM Win32_Process WHERE Name = 'wscript.exe' OR Name = 'cscript.exe'")
For Each objProcess in colProcessList
If InStr( Lcase(objProcess.CommandLine), Lcase(strFileName) ) Then
nSameVBSCount = nSameVBSCount + 1
End If
Next
If( nSameVBSCount > 1 ) Then
IsExistSameVBS = True
Wscript.echo strFileName & " 은 이미 실행중인 스크립트 입니다."
End If
End Function
'기타 학습' 카테고리의 다른 글
| ebms 서버 구성도 (0) | 2025.06.05 |
|---|---|
| JMeter 웹서버 부하테스트 (0) | 2024.05.22 |
| 파일 첨부 (0) | 2024.05.22 |
| 멘딕스 강의 (0) | 2023.11.22 |
| 멘딕스 1차 시험정보 (0) | 2023.11.21 |