[쿼리 개선] 대량 Insert 시 로직 개선

2021. 7. 27. 18:55· etc
반응형

안녕하세요.

 

오늘은 근무 중 기존에 존재하던 SMS 발송 로직이 대량건수에도 빠른 시간내에 작동하도록 개선한 사례를 말씀드리려고 합니다.

 

참고로 SMS 발송을 하기 위해 특정 테이블에 데이터를 Insert해야하는 방식이며, 문자 하나(수신자 하나) 당 하나의 데이터행이 Insert됩니다.

 

개발 환경 : Spring Framework, ibatis

 

Insert 쿼리 개선

(로직 설명) JAVA단에서 수신자 리스트에서 수신거부수신자는 제외 → 필터링한 리스트를 Insert

(변경 전) 수신거부 확인 및 Insert에서 반복이 너무 많아 느려짐

  1. 통합된 리스트를 리스트의 길이(수신자의 수)만큼 반복하며 수신거부인지 확인
  2. 수신거부대상자를 제외한 수신자 리스트 추출 완료
  3. 전 단계에서 추출한 리스트의 길이(수신자의 수) 만큼 반복하며 Insert

(변경 후)

  1. java단에서 수신자 리스트를 decode에 들어갈 파라미터 변수 직접 설정(전화번호 및 고객명)
  2. select decode(...) from dual ... 를 이용하여 데이터생성하고 수신거부리스트쿼리와 JOIN 및 INSERT ALL로 이 데이터컬럼들을 Insert (batch Insert 사용)

 

 

DECODE 사용 방법

if절 처럼 사용할 수 있는 Oracle 기능이다.

 

(쿼리)

select	decode(rownum, 1, '010-1234-5678', 2, '010-1111-1111', 3, '010-2222-2222') as phone
        ,decode(rownum, 1, '아무개', 2, '홍길동', 3, '철수') as name2 
from dual 
connect by level <= 3;

(결과)

 

 

 

 

 

INSERT 속도 개선을 위해 시도해봤던 방법들

  1. 수신거부리스트와 INSERT를 한 번에 판별 (INSERT ALL 이용) . 대신 수신자의 수만큼 JAVA단에서 반복 (batch Insert 사용) → 반복하다보면 쿼리 재호출 속도 느려짐
    + 쿼리를 반복할수록 왜 느려질까? 예상가는 이유 : 쓰레드, 커넥션풀, ibatis 설정 등의 로컬 설정 문제
  2. 쿼리 재호출을 막기 위해 1번 방법을 사용하고, 쿼리 안에 iterate를 넣어 쿼리 재호출 횟수를 줄여봄. → 여전히 느림

 

 

개인메모

로컬 이클립스에서 쿼리를 반복시키면, 속도가 점점느려진다.. 왜 그럴까?

추후에, 확인해보도록 하자.

반응형

'etc' 카테고리의 다른 글

IE(Internet Explorer) 에서 웹상에서 PDF 뷰어로 PDF 파일 바로 보기  (0) 2021.10.13
[etc] 솔루션에서 다른 테이블스페이스 접근 방식  (0) 2021.08.23
[소스 개선] 중복체크 시 로직 변경  (0) 2021.07.16
[서버 관리] Oracle 서버의 CPU가 급작스레 높아진 경우  (0) 2021.06.29
[오류 해결] Script5009:FormData가 정의되지 않았습니다  (0) 2021.06.23
'etc' 카테고리의 다른 글
  • IE(Internet Explorer) 에서 웹상에서 PDF 뷰어로 PDF 파일 바로 보기
  • [etc] 솔루션에서 다른 테이블스페이스 접근 방식
  • [소스 개선] 중복체크 시 로직 변경
  • [서버 관리] Oracle 서버의 CPU가 급작스레 높아진 경우
멍목
멍목
개발 관련 새롭게 알게 된 지식이나 좋은 정보들을 메모하는 공간입니다.
반응형
멍목
김멍목의 개발블로그
멍목
전체
오늘
어제
  • 분류 전체보기 (514)
    • BE (190)
      • Spring (21)
      • Java (141)
      • Kotlin (6)
      • JPA (22)
    • FE (33)
      • Javascript (16)
      • Typescript (0)
      • React (5)
      • Vue.js (9)
      • JSP & JSTL (3)
    • DB (32)
      • Oracle (22)
      • MongoDB (10)
    • Algorithm (195)
    • Linux (8)
    • Git (6)
    • etc (42)
    • ---------------------------.. (0)
    • 회계 (4)
      • 전산회계 2급 (4)
    • 잡동사니 (2)

블로그 메뉴

  • 홈
  • 관리

공지사항

인기 글

태그

  • 자기공부
  • 알고리즘 공부
  • 이펙티브 자바
  • 자바공부
  • 프로젝트로 배우는 Vue.js 3
  • 코테공부
  • JPA
  • 자기 공부
  • 알고리즘공부
  • 더 자바 Java 8
  • 자바 개발자를 위한 코틀린 입문
  • JPA 공부
  • MongoDB with Node.js
  • Java to Kotlin
  • vue3 공부
  • 자기 개발
  • 자바 공부
  • 더 자바 애플리케이션을 테스트하는 다양한 방법
  • 코테 공부
  • 전산회계 2급 준비
  • 자기개발
  • Oracle
  • MongoDB 기초부터 실무까지
  • 자바 테스팅 프레임워크
  • junit5
  • 이펙티브자바
  • Effective Java
  • MongoDB 공부
  • 코틀린
  • java 8

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.0
멍목
[쿼리 개선] 대량 Insert 시 로직 개선
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.