SSISO Community

시소당

[Oracle] SQL은 인터프리터 언어다. DataBase

인터프리터 언어란 무엇인가? run time에 해석되어 값을 보여준다는 말 아닌가?

 

그렇다면 우리가 날렸던 수많은 같은 퀴리들이 갈때마다 다시 파싱 -> 실행 -> 인출 된단 말인가?

 

아니다. 어림 반푼이다.

 

먼저 퀴리가 날라가면 어떻게 되는지 순서를 한번 보도록 하자.

 

1. 구문분석 단계.

SQL이 오면 기존에 있는 문장인지 SGA의 공유풀(Shared Pool)을 뒤진다. 여기서 구문분석이라든지 실행계획 녀석도 볼수 있다.

 

2. 실행 단계

구문분석이 되었다면 구문분석한 퀴리가 데이터 버퍼 캐시영역에 있는지 검색하고 만얀 없다면 데이타파일(테이블 스페이스)에서 읽어 데이터 버퍼 캐시에 담아둔다.

 

3. 인출 단계

데이터 버퍼 캐쉬 영역에서 해당 값을 보여준다.

 

위의 작업은 죄다 서버 프로세스의 담당 되겠다.

 

자 그럼 감이 오는가? 인터프리터 언어라서 파싱을 해야 하는데.. 위의 1번인 구문분석에 보면 맨 먼저 공유풀을 뒤진다고 했다. 있으면 파싱을 안할테니 말이다. 즉 한번 해석된 녀석은 메모리에 로딩되어있다고 보면 된다.

 

중요한것은 100% 동일한 문장어야 한다는 거다.

1. 대소문자, 공백 등을 포함하여 문자열이 동일한 경우

2. 참조된 Object가 동일한 경우

3. 변수의 유형과 이름이 동일한 경우

4. User(Schema)도 동일한 경우

 

즉 위처럼 같은 문장만이어야만이 메모리에서 바로 가져올 수 있음을 기억하자.

그러니 어플리케이션단에서 SQL 함부로 쓰지 말고 SQL 문이라면 대문자, 테이블 및 컬럼은 파스칼형식으로 쓰든지 하는 룰을 정해서 써야 할것이다.

 

참고로 PL-SQL은 컴파일 언어라고 한다.

 

참조

Oracle 9i - Administration Fundamentals 1. by 김길태/정재완

오라클 SQL 튜닝 & 서버 튜닝 by 주종면


947 view

4.0 stars