동일 쿼리의 출력 속도가 다른 이유가 뭘까요? 0 5 882

by 불꽃남자11 [SQL Query] [2019.10.11 15:46:28]


오라클 12C 인데, 조건절의 조건을 변경 하고 쿼리를 호출 하면 대략 7,8초 걸리다가 다시 실행 하면 1초 정도 걸립니다.

 

혹시 캐시 문제인가 해서  ALTER SYSTEM FLUSH BUFFER_CACHE; 넣고 실행해도 마찬가지 인데. 보통 어떤 경우 일까요?

by jkson [2019.10.11 15:57:18]

쿼리 하드파싱?

쿼리가 변경되었으니 실행계획을 다시 만듭니다.

쿼리실행 후 매번

ALTER SYSTEM FLUSH SHARED_POOL

ALTER SYSTEM FLUSH BUFFER_CACHE

하시면

매번 7,8초 걸리지 않을까요.

운영서버에서 하시지 마시고..;

 


by 불꽃남자11 [2019.10.11 16:02:30]

한번 주어진 실행 계획에 따라 다음 실행시에는 빨라 지지만 조건이 변경 되면 실행 계획을 변경하기 때문에 처음이 느리다는 말씀 이신거죠? 그럼 매번 실행 계획을 생성 하도록 하는 방법은 없을까요? 그럴 필요가 없긴 하지만 쿼리 변경을 하는데 출력 속도가 다르다 보니 고정을 시키고자 합니다


by jkson [2019.10.11 16:12:06]

매번 실행계획을 생성할 게 아니라 매번 실행계획을 다시 안 만들게 해야겠지요.

조건이 변경된다는 게 파라메터가 바뀐다는 것인지 조건절 구문이 바뀐다는 것인지요?

파라메터가 바뀌는 거라면 바인드변수로 파라메터 받아서 쿼리실행하셔야 하고요.

조건절 구문이 바뀌는 거라면 최대한 파라메터에 따라 고정 쿼리로 실행되게 하시고

불가하시다면 적당히 다이나믹 쿼리로 몇가지로 분기되게 처리되게 해놓으시면 됩니다.

쿼리가 4종류로 분기된다면 4번은 느리겠지만 이후에 실행속도는 계속 유지될 겁니다.

쿼리가 변경되거나, 오래 실행되지 않아 캐시에서 빠지기 전까지는요.


by 불꽃남자11 [2019.10.11 16:17:05]

파라미터가 바뀌는 겁니다. 예를 들면 Date 조건이 20191010 이상이었다가 20191011 이상으로 변경 될때. 그때 마다 속도의 차이가 생깁니다.

다이나믹 쿼리를 사용하는 상황은 아니구요


by jkson [2019.10.11 16:20:22]

바인드변수 처리가 안 되어있는 것으로 보이네요.

사용하시는 프로그래밍 언어에 따라 바인드변수 처리방법이 다릅니다.

예를 들어 어떤 프레임웍에는 바인드 변수처리를

:param 으로 하기도 하고

어떤 프레임웍에선 #{param} 으로 하기도 합니다.

db툴에서도 마찬가지고요.

구글에서 오라클 바인드변수로 검색해보세요.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입