10万件を超えるレコードを含むデータベースがあり、結果をバッチとして取得したいと考えています。SQLサーバーを使用していて、fetchsizeセットが50です。50レコードのみが取得され、次の50レコードのみが取得されるようにするにはどうすればよいですか。
P6SPYを使用してSQLをデバッグしようとしましたが、出力には、結果セット内のn個のレコードに対するn個のクエリが表示されます。生成されたSQLを調べて、fetchsizeが適用されていることを確認したいと思います。
助けてください。
P6SPYはアプリケーションレベルのツールだと思います。つまり、アプリケーションと元のJDBCドライバーの間にあるため、JDBCドライバーとデータベースサーバー間の相互作用をスパイすることはできません。
JDBCドライバーがfetchsizeを尊重していないと思われる場合は、wiresharkなどのネットワークパケットスニファを使用するか、データベースサーバー自体の要求ログを使用するか、ドライバーが公開するデバッグログを使用する必要があります。
私が理解したことは次のとおりです。SQLサーバーのJDBCドライバーは、デフォルトですべてのレコードをメモリにフェッチします。接続URL文字列に追加selectMethod=cursor
すると問題が解決し、バッチサイズが使用されるようになります。