오라클 에서 개발자가 실행하는 SQL문이 재파싱되지 않기 위해서는 반드시 동일한 SQL문이 실행되어야 합니다. 모든 조건은 동일한데 조건절의 상수 값이 틀린 경우 또는 바인드변수의 값이 틀린 경우에도 동일한 SQL문으로 인정되지 않아 재파싱을 하는 경우가 많이 발생하였습니다. 오라클 에서는 동일한 SQL문을 만들기 위해서 cursor_sharing 파라메터를 제공하고 있습니다.

 

1.CURSOR_SHARING = EXACT

 

2개의 문장에 사용된 SQL문이 모두 동일한 조건을 가져야만 파싱 정보를 공유할 수 있습니다.

WHERE 조건에 정의된 상수가 동일해야 합니다.

가. select * from dept where deptno = 30;

나. select * from dept where deptno = 40;

 

==> 실행된 2개의 문장에 대한 파싱 정보가 각각 생성됩니다.

 

2.CURSOR_SHARING = FORCE

 

2개의 문장에 사용된 SQL문이 모두 동일해야 파싱 정보를 공유할 수 있습니다. 단,WHERE 조건에 정의된 바인드 변수가 각각 다른 값을 가지고 있더라도 공유할 수 있습니다.

가.select * from dept where deptno = 10;

나.select * from dept where deptno = 12;

 

==> 실행된 2개의 문장에 대한 파싱 정보가 하나만 생성됩니다.

 

3.CURSOR_SHARING = SIMILAR

 

2개의 문장에 사용된 SQL문이 모두 동일해야 파싱 정보를 공유할 수 있습니다. 단, WHERE조건에 정의된 상수가 다르더라도 커서를 공유할 수 있습니다.

가.select * from dept where deptno = 10;

나.select * from dept where deptno = 12;

 

==> 실행된 2개의 문장에 대한 파싱 정보가 하나만 생성됩니다.

By haisins

오라클 DBA 박용석 입니다. haisins@gmail.com 으로 문의 주세요.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다