데이터이야기

DB 노하우, 데이터직무, 다양한 인터뷰를 만나보세요.

조시형의 ‘친절한 SQL 튜닝’ : 데이터베이스와 오디오 - DB 튜닝 전문가되는 공부법

데이터 이야기
작성자
dataonair
작성일
2019-05-22 00:00
조회
7380


조시형의 ‘친절한 SQL 튜닝’

데이터베이스와 오디오 - DB 튜닝 전문가되는 공부법

기고자 조시형 증명사진
기고자 조시형

- 現) 디비안 대표이사 / 前) 엔코아, 비투엔

- 제1회 우수DB人상 수상 / 국가공인 SQLP, DAP 자격검정 전문위원

- 저서 : 친절한 SQL 튜닝, 오라클 성능 고도화 원리와 해법, 비용기반의 오라클

원리(공역)



‘친절한 SQL 튜닝’, ‘오라클 성능 고도화’ 저자로 유명한 조시형은 엔코아, 비투엔

을 거쳐 지금은 디비안 대표이사를 맡고 있다. 제1회 우수DB人상을 수상하기도 한 그는 20년 가까이 컨설팅을 수행하면서 터득한 성능관리 방법론을 솔루션화하는 일에 관심이 많고, DB 전문서적을 꾸준히 집필하면서 교육과 후배 양성에도 더 매진하려고 노력 중이다. 요즘은 인터넷 카페를 통한 지식공유 활동에도 열심인데, 그가 운영하는 ‘디비안 포럼(www.dbian.net)’을 방문하면 DB 관련 고급 기술자료, SQLP/DAP 자격증에 관한 정보를 습득할 수 있고, 직접 저술한 책에 대한 Q&A 서비스도 받을 수 있다.

데이터베이스 튜닝 전문가가 되고 싶다며 공부 방법을 질문하는 분이 많은데, 이 질문에 대답하기 위해 데이터베이스 튜닝이 무엇인지부터 정의해 보자.

데이터베이스 튜닝이란

‘데이터베이스 튜닝’이라고 할 때의 튜닝은 일반적으로 ‘성능(Performance) 튜닝’을 말한다. 그리고 데이터베이스는 데이터 파일, 리두로그 파일, 컨트롤 파일 등 파일들의 집합을 의미하는데, 우리가 튜닝하고자 하는 대상은 파일이 아니다. 파일에 데이터를 읽고 쓰는 소프트웨어 애플리케이션, 즉 DBMS가 대상이다. 따라서 엄밀히 말하면 ‘데이터베이스 성능 튜닝’보다는 ‘DBMS 성능 튜닝’이라는 표현이 더 정확하다. 용어적 혼란을 막기 위해 우리가 일반적으로 말하는 ‘데이터베이스 튜닝’은 정확히 말해 ‘DBMS 성능 튜닝’을 의미한다고 가정하고 설명을 진행하겠다.
데이터베이스(정확히 말하면, DBMS)는 데이터를 읽고 쓰는 소프트웨어 엔진이다. 데이터를 읽고 쓸 때 SQL을 이용한다. 따라서 SQL이 병목이나 지연 없이 빠르고 안정적으로 수행되도록 조치하는 모든 활동을 데이터베이스 튜닝이라고 정의할 수 있다.
데이터베이스 튜닝에서 다루는 세부요소가 아주 많지만, 가장 중요한 세 가지 주제로 묶어서 요약하면 아래와 같다.

① SQL 튜닝 : I/O 효율화, DB Call 최소화, SQL 파싱 최소화 등  ② DB설계 : 논리적 데이터 구조 설계, 물리적 저장 방식 조정 등  ③ 인스턴스 튜닝 : Latch/Lock 모니터링 및 해소, 메모리 설정, 프로세스 설정 등


① SQL 튜닝 : I/O 효율화, DB Call 최소화, SQL 파싱 최소화 등

② DB설계 : 논리적 데이터 구조 설계, 물리적 저장 방식 조정 등

③ 인스턴스 튜닝 : Latch/Lock 모니터링 및 해소, 메모리 설정, 프로세스 설정 등

데이터베이스 튜닝 전문가가 되는 공부방법을 설명하기에 앞서 잠시 음악 얘기를 해 보자.


오디오 튜닝 - “천상의 소리를 찾아서”

필자는 데이터베이스 마니아이면서 또한 클래식(정확히 말하면, 클래식 음악) 마니아다. 대학 시절, 클래식 음악 관련 동아리 활동을 하면서 클래식 음악 세계에 빠지게 됐다. 클래식 음악을 좋아하지만, 학생이 무슨 돈이 있어 대형 음악회를 다녔겠는가. 주로 음반으로 음악을 감상했고, 가끔 가는 음악회라야 독주, 실내악(소수 악기로 구성된 중주) 같은 소규모 연주회였다.

데이터베이스에 빠지고부터는 그나마 음악감상도 잊고 살았는데, 이전 직장에서 마음에 맞는 동료 몇 분과 클래식 음악 동호회를 결성하면서 예전에 그렇게 좋아하던 음악을 조금씩 다시 듣기 시작했다.


음악감상을 좋아했지만, 그때까지 오디오에는 별 관심을 두지 않았다. 하드웨어보다 소프트웨어가 중요하다고 생각했으므로 음반 사 모으는 데만 열심을 냈다. 그러다가 2009년에 오디오에도 관심을 두게 된 사건이 있었다. 동호회 활동의 일환으로 그해 9월에 빈필하모니 내한공연을 관람했고, 그 큰 연주회장을 휘감은 놀라운 하모니와 사운드에 충격을 받은 것이다. 그야말로 천상의 소리를 경험했다. 내가 지금까지 음반으로 듣던 음악, 특히 교향곡은 진짜 소리가 아니었구나 그런 생각마저 들었다. 연주회장에서 듣던 사운드를 집에서도 듣고 싶은 욕망이 생겼다. 필자의 오디오 튜닝은 그때 시작됐다.


제일 먼저 스피커를 바꿨다. 그다음 앰프, CD 플레이어 순으로 바꿔 나갔다. 중간에 이들 기기를 연결하는 케이블도 여럿 바꿨다.


왼쪽부터 스피커, 앰프, CD플레이어 순서


결과는 어땠을까 오디오에 관심 있는 독자라면 잘 알겠지만, 사실 제대로 오디오 튜닝을 하려면 수억~수십억이 든다. 그만한 투자를 하지 않았기 때문일 수도 있지만, 가용한 예산 범위에서 나름 적지 않은 투자를 했는데 솔직히 결과는 만족스럽지 못했다.

시작할 때도 책을 한두 권 읽고 시작했지만, 뭐가 문제일까 싶어 서점을 다시 찾았다. 책 몇 권을 뒤지다 중요한 사실을 하나 발견했다. 음원의 중요성! 소스가 중요하다는 거였다.


최신 기술로 녹음한 최근 음반 몇 개를 바로 구매했다. 예술의 전당에서 듣던 빈필 사운드에 비교할 바는 아니지만, 기기를 하나씩 바꿀 때 얻는 효과보다 훨씬 좋았다. 역시 소스가 중요했다. 명반으로 분류되는 클래식 음반은 대개 50~60년대 녹음한 것들이 많아 예술성은 높을지 몰라도 음질은 별로다. 애초에 녹음 상태가 좋지 못하니, 오디오 성능을 최대한 끌어내지 못했던 것이다. 특히 대형 편성의 오케스트라 연주는 녹음상태가 중요했다. (물론 좋은 소리와 좋은 연주는 다르다. 오히려 노이즈 섞인 아날로그적 음색을 좋아하는 마니아들도 있다. 필자는 그 당시, 좋은 연주를 좋은 소리로 듣고 싶었던 것이다.)


그 후 계속된 노력 끝에 깨달은 또 하나의 사실은, 소리 울림을 담당하는 ‘공간’의 중요성이다. 같은 기기인데 오디오 숍에서 듣던 소리와 집에서 듣는 소리가 다른 이유는, 공간의 차이였다. 이 문제를 해결하려면 전용 감상실이 필요했다. 이 사실을 깨닫고, 오디오 튜닝은 일단 거기까지만 하기로 했다. 전용 감상실을 꾸밀 빈방이 없었기 때문이다. 결국, 좋은 소리를 듣기 위해서는 집을 바꿔야 한다는 결론에 이른 것이다. 큰딸을 불러 네가 빨리 시집을 가줘야겠다는 농담을 건넸더니 피식 웃고 만다.


넓은 거실에 오디오 기기를 인테리어한 사진


(마지막으로 하나 더 깨달은 건, 그 모든 요소와 좋은 기기를 다 갖추어도 그때 예술의 전당에서 듣던 그 소리를 집에서는 결코 들을 수 없다는 사실이다. 오디오에 투자할 돈으로 연주회장을 많이 찾아 다니기로 했는데, 사실 시간이 없어 실천하진 못하고 있다.)


데이터베이스 튜닝 - “전광석화처럼 빠르게”

좋은 소리를 듣기 위해서는 소스와 공간이 중요했다. 잠깐이지만 오디오 튜닝의 세계를 경험하고서 얻은 결론이다. 이 경험을 데이터베이스 튜닝에 접목해 보자.

데이터베이스 튜닝에서 좋은 소스란, 데이터베이스 엔진이 잘 처리할 수 있도록 효율적으로 작성된 SQL을 말한다. Garbage In, Garbage Out! 그럼, 좋은 공간은 무엇일까 빵빵한 하드웨어 아니다. 효과적인 데이터 구조가 좋은 공간에 해당한다.


좋은 하드웨어가 필요 없다는 뜻은 결코 아니다. 필요하지만, 좋은 소스와 좋은 데이터 구조가 선행되어야 한다는 뜻이다. 음반 녹음 상태와 소리 울림을 만들어 줄 최적화된 공간이 선행되지 않으면 아무리 좋은 스피커와 앰프를 갖추어도 좋은 사운드를 재생할 수 없는 것처럼 말이다.


튜닝 전문가가 되는 공부방법

질문으로 돌아가서 데이터베이스 튜닝 전문가가 되려면 무엇을 어떻게 공부해야 하는가

대부분 SI 프로젝트에서 데이터베이스 운영 지원을 위해 두 개 팀을 구성한다. 하나는 DBA팀, 다른 하나는 SQL 튜닝팀이다. DBA와 SQL 튜닝팀 중 어느 팀에서 일하고 싶은가 역할에 따라 공부방법도 달라져야 한다.


소규모 프로젝트에선 DBA 팀이 두 가지 역할을 다 담당하기도 한다. 반대로, 대규모 프로젝트에선 성능검증(부하 테스트)팀을 추가로 구성하기도 한다. 이 팀에는 DB 전문가뿐만 아니라 WAS, OS, 네트워크, 스토리지 등 다양한 분야 전문가가 참여한다.


DBA가 되고 싶다면 데이터베이스 자체에 대한 연구가 무엇보다 중요하다. 데이터베이스 설치, 백업/복구, 오브젝트 생성/변경 등은 DBA로서 갖추어야 할 가장 기본적인 기술력이다. 데이터베이스 아키텍처를 완전히 숙지해야 하며, 데이터베이스를 운영하면서 생기는 여러 장애 상황을 모니터링하고 해결하는 기술력과 자신만의 스크립트를 꾸준히 개발해야 한다.

SQL 튜닝팀에서 일하고 싶다면 데이터베이스 자체보다 SQL 중심으로 공부해야 한다. 필자 경험에 비추어 볼 때 가장 필요한 기술력은 다음과 같다.

- 옵타마이저가 SQL을 파싱하고 통계정보를 활용해 실행계획을 생성하는 원리
- 옵티마이저 쿼리변환 원리를 바탕으로 실행계획 분석하는 방법

- 옵티마이저 힌트를 이용해 실행계획을 제어하는 방법

- 옵티마이저가 좋은 실행계획을 생성하도록 유도하기 위한 효과적인 SQL 작성법

- 애플리케이션에서 SQL을 실행할 때 사용하는 프로그래밍 인터페이스

- SQL을 빠르게 처리할 수 있는 좋은 데이터 구조와 파티션/인덱스 설계

- 정확성과 안정성을 확보할 수 있는 통계정보 수집 정책

뷰와 서브쿼리로 복잡하게 얽힌 SQL과 실행계획을 분석해서 튜닝하는 과정은 참 어렵다. 힌트만으로 튜닝이 되면 다행이지만, 복잡하게 얽히고설킨 SQL을 다른 구조로 변환해야 한다면, 그때부터는 말이 튜닝이지 프로그램 개발에 가깝다. 디버깅을 통해 반드시 결과가 맞는지도 확인해야 한다. 틀린 결과를 빠르게 조회하도록 돕는 것은 튜닝이 아니다.


SQL 튜닝의 이런 어려움 때문인지 데이터베이스 튜닝 전문가가 되겠다면서도 SQL 다루는 기술은 등한시하는 분이 많다. SQL 튜닝 업무에 지원하는 분들 인터뷰를 그동안 많이 해 봤는데, 매번 그런 느낌을 받는다. DB 다루는 기술력은 인정할만한데 SQL 다루는 기술력엔 좀처럼 확신을 주지 못하는 분들이 많았다.


SQL 튜닝이 곧 데이터베이스 튜닝

다시 말하지만, 데이터베이스 튜닝은 SQL이 병목이나 지연 없이 빠르고 안정적으로 수행되도록 조치하는 모든 활동을 말한다. 따라서 SQL과 친숙해지지 않고 데이터베이스 튜닝 전문가가 되겠다는 생각은 버려야 한다. 모순이다. 수많은 SQL과 실행계획을 분석해 보지 않고는 SQL 튜닝을 결코 잘할 수 없다.

결론이다. 데이터베이스 튜닝 전문가가 되려면 데이터베이스를 움직이게 하는 소스, 즉 SQL에 더 많은 관심과 시간을 투자해야 한다. 좋은 데이터 구조를 설계하는 방법도 반드시 함께 연구하기 바란다.


구체적으로 어떤 내용을 학습하고 연구해야 하는지는 앞으로 하나씩 보따리를 풀어보자.


위 글은 무단 복사 및 링크는 금지합니다.
글과 관련한 문의사항이 있으면, 아래로 연락 주시기 바랍니다.

biz@dbian.co.kr

070-4806-8246

www.dbian.co.kr

www.dbian.net




출처 : 한국데이터산업진흥원

제공 : 데이터 전문가 지식포털 DBguide.net