sql >> データベース >  >> RDS >> Sqlserver

Statement.setFetchSize(nSize)メソッドはSQL Server JDBCドライバーで実際に何をしますか?

    JDBCでは、setFetchSize(int) メソッドは、JVMからデータベースへのネットワーク呼び出しの数とそれに対応してResultSet処理に使用されるRAMの量を制御するため、JVM内のパフォーマンスとメモリ管理にとって非常に重要です。

    本質的に、setFetchSize(10)が呼び出され、ドライバーがそれを無視している場合、おそらく2つのオプションしかありません。

    1. フェッチサイズのヒントを尊重する別のJDBCドライバーを試してください。
    2. 接続のドライバー固有のプロパティ(接続インスタンスを作成するときのURLやプロパティマップ)を確認します。

    RESULT-SETは、クエリに応答してDB上でマーシャリングされた行の数です。ROW-SETは、JVMからDBへの呼び出しごとにRESULT-SETからフェッチされる行のチャンクです。これらの数処理に必要な呼び出しと結果のRAMは、フェッチサイズの設定によって異なります。

    したがって、RESULT-SETに100行があり、fetch-sizeが10の場合、常に約10 * {row-content-size} RAMを使用して、すべてのデータを取得するために10回のネットワーク呼び出しが行われます。

    >

    デフォルトのフェッチサイズは10で、かなり小さいです。投稿された場​​合、ドライバーはフェッチサイズ設定を無視し、1回の呼び出しですべてのデータを取得しているように見えます(大容量のRAM要件、最適な最小ネットワーク呼び出し)。

    ResultSet.next()の下で何が起こるか つまり、RESULT-SETから一度に1行を実際にフェッチするわけではありません。これは(ローカルの)ROW-SETからフェッチし、ローカルクライアントで使い果たされると、サーバーから次のROW-SETを(目に見えない形で)フェッチします。

    設定は単なる「ヒント」であるため、これはすべてドライバーによって異なりますが、実際には、これが多くのドライバーとデータベースでどのように機能するかを確認しました(Oracle、DB2、MySQLの多くのバージョンで確認済み)。



    1. 2015年のSQLServerデータプラットフォームのアップグレード

    2. T-SQLとは何ですか?

    3. 制限付きのGROUP_CONCAT

    4. OracleDatabase20cの新機能