2012-04-05 1 views
1

데이터베이스가 100,000 개를 초과하여 배치 결과를 얻고 싶습니다. SQL 서버를 사용하고 fetchsize 집합은 50입니다. 어떻게하면 50 개의 레코드가 검색되고 다음 50 개가 검색되도록 할 수 있습니까?일괄 처리 크기에 대한 JDBC 선택 쿼리 검사

P6SPY를 사용하여 SQL을 디버깅하려고했는데 출력에 n 개의 n 개의 쿼리가 표시되었습니다. 결과 집합에 기록하십시오. 나는 생성 된 SQL을 검사하고 fetchsize가 적용되었는지 확인하려고한다.

도와주세요.

+0

n 개의 레코드에 대한 n 개의 쿼리는 무엇을 의미합니까? db 서버에 대한 개별 왕복으로 각 레코드를 가져온다는 의미입니까? –

+0

@MiserableVariable 나는 그가하려고하는 것이 페이지 매김이라고 생각한다. – Kevin

+0

@Kevin 페이지 매김은 SQL 자체 내에서 수행되어야한다. OP는 모든 행을 가져오고 싶지만 db 서버로의 왕복 횟수를 제한하려고한다. –

답변

0

P6SPY는 응용 프로그램 수준의 도구라고 생각합니다. 즉, 응용 프로그램과 원본 JDBC 드라이버 사이에 위치하므로 JDBC 드라이버와 데이터베이스 서버 간의 상호 작용을 감시 할 수 없습니다.

JDBC 드라이버가 fetchsize를 준수하지 않는다고 생각되면 wireshark와 같은 네트워크 패킷 스니퍼를 사용하거나 데이터베이스 서버 자체에서 로깅 요청을 사용하거나 드라이버가 노출하는 디버그 로깅을 사용해야합니다.

+0

답장을 보내 주셔서 감사합니다. 그렇다면 JDBC 드라이버가 데이터베이스 서버로 보내는 것을 디버깅 할 수있는 도구 나 빠르고 쉬운 방법이 없습니까? 나는 wireshark를 사용해 보았고 사용하기가 거의 어려웠다. – Nik

+0

서버에 요청 로깅을 시도 했습니까? JDBC 드라이버와 데이터베이스 서버 사이에서 어떤 일이 일어나고 있는지 알고 싶다면 그들 중 하나가 알려줘야하거나 스눕해야합니다. –

0

다음은 내가 알아 낸 것입니다. SQL 서버 JDBC 드라이버는 기본적으로 모든 레코드를 메모리로 가져옵니다. 연결 URL 문자열에 selectMethod=cursor을 추가하면 문제가 해결되고 배치 크기가 사용됩니다.