Steady Mind For My Life

https://github.com/jongseok3910/Spring-Study

Oracle

SQL튜닝 수강 기록

함탕 2023. 10. 21. 22:19
728x90
728x90

SQL튜닝 수강 이유

23년 6월 SM업무 중이었다.

아침출근 후 평소처럼 로그 확인 중이었는데

에러로그를 하나 발견했다.

 

에러내용은 전날 새벽에 돈 배치쿼리 중

1시간 30분 ~ 2시간 걸렸던 쿼리가 있어서 

 DB연결이 끊겨 데이터를 제대로  select 하지 못한

에러였다.

 

해당쿼리는  select insert 쿼리였고 인라인뷰, 서브쿼리도 많은

복잡한 쿼리였다.

 

select건수는 많아야 20건.

20건 select insert하는데 약 두 시간이 걸린다는 것이

너무 의아했다.

원인을 찾고 해결하려다가 진전이 없어서

결국 DBA분에게 도움을 요청했다.

(운영반영하면서 인덱스가 깨진 것이 아니냐,

insert 시 parallel로 해야 한다 등 온갖 설이 난무했다 ㅎ)

 

문제의 쿼리를 DBA분에게 전달 후 옆자리에 앉아서

어떻게 해결을 하시는지 유심히 지켜봤다.

 

trace를 보고 문제의 소지가 있는 쿼리위치를 파악,

no merge 힌트를 추가하니 2시간 걸리던 쿼리가

10초 만에 끝나는 게 아닌가!!

 

너무 신기해서 DBA분께 어떤 부분이 원인이었냐고

물어봤었는데...난 그분의 설명을 이해하지 못했다..ㅠ

 

OCP도 취득하면서 오라클 아키텍처에 관해서는

나름 자신 있었는데 쿼리튜닝은 별개의 영역이었다.

 

OCP 취득을 맘먹었을 때처럼

다시 한번 나의 무지함에 대해 답답함을 느꼈다.

그날 저녁 바로 SQL 튜닝 책을 사고

오프라인 강의 수강신청을 했다.

 

 

수강기록(08.12 ~ 09.02)

강의는 매주 토요일 8시간씩 총 4회였다.

SQL 튜닝 입문서의 저자인 조시형 강사님께서

강의를 해주셨다.

 

강의를 수강하길 잘했다고 생각한 이유는 아래와 같다.

 

1. Trace를 볼 수 있게 되었다.

강사님께서 이 강의를 수강하시는 분들 중에

간혹 SQLP를 취득하신 분들도 있다고 하셨다.

 

그분들께 SQLP도 있으시면서 왜? 이 강의를 수강하시는 거냐고

여쭤보면 SQLP는 취득했으나, Trace를 볼 줄 모른다고 대답하시는

분들이 있다고 하셨다.

 

강사님께서는 문제가 생기면 원인파악을 하는 것이 우선인데

문제파악을 위한 Trace도 볼 줄 모르면서 이론만 외워

SQLP를 취득한다 한들 그게 무슨 소용이 있냐고 말씀하셨다.

 

그만큼 Trace를 볼 줄 아는 것이 튜닝의 기초다!

 

2. 인덱스의 중요성

튜닝 시 기본이 되는것이 Trace분석과 인덱스다.

개발자 일을 하거나, 자격증 준비를 하면서 인덱스라는 말은

들어봤을 거다.

 

이 인덱스에 대해 정확하고, 자세히 알고 있는 개발자가 

많이 있을까?

인덱스 하면 단순 목차, 빨리 찾을 수 있게 도와준다

정도의 개념만 알고 개발을 하고 있지 않을까?

 

이런 생각이 들었던 이유가 인덱스는 내가 생각했던 것보다

상당히 중요하고 심도 있게 알아야 하는 개념이었다.

 

오라클 아키텍처적으로도 잘 알고 있어야 하고 

쿼리 작성 시에도 인덱스 구성을 확인하고

인덱스를 사용할 수 있도록 쿼리작성을 해야 한다.

 

(수강생 중 MSSQL(씨퀄서버)사용하는 DBA분들이 많았는데

강사님께서는 DB마다 조금씩은 다르지만 핵심개념들은 비슷하다고

하셨다.)

 

(강사님께서 DBA가 아닌 분들은 오라클 아키텍처에 대해

잘 모를 수도 있으니 간략하게 설명한다 하셨는데, 나는 OCP 취득하면서

오라클 아키텍처에 대해서는 잘 알고 있었기에 이해하기 쉬웠다.

역시, IT는 여러 분야 공부를 해 놓으면 언젠가 다 도움이 된다)

 

 

3. 튜닝기법

Trace 분석 후 인덱스를 활용한 튜닝, 힌트를 활용한 튜닝을

직접 해보면서 혼자서도 튜닝을 시도할 수 있는

'첫 허들'을 넘게 되었다.

 

강사님께서는 다년간의 경험에서 나오는 꿀팁들을 알려주셨고

인덱스, 힌트사용하지 않더라도 쿼리성능을 향상할 수 있는

방법과 힌트사용법을 알게 되었다.

(swap join inputs 힌트 사용 시 build input, proof input 순서 변경방법 등)

 

수강 이후

 

강사님의 말씀 중에 인상 깊었던 내용은 아래와 같다.

 

1. DBA보다 개발자들이 튜닝강의를 들어야 한다.

인덱스의 제대로 된 개념만 알고 쿼리작성을 해도

튜닝하는 일이 줄어든다.

 

2. 선무당이 사람 잡는다.

프리 DBA 중에서도 정확하지 않은 지식을 가지고 일을 하시는

분들이 있다고 하셨다.

 

이전 DBA가 잘못된 지식을 가지고 일을 했기에

인덱스 구성도 엉망, 결국 퍼포먼스가 잘 안 나와서

잘못된 부분을 고치느라 고생이 많아졌던

경험이 있다고 하셨다.

 

'나도 과연 올바른 지식을 가지고 개발을 하고 있는가'

자기 자신을 뒤돌아 보게 됐고 앞으로 더욱더

내가 짠 코드에 책임을 질 수 있는 개발자가 돼야겠다고 다짐했다.

 

 

이렇게 약 한 달간의 SQL튜닝을 수강하면서

NL조인, SORT조인, HASH조인도 처음 알게 되었고

다양한 힌트들을 어떤 상황에서 써야 하는지도 알아야 하니

나는 아직 더 배울게 많고 더 성장해야겠다 다짐을 했고

앞으로도 계속 배움에 정진해야겠다.

 

다음에 좋은 강의가 있다면 또 찾아 들어야지 ㅎ

 

728x90
300x250