출처 : http://jhw0604.tistory.com/125



아래 내용 중 http://www.joinfu.com/2010/05/mysql-stored-procedures-aint-all-that/ 사이트의 내용은

출처에서 알려주는 내용처럼 sp가 컴파일되고 connection을 끊고 다시 sp 를 사용하려면 기존 컴파일을 재사용 되지 않는 다는 것이다.


그래서 응용 프로그램에서는 connection pool 연결하여 connection을 끊지 않고 캐쉬의 내용을 재사용하는 방법이 있다.

(JDBC connection pooling / 동일 connection에서 sp 를 지속적으로 실행 / 제한된 수의 sp로 설정하여 메모리 사용의 이슈가 없도록 설정)


- 발번역이라도 해서 올리려고 시도하다가 오역을 알려줄수 있다는 생각과 자괴감에 번역하다 포기했습니다....겨우 오픽im1주제에....ㅋㅋㅋ




이 문제로 많은 고민을 했었는데

MySQL은 SQL Server나 Oracle과 다르게 SP가 처음 한번만 컴파일 되고 재사용 되는것이 아니다.


http://www.joinfu.com/2010/05/mysql-stored-procedures-aint-all-that/

위 링크를 참고하면 커넥션 별로 컴파일이 관리되는데 말인데

즉 어플단에서 쿼리로 실행하나 SP로 실행시키나 컴파일하고 실행하는 과정에서 성능상 이득을 취하긴 어렵다는것!


물론 SP를 사용함으로서 프로그램과 데이터 조작과의 관계를 분리 할 수 있고(추후 SQL 튜닝 및 스키마 수정에 유리)

SP실행 권한만 줌으로서 인젝션과 같은 공격에서 상대적으로 안전하며

짧은 요청 문장으로 인한 트래픽 감소

트리거를 사용하지 않고도 데이터의 참조 무결성 유지

http://ko.wikipedia.org/wiki/%EC%A0%80%EC%9E%A5_%ED%94%84%EB%A1%9C%EC%8B%9C%EC%A0%80


등의 장점은 여전히 남아 있다.



그러면 컴파일 된 프로시저를 그냥 아깝게 버리느냐... 하면

mysql-proxy나 sqlrelay 등을 사용해서 Connection Pool을 구축한다면 커넥션을 한번만 맺고 재사용하기에 극복 할 수 있으니

MySQL을 사용하면 SP는 사용하면 안된다 하지 말고 커넥션 풀을 구축해서 사용하면 커넥션 비용도 감소하고 SP 컴파일도 재사용 가능하니 일석이조의 효과가!!


http://sqlrelay.sourceforge.net/

http://dev.mysql.com/downloads/mysql-proxy/



반응형

+ Recent posts