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 클라이언트 최적화를 사용한 정적 애플리케이션에도 적용됩니다. 성공적인 전개를 위해서는 애플리케이션 시나리오에 따라 전개에 영향을 및 미칠 수 있는 여러 옵션 및 옵션의 주의깊은 계획과 고려가 필요합니다.
런타임에 실행 시의 애플리케이션 연결 정보를 통해 위치 이름 값이 판별됩니다. z/OS®용 DB2의 위치 이름은 Linux, UNIX® 및 Windows®용 DB2의 데이터베이스 이름과 동일합니다.
런타임에, 연결하는 데 사용되는 데이터 소스의 특성으로 콜렉션 ID 값을 설정할 수 있습니다. 애플리케이션에서 CURRENT PACKAGESET 또는 CURRENT PACKAGE PATH 특수 레지스터를 설정하여 기본값을 겹쳐쓸 수 있습니다. 이 특수 레지스터가 애플리케이션에 사용되면 특수 레지스터 설정에서 지정한 콜렉션으로 패키지를 바인드할 때 주의해야 합니다.
pureQueryXML 파일을 구성할 때 pureQuery Configure 유틸리티 -rootPkgName 옵션으로 SQL문 세트 이름을 작성하는 데 사용할 기본 문자열을 지정합니다.
런타임에는 구성 프로세스 중 작성된 패키지 이름을 변경할 수 없습니다.
동일한 pureQueryXML 파일을 사용하여 다른 목표 데이터베이스에 패키지를 작성할 수 있습니다. 동일한 pureQueryXML 파일을 사용하여 다른 목표 데이터베이스에 패키지를 작성하는 경우 런타임에 다른 목표 데이터베이스에서 패키지를 식별할 때 동일한 일관성 토큰이 사용됩니다.
목표 데이터베이스에 패키지를 작성한 후 pureQueryXML 파일에서 일관성 토큰이 변경되면 pureQuery Runtime은 SQL문을 정적으로 실행하기 위해 데이터베이스의 패키지를 사용하지 않습니다.
런타임에는 값이 고정됩니다. StaticBinder 유틸리티를 pureQueryXML 파일과 함께 실행하여 데이터베이스에 패키지를 작성한 후에는 pureQueryXML 파일의 일관성 토큰을 변경하면 안됩니다. 토큰을 변경하면 pureQuery Runtime이 파일의 SQL문과 연관된 패키지를 식별할 수 없습니다.
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 데이터베이스 서버에서 패키지를 관리하기 위한 패키지 버전 및 패키지 콜렉션을 작성할 수 있습니다.