pureQuery 클라이언트 최적화를 사용한 SQL문의 정적 및 동적 실행

DB2® 데이터베이스에서 SQL문을 정적 또는 동적으로 실행할 수 있습니다. 정적 실행의 경우 SQL문을 실행하도록 데이터베이스를 구성해야 하지만 성능이 보다 일관적입니다. SQL문의 동적 실행은 데이터베이스에서의 특별한 준비가 필요하지 않아서 보다 탄력적입니다.

SQL문의 정적 및 동적 실행 간 차이는 컴파일된 프로그래밍 언어로 작성된 응용프로그램과 해석된 프로그래밍 언어로 작성된 응용프로그램의 실행 간 차이와 유사합니다. 컴파일된 언어를 사용할 때에는 런타임 전에 실행할 수 있는 코드가 생성됩니다. 해석된 언어를 사용할 때에는 런타임 중에 실행할 수 있는 코드가 생성됩니다. 해석된 언어를 실행할 때와 비슷하게, SQL문 분석 및 액세스 플랜 작성과 연관된 CPU 비용이 있습니다. 동적 SQL 실행은 응용프로그램 성능에 방해가 될 수 있습니다. 정적 및 동적 SQL 실행의 주요 차이는 정적 SQL 실행의 경우 응용프로그램이 궁극적으로 실행되기 전에 프로그램 준비 및 바인딩이 필요하다는 점입니다. 동적 SQL 실행은 런타임 중에 준비됩니다. 동적 SQL 실행은 잠재적으로 실행될 때마다 PREPARE 및 DESCRIBE의 추가 처리 오버헤드를 초래합니다.

동적 SQL문 캐시는 SQL문의 PREPARE 및 DESCRIBE의 추가 오버헤드를 피하는 데 도움이 될 수 있습니다. SQL문 캐시는 응용프로그램 서버(AS)나 DB2 데이터베이스, 또는 둘 모두에 있을 수 있습니다. 하지만 캐시 히트 비율이 높으면 일반적으로 주의해서 튜닝해야 합니다. 캐시 메모리 스페이스를 낭비하지 않고 캐시 히트 기회를 최대화하도록 SQL문을 올바르게 코드화해야 합니다. 일반 설치 환경에서는 전체 최적화가 어렵습니다.

대부분의 경우 정적 SQL 실행은 더 빠른 성능, 보다 일관성 있는 응답 시간 및 상당한 보안상의 이점을 제공할 수 있습니다. SQL문은 모두 DB2 데이터베이스 패키지로 바인드되므로 개별 SQL문에 대한 캐시 누락은 없습니다. 패키지에는 실행 권한이 부여되어 기본 데이터베이스 오브젝트의 권한을 모든 사용자에게 부여할 필요가 없습니다. 또한 정적 패키지에 대해 정의된 워크로드 관리용 자원 할당 및 패키지를 바인드할 때 정의된 액세스 경로는 일관성 있는 응답 시간을 유지하는 데 유용합니다.

일부 프로세스 계획에서는 동적, SQL 기반 JDBC 응용프로그램 대 정적, SQL 기반 JDBC 응용프로그램의 상대적 차이에 대비해야 합니다. pureQuery 클라이언트 최적화에 새 용어와 도구가 소개되지만 COBOL 또는 SQLJ 응용프로그램과 같은 전형적인 정적 응용프로그램 전개 관리의 전제 및 개념이 pureQuery 클라이언트 최적화를 사용한 정적 응용프로그램에도 적용됩니다. 성공적인 전개를 위해서는 응용프로그램 시나리오에 따라 전개에 영향을 및 미칠 수 있는 여러 옵션 및 옵션의 주의깊은 계획과 고려가 필요합니다.

DB2 패키지 식별 정보

DB2 패키지는 네 가지 구성요소로 식별됩니다. 프로그램 실행 시간에 pureQuery Runtime은 네 가지 구성요소를 사용하여 DB2 데이터베이스 서버에서 SQL을 정적으로 실행할 패키지를 식별합니다.
위치 이름
이름은 바인드 시간에 지정된 대상 서버로 판별됩니다. pureQuery 클라이언트 최적화의 경우. StaticBinder URL 옵션의 데이터베이스 이름 구성요소에 위치가 지정됩니다. pureQuery StaticBinder 유틸리티가 호출될 때.

런타임에 실행 시의 응용프로그램 연결 정보를 통해 위치 이름 값이 판별됩니다. z/OS®용 DB2의 위치 이름은 Linux, UNIX® 및 Windows®용 DB2의 데이터베이스 이름과 동일합니다.

콜렉션 ID
이 ID는 구성 단계 중에 지정됩니다. 콜렉션 ID는 관련된 패키지 세트를 그룹화할 때 유용합니다. 응용프로그램의 SQL문은 하나 이상의 패키지 콜렉션으로 이루어져 있습니다. 여러 다른 응용프로그램의 모든 패키지를 단일 콜렉션으로 바인드하는 것은 좋지 않습니다. 콜렉션은 DB2 데이터베이스의 패키지로 맵핑되는 응용프로그램의 관련 모듈 그룹으로 간주해야 합니다. 콜렉션 ID 값을 사용하여 논리적으로 관련된 패키지를 그룹화해야 합니다. 콜렉션 ID 값이 설정되지 않은 경우 디폴트값은 NULLID 문자열입니다.

런타임에, 연결하는 데 사용되는 데이터 소스의 등록 정보로 콜렉션 ID 값을 설정할 수 있습니다. 응용프로그램에서 CURRENT PACKAGESET 또는 CURRENT PACKAGE PATH 특수 레지스터를 설정하여 디폴트값을 겹쳐쓸 수 있습니다. 이 특수 레지스터가 응용프로그램에 사용되면 특수 레지스터 설정에서 지정한 콜렉션으로 패키지를 바인드할 때 주의해야 합니다.

패키지 이름
패키지 이름은 pureQuery StaticBinder 유틸리티가 데이터베이스에 패키지를 작성할 때 pureQueryXML 파일의 명령문 세트 이름에서 파생됩니다. 런타임에 SQL문을 정적으로 실행하기 위해 pureQuery Runtime은 SQL문을 pureQueryXML 파일의 명령문과 일치시킵니다. pureQuery Runtime은 명령문이 포함된 명령문 세트 이름을 사용하여 패키지 이름을 판별합니다.

pureQueryXML 파일을 구성할 때 pureQuery Configure 유틸리티 -rootPkgName 옵션으로 SQL문 세트 이름을 작성하는 데 사용할 기본 문자열을 지정합니다.

런타임에는 구성 프로세스 중 작성된 패키지 이름을 변경할 수 없습니다.

일관성 토큰
토큰은 16진수 시간소인으로 구현됩니다. 일관성 토큰은 pureQueryXML 파일에서 pureQuery Configure 유틸리티를 실행할 때 Java™ 시간소인으로 판별됩니다.

동일한 pureQueryXML 파일을 사용하여 다른 목표 데이터베이스에 패키지를 작성할 수 있습니다. 동일한 pureQueryXML 파일을 사용하여 다른 목표 데이터베이스에 패키지를 작성하는 경우 런타임에 다른 목표 데이터베이스에서 패키지를 식별할 때 동일한 일관성 토큰이 사용됩니다.

목표 데이터베이스에 패키지를 작성한 후 pureQueryXML 파일에서 일관성 토큰이 변경되면 pureQuery Runtime은 SQL문을 정적으로 실행하기 위해 데이터베이스의 패키지를 사용하지 않습니다.

런타임에는 값이 고정됩니다. StaticBinder 유틸리티를 pureQueryXML 파일과 함께 실행하여 데이터베이스에 패키지를 작성한 후에는 pureQueryXML 파일의 일관성 토큰을 변경하면 안됩니다. 토큰을 변경하면 pureQuery Runtime이 파일의 SQL문과 연관된 패키지를 식별할 수 없습니다.

캡처한 SQL 데이터 및 DB2 패키지 간의 맵핑

pureQuery Runtime은 SQL 문자열, 커서 및 준비 속성(예를 들어, 결과 세트 유형, 동시성, 유지 가능성)과 같은 SQL 정보와 SQL문을 비교해서 SQL문을 정적으로 실행할 시기를 판별합니다. SQL문을 정적으로 실행할 때 pureQuery Runtime은 응용프로그램이 발행한 SQL문을 pureQueryXML 파일의 위치, 콜렉션 ID, 패키지 이름 및 일관성 토큰 정보로 맵핑합니다. pureQuery Runtime은 이 맵핑을 사용하여 SQL문이 포함된 DB2 패키지에 액세스해서 SQL문을 정적으로 실행합니다.

pureQuery Configure 유틸리티로 SQL문이 포함된, 작성할 DB2 패키지의 특성을 지정합니다. 특성으로는 콜렉션 ID 및 명령문이 속한 명령문 세트가 있습니다. 이 특성은 pureQueryXML 파일에 저장됩니다. Configure 유틸리티는 패키지 정보와 함께 일관성 토큰도 저장합니다.

pureQuery StaticBinder 유틸리티는 pureQueryXML 파일의 명령문 세트 이름, 콜렉션 ID 및 일관성 토큰을 사용하여 DB2 데이터베이스에 패키지 ID를 작성합니다. 위치는 StaticBinder 유틸리티를 실행할 때 지정하는 대상 서버를 통해 판별됩니다. 패키지 이름은 명령문 세트 이름에 기초합니다. StaticBinder 유틸리티가 명령문 세트 이름으로 패키지 이름을 작성하는 방법에 대한 정보는 Configure 유틸리티-rootPkgName 옵션을 참조하십시오.

Configure 유틸리티 및 StaticBinder 유틸리티를 사용하여 DB2 데이터베이스 서버에 패키지를 작성합니다. Configure 및 StaticBinder 옵션을 지정하여 DB2 데이터베이스 서버에서 패키지를 관리하기 위한 패키지 버전 및 패키지 콜렉션을 작성할 수 있습니다.


피드백