programing

Oracle의 JDBC 쿼리 시간 초과는 어떻게 구현됩니까?

newstyles 2023. 6. 13. 22:02

Oracle의 JDBC 쿼리 시간 초과는 어떻게 구현됩니까?

Oralce JDBC 씬 클라이언트가 쿼리 타임아웃을 어떻게 구현하는지 궁금합니다.java.sql을 호출하여 설정할 수 있습니다.문의 setQueryTimeout(int초) 메서드입니다.

이것은 클라이언트 측의 드라이버 자체에서 구현됩니까?새 스레드가 생성되어 결합됩니까?아니면 JDBC 드라이버가 Oracle에 매개 변수를 보낸 다음 시간 초과를 적용합니까?

제한 시간에 도달하면 클라이언트 및 데이터베이스에서 어떤 리소스가 릴리스되고 어떤 리소스가 중단됩니까?클라이언트가 쿼리를 포기한 경우에도 Oracle은 쿼리를 계속 실행합니까, 아니면 종료되었습니까?클라이언트 측에 여전히 커서 개체가 있습니까?

감사해요.

Oracle JDBC FAQ에 따르면

문 시간 초과 스레드입니다.이 스레드는 시간 초과로 문을 실행할 경우 생성됩니다.문 또는 연결 수에 관계없이 스레드가 하나만 만들어집니다.이 스레드는 VM의 수명을 유지합니다.

Tanel Poder는 OCI(Oracle Call Interface)를 통해 취소가 어떻게 작동하는지에 대한 기사를 작성했습니다.JDBC를 위해서도 비슷한 일이 있는 것 같습니다.씩 드라이버를 사용하는 경우 OCI를 통해 sqlnet.ora 설정을 통해 세션을 추적하고 기록되는 내용을 확인할 수 있습니다.

setTime을 사용할 때 쿼리가 실제로 시간 초과된 경우Out 메서드, Oracle 오류 코드가 있는 SQL 예외ORA-01013 - user requested cancel of current operationOracle 서버에서 느려집니다.

즉, Oracle이 이 메시지를 보내는 것이기 때문에 Oracle에 관한 한/Oracle이 가능한 한) 작업이 정상적으로 취소되었음을 의미합니다.

시간 초과에 도달하면 서버 측에서 쿼리가 계속되지 않는 것을 알고 있습니다.시간 초과에 도달하기 전이나 후에 서버가 중지되어야 함을 나타내기 위해 서버로 전송되는 의도/신호 옵션이 있습니다.쿼리가 실행 중인지 확인하기 위해 다양한 V$ 테이블에서 서버를 확인했습니다.(V$SESSION, V$SQL 등)

언급URL : https://stackoverflow.com/questions/2376615/how-is-oracles-jdbc-query-timeout-implemented