none
DBへ問い合わせを行うフェッチサイズの設定について RRS feed

  • 質問

  • Visual C# 2012
    .NET Framework 4.5

    ODP.NETだとDataAdapter.Fill()やDataReader.Read()に対してフェッチする容量をFetchSizeプロパティで設定できました。
    また、Executeしたタイミングで1行単位のサイズ(RowSizeプロパティ)も取得できました。
    SQL Serverを操作する時、System.Data.SqlClient下にあるどれかのクラスで、同様にFetchSizeを設定することはできないのでしょうか?
    SQL Server側の、DBとしての設定か何かで固定されるとかでしょうか?
    調べ方が悪いのか、見つかりません・・・。

    2014年10月8日 8:11

回答

  • OracleのFetchSizeやRowSizeに詳しくないので同等な値かはわかりませんが、SqlConnection.PacketSizeで現在のパケットサイズを確認することはできます。設定する場合は接続文字列で。
    RowSize相当はわかりませんでした。
    • 回答としてマーク 星 睦美 2014年10月24日 5:38
    2014年10月8日 8:33

すべての返信

  • OracleのFetchSizeやRowSizeに詳しくないので同等な値かはわかりませんが、SqlConnection.PacketSizeで現在のパケットサイズを確認することはできます。設定する場合は接続文字列で。
    RowSize相当はわかりませんでした。
    • 回答としてマーク 星 睦美 2014年10月24日 5:38
    2014年10月8日 8:33
  • ありがとうございます。

    うーん、接続単位なんですねー。
    ある問い合わせに対してのみ、データ量が大変多く、時間がかかるという場合には、みなさんどのようにしてるのでしょう?
    SQLServer自体、そういった一度に転送するサイズをあまり意識する必要のないものなのでしょうか?

    2014年10月8日 23:59
  • 詳しくないので私ならという見解になりますが、そもそもDB-アプリケーション間での大量データの送受信は可能な限り避けますし。FetchSize?をチューニングするくらいなら、クエリ内容をチューニングしてデータ量を減らしますね。

    ところでDBとアプリケーションは別マシンを想定されているのでしょうか?

    2014年10月9日 1:22
  • いくつかの画面はおっしゃるとおり、まずは要件やクエリのパフォーマンスを調整すべきだと思います。
    が、いわゆる『検索画面』においては、画面上に設置した条件項目などを一切設定せず『全件検索』的なことをやられると、どうしても全件(当然、クエリを構築している結合条件などの範囲内でですが)の検索になると思います。

    ODP.NETはFetchSizeを指定することで、DBとの通信回数を減らしてパフォーマンスを向上させることができたのですが、そういう場合に他の手立てでパフォーマンスを向上させる方法などはありますでしょうか?

    また、アプリケーションはクライアント、DBはサーバで動作し、それぞれ別のコンピュータで稼動する前提です。

    2014年11月11日 0:35