본문 바로가기

성능고도화54

05.데이터베이스 Call 최소화 원리 - 06. 페이지 처리의 중요성 클라이언트/서버 환경에서 대용량 데이터를 조회할 때는 커서를 닫지 않은 채 사용자 이벤트(스크롤 바를 내리거나 ‘다음’버튼을 클릭 하는 행위 등)가 발생할 때마다 결과 집합을 Fetch하도록 구현할 수 있었습니다. 웹 애플리케이션 환경에서는 커서를 계속 오픈한 채로 결과집합을 핸들링할 수 없습니다. 즉, 데이터베이스와의 연결을 지속하지 않는 웹 환경이기 때문에 사용자가 다음 페이지를 요청하거나 스크롤 바를 내릴때 마다 개벼럭인 SQL문을 수행하는 방식으로 페이지 처리를 구현해야 합니다. 그러다 보니 페이지 처리 구현 방식이 자주 이슈가 되곤 합니다. i := 0; loop fetch c into l_record; exit when (c%notfound or (i = pageNo * pageSize)); .. 2020. 2. 2.
05.데이터베이스 Call 최소화 원리 - 05. Fetch Call 최소화 (1)부분범위처리 원리 공사장에서 시멘트를 이용해 벽돌을 쌓는 동안 운반공이 벽돌을 실어 나르는 상황을 상상해봅니다. 벽돌은 많이 있어서 한번에 다 옮길 수 없으며 한 수레(array size)씩 운반해야 합니다. 운반공은 미장공이 벽돌을 더 가져오라는 요청(Fetch Call)이 있을때만 벽돌을 운반합니다. 추가요청이 없으면 더 이상 운반하지 않습니다. DBMS도 이와 마찬가지로 데이터를 클라이언트에게 전송할 때 일정량씩 나누어 전송하며, 오라클의 경우 Array Size(또는 Fetch Size)설정을 통해 운반단위를 조절합니다. 전체 결과집합 중 아직 전송하지 않은 분량이 많이 남아있어도 클라이언트로부터 추가 Fetch Call을 받기 전까지는 그대로 멈춰 서서 기다립니다. 이게 OLTP성 환경에서.. 2020. 1. 30.
05.데이터베이스 Call 최소화 원리 - 04.Array Processing 활용 Array Processing기능을 활용하면 한 번의 SQL 수행으로 다량의 로우를 동시에 insert/update/delete할 수 있습니다. 이는 네트워크를 통한 데이터베이스 Call을 감소시켜주고, 궁극적으로 SQL수행시간과 CPU 사용량을 획기적으로 줄여줍니다. (앞 절의 납입방법별_월요금집계 테이블 응용) Java 프로그램에서 Array Processing 이 10 과 1000일때 수행시간과 insert 할때 Execute Call을 비교해보겠습니다. 10일때 - 126.82초 , insert 시 150000번의 Execute Call 발생 1000일때 - 1.21초, insert 시 30번의 Execute Call 발생 inesert 된 로우 수가 150,000건이므로 매번 5,000건씩 Ar.. 2020. 1. 29.
05.데이터베이스 Call 최소화 원리 - 03. 데이터베이스 Call이 성능에 미치는 영향 월요금납부실적 테이블과 납입방법별_월요금집계 테이블이 있습니다. 월요금납부실적테이블은 고객별 납입방법별 납입요금을 컬럼 값으로 입력하고, 납입방법별_월요금집계 테이블은 납입요금을 납입방법코드별로 하나의 레코드로 입력하도록 하고 있습니다. 여기서 월요금납부실적 테이블을 이용해 납입방법별_월요금집계 테이블형태로 가공하는 배치프로그램이 필요하다고 가정하고 아래와 같이 PL/SQL을 작성하였습니다.위의 쿼리의 문제는 과도한 데이터베이스 Call에 있습니다. 만약 처리해야 할 월요금납부실적이 100만 건이면 이 테이블에 대한 Fetch Call이 100만건, 납입방법별_월요금집계 테이블로의 insert를 위한 Execute Call이 최대 500만번, 따라서 최대 600만번의 데이터베이스 Call이 발생하게 됩니.. 2020. 1. 28.