database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
ㆍMS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
MS-SQL Q&A 6893 게시물 읽기
No. 6893
Procedure 실행시 속도 저하 해결법?
작성자
박창수(cure)
작성일
2015-03-17 09:04
조회수
11,031

안녕하세요 DB를 운영하고 있는 한 전산 담당자 입니다

ERP DB를 운영중 조회에 대한 시간이 너무 오래 걸려 DB를 확인해보니 특별히 LOCK 도 걸린게 없었습니다

이것저것을 찾아보다 procedure를 삭제하고 다시 생성하니 procedure return 속도가 굉장히 상향되는 걸 여럿 보게 되었습니다

이건 왜그런걸까요??

그리고 procedure recompile 을 주기적으로 해줘야 하는 이유가 있는지 궁금합니다.

 

이 글에 대한 댓글이 총 2건 있습니다.

 주어진 말씀만으로는 

"실행 계획"의 차이..
로 생각됩니다.
 
우선 실행계획은 주어진 쿼리를 어떻게 처리할 지를 미리 계획한 것을 말합니다.
동일한 프로시저의 경우에도 어떤 경우에는 FULL SCAN하는 것이 빠르기도 하고 어떤 경우에는 index를 이용하는 것이 빠르기도 하며, JOIN의 방식의 차이 순서 등에 따라 쿼리의 실행 속도가 달라지게 됩니다.
 
SQL 서버는 특별한 상황이 발생되지 않는 이상 이전에 생성한 실행 계획을 캐쉬에 두었다가 재사용합니다. 여기서 특별한 상황의 예로는 테이블 내에 data가 많이 변경된 경우, index가 생성, 수정, 삭제된 경우 등이 있을 수 있습니다.
 
적절하지 않은 실행 계획으로 쿼리가 실행될때 엄청나게 느리게 쿼리가 처리될 수 있습니다.
 
예를 들어 사용자의 로그 data가 테이블에 쌓인다고 했을때 상태코드(정상, 인식오류, 권한오류... 등) 컬럼에 index를 걸어두었고 99%의 행이 정상이라면 정상인 data에 대해 사용자 부서별 비율 통계를 뽑을때는 full scan이 적절하겠지만 인식오류에 대한 사용자 부서별 비율을 보고서로 만든다면 index를 사용하는 것이 적절합니다.
문제는 이러한 경우 프로시저를 하나로 작성했다면 SQL 서버가 실핻되고 정상인 data에 대한 통계를 누군가가 실행하면 full scan으로 실행계획이 생성되고 지속적으로 full scan으로 실행되어 특정 오류에 대한 통계도 느리게 수행됩니다.
 
위와 같은 경우 DB가 더 똑똑하게 일을 할 수 있게 하기 위해서 프로시저 안에서 특정 값에 따른 분기(if 문 등을 사용)하여 값에 따라 프로시저를 실행하게 하는 등의 팁이 있겠습니다.
 
그러나 index이외에도 많은 변수들이 있을 수 있으므로 가장 우선시 되는 부분은 느릴때의 실행 계획과 그렇지 않을 때의 실행 계획을 확인하고 원인을 파악하시는 것이 필요하겠습니다.
 
 
 
이러한 내용을 댓글로 다 설명드리기는 힘들겠고, 추천드릴만한 도서로는 

정도가 도움이 될 것으로 생각됩니다.

우욱님이 2015-03-17 10:46에 작성한 댓글입니다. Edit

응급 땜빵으로는 procedure를 생성할때 WITH RECOMPILE 옵션을 주어서 매번 프로시저가 실행될 때마다 컴파일 되도록 하는 방법이 있긴 한데, 이렇게 한 경우 반복되는 컴파일 때문에 속도 저하가 발생할 수 있습니다.

우욱님이 2015-03-17 11:34에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
6896기간내에 Week 수 구하는 함수 [2]
미스터 양
2015-03-24
5339
6895중복된 컬럼의 값은 한 개만 나오게 하고싶어요 [2]
궁그미
2015-03-18
5157
6894MS SQL 프로시저 실행시 오류 현상
신상우
2015-03-17
6585
6893Procedure 실행시 속도 저하 해결법? [2]
박창수
2015-03-17
11031
6892sql 쿼리 질의 드립니다~ [1]
하메스
2015-03-15
4984
6891밑에글 작성잔데요. 현재 호텔에 머무르고 있는 손님 수 구하려해요. [10]
ㅁㅁ
2015-03-12
6143
6890일자별 호텔방문 손님 수 [5]
양현지
2015-03-10
6824
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.052초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다