월요일, 7월 06, 2015

SQL 튜닝이 어려운 이유


SQL 튜닝에 대해 공부를 하거나 실습, 혹은 실제 프로젝트에서 자신이 작성한 SQL문을
튜닝할 때 마음대로 잘 되지 않는 경우가 대부분이다. 그만큼 튜닝이라는 것이 어렵다. 

그렇다고 전혀 정복할 수 없는 분야도 아니다. 하지만 쉽게 접근할 수 있는 분야도 아닌것이 사실이다. 많은 개발자들이 SQL 튜닝을 하고 싶어하고 공부도 하고 실습도 하지만, 원하는 결과를 낼 수 없는 이유가 무엇인지, 철저히 개발자 입장에서 한 번 살펴보자.

1. too much difficult and too little references or books

일반 프로그래밍 언어에 관련해서는 시중에 많은 책들이 나와 있다. 또한 인터넷 상에도 관련 자료가 많다. 이에 비해 SQL 튜닝 관련해서는 상대적으로 자료가 부족하다.

부족하더라도 있는 자료나 책으로 학습하면 문제가 없지만, 튜닝 서적들의 내용이 대체로 어렵다. 튜닝에 관련된 내용을 처음 접하는 개발자 입장에서 볼 때, 친절하면서도 쉽게 설명한 책은 별로 없다. 원래 튜닝이란 것이 어려워서 그런 것인지는 잘 모르겠지만....

2. Too many things to learn

SQL 튜닝이란 것을 한 마디로 말하면, 성능이 나쁜 SQL문을 이러저러한 방법으로 수정해 가장 최선의 성능을 내는 것이다.

 문제는, 최선의 성능을 내도록 SQL문을 변경하기 위해 알아야 할 지식들이 너무 많다는 점이다. 오라클에서 사용하는 데이터 구조, 저장장치와 메모리에서 데이터가 어떻게 처리되는지, 테이블 상의 데이터 분포, 인덱스 유무와 구조, 조인방법, 옵티마이저의 작동 방식, 통계정보, 실행계획, 힌트 등 알아야 할 내용이 너무 많다.

오늘도 불철주야 야근에 시달리면서 별도로 시간을 내어 학습하기에는 머릿속에 넣을 내용이 너무 많다.


3. 그때 그때 결과가 다르다. 

수 많은 우여곡절 끝에 몇 권의 튜닝 서적을 탐독하고 오라클에 관한 지식을 쌓았다고 해보자. 또한 튜닝 책에 나온 예제들도 직접 실행해 그 결과를 확인해 봤고, 왜 그런 결과가 나왔는지도 모두 이해했다고 치자. 

그런데, 현재 몸담은 프로젝트에서 작성한 SQL문에 대해 지금까지 학습한 모든 지식을 동원해 튜닝을 했는데, 성능이 좋아지지 않는다.

예를 들어, 분명히 책에서는 이러저러한 인덱스가 있으므로 Nested Loop 조인을 하고 driving 테이블은 이것으로 조정했더니 기존에 비해 월등히 빨리 수행됐었는데, 동일한 방법을 적용했음에도 불구하고 현실에는 적용되지 않는다.

또한 한 달전에는 튜닝해서 분명히 빠르게 수행됐던 SQL문장이 오늘 부터 느려지는 현상도 비일비재하다. 본인을 비롯해 많은 개발자들이 이 시점에서 튜닝을 포기한다. 똑같은 SQL문을 사용하더라도 데이터 분포, 데이터베이스 구성옵션 등, SQL 실행결과에 영향을 미치는 요소가 너무 많다.

따라서 SQL 튜닝은 어떤 규칙이나 법칙을 암기해 그대로 적용하기 보다는, 현재 실행된 SQL문이 내부적으로 어떻게 수행되는지를 파악하고, 좀 더 효율적으로 빠르게 수행되도록 고칠 수 있는 능력을 길러야 한다.

댓글 없음: