Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- Serial GC
- 사가 패턴
- The law of Demeter
- JPA
- Transaction Pattern
- 디자인패턴
- 스레드
- Spring Boot Actuator
- 키클락
- 생산자 소비자 패턴
- saga pattern
- 멀티스레드
- 스프링 배치
- 디자인 패턴
- 타입스크립트
- zipkin
- 배치
- Resilinece4j
- java 정렬
- spring batch
- MSA
- 알고리즘
- Java
- Spring Cloud Netfilx Eureka
- spring cloud
- thread
- Parallel Old GC
- 체인 패턴
- Action Pattern
- TypeScript
Archives
- Today
- Total
PSD( Private-Self-Development )
저장 프로시저(Stored Procedure) 란? 본문
저장 프로시저?
쿼리문을 메서드 형식으로 만들고 어떠한 동작을 일괄적으로 처리하도록 각 DBMS 에서 지원하는 기능
여러 컬럼과 테이블을 조인하고 조회 조건을 거는 등
이러한 긴 쿼리문을 그때그때 사용하는 것이 아닌, 프로시저 로 저장 해 놓고 이를 호출하는 것이 효율적이다.
장점
- 하나의 요청으로 여러 sql 문 실행 가능( 네트워크 소요시간 최소화 )
- DB 와 백엔드 를 구분해 개발 할 수 있다.
- 성능 향상
- 저장 프로시저를 처음에 실행하면, 최적화, 컴파일 단계를 거쳐 그 결과가 캐시(메모리) 에 저장되고, 이후에 해당 저장 프로시저를 실행하면 캐시에서 데이터를 읽어와 성능 개선이 된다.
- 보안 강화
- 사용자 별로 테이블에 대한 접근 권한이 아닌, 프로시저에 접근 권한을 주는 방식으로 보안을 강화 할 수 있다.
단점
- 처리 성능이 낮다.(문자나 숫자 연산이 있을 경우)
- 디버깅이 어렵다.
- DB에 부담이 된다 또한 DB는 확장이 어렵다.
일반적인 SQL 문 실행 과 프로시저 실행의 동작 방식 비교
일반 SQL 문 실행
- 구문분석
- 해당 구문이 오류가 없는지 확인
- 개체 이름 확인
- 테이블 이 존재하는지, 테이블에 해당 컬럼이 존재하는지 확인
- 사용 권한 확인
- 최적화
- 가장 좋은 성능을 낼 수 있는 경로를 결정
- 컴파일 및 실행 계획 등록
- 최적화 결과를 바탕으로 컴파일 및 실행 계획을 메모리(캐시) 에 등록
- 컴파일 결과 실행
이후 동일 SQL(한 글자도 틀리지 않고 같아야 한다) 실행 시
- 메모리(캐시) 확인
- 메모리(캐시) 에서 실행 계획 추출
- 실행
프로시저 실행
- 개체 이름 확인
- 사용 권한 확인
- 최적화
- 컴파일 및 실행 계획 등록
- 컴파일 결과 실행
와 같이 첫 실행 시 구문 분석이 빠진 것( 프로시저 생성 시 확인 ) 말고는 동일하다.
이후 동일 SQL 실행 시에도 동일하다.
하지만 차이점이 존재하는데,
동일 쿼리임을 판단하는 기준이 다르다.
/* 일반 sql : 다 다르게 인식 */
SELECT * FROM TB WHERE NAME = 'A';
SELECT * FROM TB WHERE NAME = 'B';
SELECT * FROM TB WHERE NAME = 'C';
/* 프로시저 : 처음 한번을 이후는 동일하게 인식 */
EXEC TB_SELECT 'A';
EXEC TB_SELECT 'B';
EXEC TB_SELECT 'C';
이러한 특징으로 인해 처음 한번 을 제외하고는
성능 최적화가 이루어진다.
다만 최적화 단계를 처음 한번 만 수행하므로 성능 문제가 생긴다(인덱스 문제)는 단점이 있다.
즉 사용하는데 주의가 필요하다.
참조:
https://runcoding.tistory.com/31
https://devkingdom.tistory.com/323
'Backend > DB' 카테고리의 다른 글
[MYSQL] InnoDB VS MyISAM (0) | 2023.03.06 |
---|