본문 바로가기

배우기/기록의 중요성

이해한대로 적어보는 SQL 표준이 중요한 이유

728x90
반응형

업무를 이해할 때 DB를 이해하는 것이 좋다.

먼저 DBMS란 메모리와 디스크의 결합으로 이루어져있는데, DBMS의 메모리를 인스턴스(instance)라고 부른다. 처음에 오라클 DBMS을 설치할 때 우리는 단일 인스턴스를 설치했다.

 

https://metime.tistory.com/46

여기서 5번에 보면 단일 인스턴스 vs RAC 를 선택하라고 되어있는데 RAC는 인스턴스가 여러 개인 것이다.

인스턴스가 세 개인데 하나의 디스크에 물린 것을 3노드 RAC라고 한다.

동시 접속자가 많으면 노드가 세 개까지 간다고 하셧다.

3노드 RAC가 꺼지면, 중단이 되어 장애가 발생되더라도 intter connect가 설계되어 있기 떄문에 장애가 발생하더라도 사용자들은 문제 없이 서버 사용이 가능하다. 즉, 한 쪽 노드가 죽더라도 다른 쪽 노드가 이어서 작업할 수 있는데 이것을 클러스터라고 한다. 오라클은 RAC 클러스터라고 한다.

다시 말해 RAC를 설치하게 되면 업무적 장애에 있어서 사용자들은 장애 인지 없이 서비스를 제공 받을 수 있다. 이런 클러스터 제품중에 굉장히 많은 사용자가 몰렸을 때 동시처리가 굉장히 잘 되어있는 막강한 기능을 가진 게 oracle이라고 한다. 

 

어쨌든, 사용자가 자료 조회를 하게 되면 디스크에서 자료를 가져와 메모리로 올려준다. 

여기서 옵티마이저라는 애가 파싱을 하여 (★실행계획) SQL의 경로를 파악하게 된다. 이 부분에서 SQL의 실행 속도가 달라진다. 우리가 길을 찾을 때 내비게이션 경로 탐색을 하는 것처럼 움직이는 것이다. 

그런데 내가 지역 사람으로써 더 잘 아는 길을 우회하여 가는 게 있는데 이것이 튜닝이다.

 

각각의 SQL마다 수행경로를 내비게이션 상세경로를 보는 것처럼 SQL의 순차적 실행경로를 확인하는 것을 ★실행계획 을 본다라고 한다. 

오라클을 실행할 때 쿼리 중간에 커서를 두고 ctrl + e 를 누르면 실행계획이 explain plan 탭에 출력이 된다.

예를 들어

 

ctrl + e 누르면 현재 스키마에서 plan table을 생성하겠냐 물어보면 예 하면 된다.

 

 

성공적으로 생성되었다고 하니 확인해보자.

 

 

 

Explain Plan 탭을 보면 DEPT2 테이블을 읽고 EMP2를 조인했고,

그 다음에 마저 EMP2를 읽어와 조인했다는 의미가 된다.

 

SQL마다 실행계획을 세워서 메모리에 저장을 해두는데, 사용자가 또 똑같은 쿼리를 실행하면 실행계획을 뒤져본다. 만일 실행계획이 있는 경우에는 재사용하게 된다. 없으면 실행계획을 다시 짠다.

매번 파싱하고 매번 실행계획을 짜는 것보다 재사용하는 것이 좋다.

 

select 절에 몇 개 컬럼만 나열하겠다는 규칙이 있는 회사도 있고, 다섯 개가 넘으면 다음 라인에 쓰라는 등의 규칙이 있는 회사도 있다. 표준이 회사마다 다르기 때문에 그 규칙을 지켜줘야 한다. 표준에 위배되게 작성을 하면 같은 쿼리라도 옵티마이저가 서로 다른 쿼리로 인식을 한다. 그럼 또 실행계획을 다시 짠다. 

그렇기 때문에 표준을 지키는 것이다.

DBMS는 복잡하게 매번 다시 계획을 짜게 되면 그 성능이 나빠진다. 그래서 각 회사마다 표준을 지킬 필요가 있다. DBMS를 최성능으로 유지할 의무가 있기 때문이다.

 

줄 맞추는 건 모든 회사가 동일할테고, 테이블명이나 상수, 대소문자 규칙, select 절 컬럼 규칙 등은 회사마다 다르다. 

결론은 튜닝을 위해서는 각 DBMS의 표준을 지키라는 것이다.

 

 

선생님이 말씀하신 내용을 내가 이해한대로 작성을 해보았으나 컴퓨터에 대한 지식이 부족하니 시간이 될 때 공부를 많이 해야 할 것 같다.

 

오늘 메모 정리는 여기까지.

728x90
반응형