다음을 통해 공유


JDBC 드라이버에 대한 준비된 명령문 메타데이터 캐싱

JDBC 드라이버 다운로드

이 문서에서는 드라이버의 성능을 향상시키는 두 가지 변경 사항에 대한 정보를 제공합니다.

준비된 문에 대한 준비되지 않은 일괄 처리

버전 6.2부터 SQL Server로의 서버 왕복을 최소화하는 향상된 성능이 구현됩니다. 이전에는 모든 prepareStatement 쿼리에 대해 준비 취소 호출도 전송되었습니다. 이제 드라이버는 기본값이 10인 임계값 ServerPreparedStatementDiscardThreshold까지 준비되지 않은 쿼리를 일괄 처리했습니다.

참고 항목

사용자는 다음 방법으로 기본값을 변경할 수 있습니다. setServerPreparedStatementDiscardThreshold(int value)

버전 6.2 이전에는 드라이버가 항상 호출 sp_prepexec합니다. 6.2 이상에서는 준비된 문의 첫 번째 실행에서 드라이버는 sp_executesql을(를) 호출하며, 나머지 경우에는 sp_prepexec을(를) 실행하고 해당 핸들을 할당합니다. 자세한 내용은 PreparedStatement 메타데이터 캐싱을 참조하세요.

버전 11.2부터 처음 sp_executesql 호출한 후, 드라이버는 prepareMethod 연결 문자열 속성에 지정된 값에 따라 추가 호출로 sp_prepare 또는 sp_prepexec를 실행할 수 있습니다. 자세한 내용은 연결 속성 설정을 참조하세요.

참고 항목

사용자는 setEnablePrepareOnFirstPreparedStatementCall(boolean value) 메서드를 사용해enablePrepareOnFirstPreparedStatementCall을 sp_prepexec로 설정하여 항상 을 호출하는 이전 버전으로 기본 동작을 변경할 수 있습니다

준비된 문에 대한 준비되지 않은 일괄 처리 목적으로 이 변경 내용에 도입된 새 API 목록

SQLServerConnection 일괄 처리 준비 해제

새 메서드 설명
int getDiscardedServerPreparedStatementCount() (버려진 서버 준비문 수를 가져옵니다) 현재 미해결 준비되지 않은 작업의 수를 반환합니다.
void closeUnreferencedPreparedStatementHandles() (참조되지 않은 PreparedStatement 핸들을 닫습니다) 미처리 무시 준비 문에 대한 준비되지 않은 요청을 강제로 실행합니다.
boolean getEnablePrepareOnFirstPreparedStatementCall() 특정 연결 인스턴스에 대한 동작을 반환합니다. false면 첫 번째 실행 시 sp_executesql을 호출하고 문을 준비하지 않습니다. 두 번째 실행이 발생하면 sp_prepare 또는 sp_prepexec를 호출하고 실제로 준비된 명령문 핸들을 설정합니다. 이후 실행 시 sp_execute를 호출합니다. 이렇게 하면 명령문이 한 번만 실행될 때 준비된 명령문 닫기에서 sp_unprepare를 사용할 필요가 없습니다. 이 옵션의 기본값은 setDefaultEnablePrepareOnFirstPreparedStatementCall() 호출로 변경할 수 있습니다.
void setEnablePrepareOnFirstPreparedStatementCall(boolean value) 특정 연결 인스턴스에 대한 동작을 지정합니다. 값이 false면 첫 번째 실행 시 sp_executesql을 호출하고 문을 준비하지 않습니다. 두 번째 실행이 발생하면 sp_prepare 또는 sp_prepexec를 호출하고 실제로 준비된 명령문 핸들을 설정합니다. 이후 실행 시 sp_execute를 호출합니다. 이렇게 하면 명령문이 한 번만 실행될 때 준비된 명령문 닫기에서 sp_unprepare를 사용할 필요가 없습니다.
int getServerPreparedStatementDiscardThreshold() 특정 연결 인스턴스에 대한 동작을 반환합니다. 이 설정은 서버의 미처리 핸들을 정리하기 위한 호출 실행 전에 연결별로 있을 수 있는 미처리 무시 작업(sp_unprepare)의 수를 제어합니다. 설정이 <= 1로 되어 있다면 준비된 문이 종료되자마자 준비 취소 작업이 곧바로 실행됩니다. 1로 > 설정하면 호출 오버헤드가 너무 자주 발생하지 않도록 이러한 호출 sp_unprepare 이 함께 일괄 처리됩니다. 이 옵션의 기본값은 getDefaultServerPreparedStatementDiscardThreshold() 호출로 변경할 수 있습니다.
void setServerPreparedStatementDiscardThreshold(int value) 특정 연결 인스턴스에 대한 동작을 지정합니다. 이 설정은 서버의 미처리 핸들을 정리하기 위한 호출 실행 전에 연결별로 있을 수 있는 미처리 무시 작업(sp_unprepare)의 수를 제어합니다. 설정이 <= 1로 되어 있다면 준비된 문이 종료되자마자 준비 취소 작업이 곧바로 실행됩니다. 1로 > 설정하면 호출 오버헤드가 너무 자주 발생하지 않도록 이러한 호출 sp_unprepare 이 함께 일괄 처리됩니다.

SQLServerDataSource 미준비 일괄 처리

새 메서드 설명
void setEnablePrepareOnFirstPreparedStatementCall(boolean enablePrepareOnFirstPreparedStatementCall) (setEnablePrepareOnFirstPreparedStatementCall 메소드는 최초의 PreparedStatement 호출 시 prepare를 활성화할지 여부를 설정합니다) 이 구성이 false이면 준비된 문의 첫 번째 실행 시 sp_executesql을 호출하고 문을 준비하지 않습니다. 두 번째 실행이 발생하면 sp_prepare 또는 sp_prepexec을 호출하고 준비된 문 핸들을 설정합니다. 이후 실행 시 sp_execute를 호출합니다. 이 동작은 문이 한 번만 실행되는 경우 준비된 문을 닫을 필요가 sp_unprepare 없습니다.
boolean getEnablePrepareOnFirstPreparedStatementCall() 이 구성으로 false가 반환되면 준비된 문의 첫 번째 실행 시 sp_executesql을 호출하고 문을 준비하지 않습니다. 두 번째 실행이 발생하면 sp_prepare 또는 sp_prepexec를 호출하고 실제로 준비된 명령문 핸들을 설정합니다. 이후 실행 시 sp_execute를 호출합니다. 이 동작은 문이 한 번만 실행되는 경우 sp_unprepare 프리페어드 스테이트먼트를 닫을 필요가 없습니다.
void setServerPreparedStatementDiscardThreshold(int serverPreparedStatementDiscardThreshold) 이 설정은 서버의 미처리 핸들을 정리하기 위한 호출 실행 전에 연결별로 있을 수 있는 미처리 무시 작업(sp_unprepare)의 수를 제어합니다. 설정이 <= 1로 되어 있다면 준비된 문이 종료되자마자 준비 취소 작업이 곧바로 실행됩니다. 1로 > 설정하면 호출 오버헤드가 너무 자주 발생하지 않도록 이러한 호출 sp_unprepare 이 함께 일괄 처리됩니다.
int getServerPreparedStatementDiscardThreshold() 이 설정은 서버의 미처리 핸들을 정리하기 위한 호출 실행 전에 연결별로 있을 수 있는 미처리 무시 작업(sp_unprepare)의 수를 제어합니다. 설정이 <= 1로 되어 있다면 준비된 문이 종료되자마자 준비 취소 작업이 곧바로 실행됩니다. 1로 > 설정하면 호출 오버헤드가 너무 자주 발생하지 않도록 이러한 호출 sp_unprepare 이 함께 일괄 처리됩니다.

준비된 문 메타데이터 캐싱

버전 6.4부터 SQL Server용 Microsoft JDBC 드라이버는 준비된 문 캐싱을 지원합니다. 버전 6.4 이전에는 이미 준비되고 캐시에 저장된 쿼리가 실행된 경우 동일한 쿼리를 다시 호출해도 다시 준비할 필요가 없습니다. 드라이버는 쿼리를 캐시에서 조회하여 핸들(handle)을 찾아 sp_execute로 실행합니다. 기본적으로 준비된 문 메타데이터 캐싱은 사용 안 함으로 설정됩니다. 이를 사용하도록 설정하려면 연결 개체에서 다음 메서드를 호출합니다.

setStatementPoolingCacheSize(int value) //value is the desired cache size (any value bigger than 0) setDisableStatementPooling(boolean value) //false allows the caching to take place

예: connection.setStatementPoolingCacheSize(10)connection.setDisableStatementPooling(false)

준비된 문 메타데이터 캐싱을 위해 이 변경 내용에 도입된 새 API 목록

SQLServerConnection 메타데이터 캐싱

새 메서드 설명
void setDisableStatementPooling(boolean value) - 이 메서드는 Statement 풀링을 비활성화할 것인지 설정합니다. 여기서 'boolean value'는 설정 값을 의미합니다. 문 풀링을 true 또는 false로 설정합니다.
boolean getDisableStatementPooling() 문 풀링을 사용하지 않도록 설정하면 true를 반환합니다.
void setStatementPoolingCacheSize(int value) 준비된 문 캐시의 크기를 이 연결에 지정합니다. 값 < 1은 캐시가 없음을 의미합니다.
int getStatementPoolingCacheSize() 이 연결에 대해 준비된 문 캐시의 크기를 반환합니다. 값 < 1은 캐시가 없음을 의미합니다.
int getStatementHandleCacheEntryCount() (문장 핸들 캐시 항목 수 가져오기) 현재 풀링된 준비 문 핸들의 수를 반환합니다.
boolean 준비문캐싱 활성화됨() 이 연결에 대한 문 풀링의 사용 설정 여부입니다.

SQLServerDataSource 메타데이터 캐싱

새 메서드 설명
void setDisableStatementPooling(boolean disableStatementPooling) 문 풀링을 true 또는 false로 설정합니다
boolean getDisableStatementPooling() 문 풀링을 사용하지 않도록 설정하면 true를 반환합니다.
void setStatementPoolingCacheSize(int statementPoolingCacheSize) 준비된 문 캐시의 크기를 이 연결에 지정합니다. 값 < 1은 캐시가 없음을 의미합니다.
int getStatementPoolingCacheSize() 이 연결에 대해 준비된 문 캐시의 크기를 반환합니다. 값 < 1은 캐시가 없음을 의미합니다.

참고 항목

JDBC 드라이버로 성능 및 안정성 향상Prepared statement 매개변수 성능