쿼리 관리를 어떤 식으로 하시나요? 0 1 942

by jkson [2016.10.21 11:31:14]


쿼리를 서버단에 저장해놓고 클라이언트에서 서버로 해당 쿼리를 호출하는 형식으로 사용하고 있습니다.

회사에 배포시간이 따로 있어서 해당 배포시간 이외에 배포는 운영 안정성 차원에서 기본적으로

불허하고 있는데요.

배포 후 요청사항 변경이라든지 미처 생각하지 못한 문제가 있을 때 운영시간에 쿼리를 변경해야하는 경우가

종종 생깁니다.

해서 쿼리를 좀 유동적으로 변경가능하게 해보면 어떨까 하는 생각을 하게 되었는데요.

프로시저를 만드는 방법과 테이블에 쿼리를 저장하는 방법을 생각했는데..

프로시저를 만드는 방법은 쿼리를 생성할 때마다 프로시저를 만들어야 하니 조금은 관리상의 문제가 있을 것

같기도 하고 쿼리 버전 관리(변경내역 관리)가 어려울 것 같아서 테이블에 쿼리를 저장해두면 어떨까...

하는 생각을 하게 되었는데 이렇게 되면 쿼리를 실행하기 전에 쿼리를 가지고 있는 테이블을 한번씩 엑세스하게

되어 비효율이 발생할 것 같아요. 조금 검색해보니 좋지 않은 방법이라고 이러한 방식으로는 사용하지

말라고 하는데.. select 경합 때문인 걸가요?

어떤 식으로 쿼리를 관리하는 게 좋을까요?

by jkson [2016.12.20 10:34:21]

오라클 성능 고도화 원리와 해법 저자이신 조시형님에게 질문드렸고 답변을 얻어서 늦었지만 참고하시라고 댓글 추가합니다. 어렴풋이 이런 이유가 아닐까 했는데 맞네요. 너무 당연한 걸 어렵게 생각했네요ㅋㅋ 동접자가 많지 않아 해보려고 했으나.. 역시나 좋지 않은 방법은 쓰지 않는 게 좋은 것 같습니다.

-----------------------------------------------------------------------------------------

SQL을 수행할 때마다 parse call, execute call, fetch call 과정을 거칩니다. call이 많을 수록 성능은 느려집니다. 경우에 따라서는 I/O보다 더 부하가 심할 수 있습니다. 그래서 call 횟수를 줄이는 것은 중요한 튜닝원리 중 하나이며, 1권 5장이 다루는 핵심 내용입니다. 만약 SQL을 DB 테이블에 담아 두고 매번 SQL을 찾아서 실행한다면 어떻게 될까요? SQL을 실행할 때마다 SQL 하나를 더 실행해야겠죠. 그만큼 parse call, execute call, fetch call이 증가합니다. 마치 전화를 걸 때마다 114에 전화를 걸어 전화번호를 묻는 것과 같습니다. SQL 수행횟수가 아주 낮고 한번 수행할 때마다 긴 시간이 소요되는 시스템 환경(분석계, DSS 등) 이라면 고려해 볼 수 있지만, 수행횟수가 아주 많은 기간계 시스템에선 금해야 할 아키텍쳐입니다. 기간계 시스템에서 Literal SQL을 금하는 이유와 같다고 보시면 됩니다.

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