none
DB間コピーのパフォーマンスについて RRS feed

  • 質問

  • お世話になっております。

    ■環境

    Windows2003 Server SP2 + SQLServer 2008 SP1 Standard Edition (64-bit) クラスタ環境

    ■質問1

    400万強のデータ全件に対して、1日1回処理をするパフォーマンスチューニングについて調査中です。

    一般的な話になってしまうかもしれませんが、異なるDB間のINSERT~SELECTの弊害は何かあるでしょうか?

    データベースA:完全

    データベースB:単純

    になっており、A⇒Aに入れ込むより、A⇒Bにした方がトランザクションログを考慮してパフォーマンスが上がると考えました。

    異なるデータファイルにはなりますが、メモリに読み込んでから書き出す動きだと思いますのでそこまで差はない考えですが

    実際はどうなのでしょうか?(ただ、私の認識ではINSERTが遅いわけではなく、SELECT処理が遅いと思っています。)


    ■質問2

    サブクエリを結合する場面があるかと思いますが、大量データの場合はメモリリソースを圧迫する気がしているので、

    最初にテーブルを作っておいてから結合(インデックス付き)した方が速いと考えていますがいかがでしょうか。

    I/O的にはディスク読み出しになってしまうのでその方が遅いんですかね・・・(時間がかかる処理のため検証がまだ済んでいません。)

    基本的な質問で申し訳ありませんが、認識が間違っていましたらご指摘頂けると幸いです。

    2013年12月16日 10:33

回答

  • 質問1に関して・・・
    最小ログ操作にすることでselect insertの効率改善ができる可能性があります。
    http://technet.microsoft.com/ja-jp/library/ms191244%28v=sql.105%29.aspx
    最小ログであればトランザクションログへの書き込みが最小化されます。

    質問2に関して・・・
    処理に依存してしまうものかと思いますが、サブクエリを使ったケースで
    メモリ不足が発生する、目標処理時間に到達しない場合は中間テーブルを
    使った処理に変更してはいかがでしょうか。
    • 回答の候補に設定 星 睦美 2014年1月8日 7:11
    • 回答としてマーク 2014年1月9日 3:07
    2013年12月30日 15:17
    モデレータ

すべての返信

  • 質問1に関して・・・
    最小ログ操作にすることでselect insertの効率改善ができる可能性があります。
    http://technet.microsoft.com/ja-jp/library/ms191244%28v=sql.105%29.aspx
    最小ログであればトランザクションログへの書き込みが最小化されます。

    質問2に関して・・・
    処理に依存してしまうものかと思いますが、サブクエリを使ったケースで
    メモリ不足が発生する、目標処理時間に到達しない場合は中間テーブルを
    使った処理に変更してはいかがでしょうか。
    • 回答の候補に設定 星 睦美 2014年1月8日 7:11
    • 回答としてマーク 2014年1月9日 3:07
    2013年12月30日 15:17
    モデレータ
  • ご指摘ありがとうございました。

    中間テーブルはまだ実施していませんが、まずはtempdb領域の拡張によるオーバーヘッドも影響していたと思われ、

    最初からある程度大きいサイズで確保することで多少改善しました。

    許容できない範囲になったら、中間テーブルの作成等も検討したいと思います。

    2014年1月9日 3:14