본문 바로가기

아케텍쳐14

05.데이터베이스 Call 최소화 원리 - 07.PL/SQL 함수의 특징과 성능부하 (1) PL/SQL함수의 특징 오라클은 PL/SQL로 작성된 함수/프로시저의 이식성을 고려해 오라클 서버가 아닌 Oracle Forms, Oracle Reports 같은 제품에서도 수행될 수 있도록 설계하였습니다. 그래서 PL/SQL로 작성한 함수와 프로시저를 컴파일하면 JAVA언어처럼 바이트코드가 생성되며, 이를 해석하고 실행할 수 있는 PL/SQL엔진만 있다면 어디서든 실행될 수 있습니다. 바이트코드는 데이터 딕셔너리에 저장되었다가 런타임 시 해석됩니다. 지금은 가장 인기 있는 개발언어가 된 JAVA가 초기에 고전했던 이유는 바로 속도 때문이었는데, PL/SQL도 JAVA처럼 인터프리터 언어기 때문에 Native 코드로 완전 컴파일된 내장 함수에 비해 많이 느립니다. 이 문제를 극복하려고 오라클 9i.. 2020. 2. 3.
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.