ホーム   フォーラム   FAQ
 
メインメニュー
ログイン
ユーザー名:

パスワード:


パスワード紛失

トランザクションの開始

  • このフォーラムに新しいトピックを立てることはできません
  • このフォーラムではゲスト投稿が禁止されています
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2009-5-21 14:04
mizuno  常連   投稿数: 58
お世話になっております。

PervasiveからMSSQLへのデータ移行のPGを作成しております。

データ件数が290万件あるファイルの移行なので、移行処理に時間がかかります。
処理時間短縮のため「トランザクションの開始」を「なし」にしたところ、
「タスク前の前」と比較すると圧倒的に、「なし」の方が処理時間がかかります。

トランザクションをオープンしなければ処理速度は向上すると思っていたのですが、
違うのでしょうか?
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2009-5-24 6:46
ISHIJIMA  長老 居住地: 静岡県  投稿数: 1827
トランザクション開始をなしにできますか
F7のチェックでエラーになりませんか
そのプログラムは単体でしょうか
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 .2 | 投稿日時 2009-5-26 20:49
mizuno  常連   投稿数: 58
ISHIJIMA様

「トランザクションモード:物理」
「トランザクションの開始:なし」にしています。

チェックでエラーはでません。

移行のプログラムは、メインソースにPervasiveのテーブルを指定し、同一タスクでSQLServerの
テーブルを登録リンクにて作成しています。

検証していないのですが、「トランザクションの開始:なし」の設定とは、DBへレコード書込み時に
トランザクションを開始し、書込み終了時にコミットを発行する設定なのでしょうか?

よくよく考えれば当たり前の事なのですが、そう考えると処理に時間がかかるのも納得がいきます。
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2009-5-26 22:38
ISHIJIMA  長老 居住地: 静岡県  投稿数: 1827
Pervasiveはトランザクションは意味を持たなかったような気がします。
ただSQLはトランザクションは必ず必要だとおもったのでそのあたりでなしにすると何かおかしくなっているのでしょうかね?
違っていたらすみません
私は通常物理でバッチの場合はタスク前処理の前かレコードロック時にしています。

なしにした場合ロック方式もなしにしないとエラーになりませんか
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2009-5-28 13:38
pu_mahalo  長老 居住地: 大阪  投稿数: 775
こんにちは Puです

SQLserverへinsertするのにトランザクション無し
というのは ありえません

バッチでinsertするのでしたら
タスク前でbegin tranが早いような気がします
あまりにも データ量が多かったらtranzaction logが多くなるので
break いれてcommitする方が安全だと思います。
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 .2 | 投稿日時 2009-5-28 17:46
mizuno  常連   投稿数: 58
ISHIJIMA様

私も通常のバッチタスクでは「タスク前の前」を使用しています。
今回の場合は、本番データをPervasive→SQLServerへ移行するために
一度きりしかながさない事と、処理速度向上を期待しての「なし」でした。
見当はずれの事をしていましたが・・・

ロック方式は「なし」にしていたのでエラーはでませんでした。


Pu様

>SQLserverへinsertするのにトランザクション無し
>というのは ありえません

これですね。
「なし」=レコード毎コミットのようなイメージでしょうか。

結果、「グループ」に設定しました。

ただ、「グループ」よりも、「タスク前の前」の方が少しだけ速いです。
290万件の登録で処理に約2時間かかる中での5分の差なので誤差の範囲内
なのかもしれないのですが・・・それだけコミットに時間がかかりということでしょうか
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2009-5-28 18:32
nobukoshi802  一人前   投稿数: 118
テーブルにインデックスは作成されていると思いますが
データ移行なので実行中にインデックスを削除
データ移行終了後、インデックスを再作成出来ますか?
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2009-5-29 9:09
mizuno  常連   投稿数: 58
nobukoshi802様

SQLServer側のインデックスを削除してみましたが処理速度は同じでした。
Magic側のインデックスも削除しなければいけないのでしょうか?
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2009-5-29 9:21
pu_mahalo  長老 居住地: 大阪  投稿数: 775
こんにちは Puです

260万件と言う大量データのinsertの場合
グループレベルでcommitが一般的だと思います

サーバーで走らす事ができるのなら
サーバーで実行する事をお勧めします
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2009-5-29 16:13
nobukoshi802  一人前   投稿数: 118
Magic側のインデックスも削除しても処理速度が変わらないなら
サーバ側で実行してみるとか
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2009-6-1 16:12
mizuno  常連   投稿数: 58
お世話になります。

インデックスの削除はさけたく、サーバでの実行もできないので、現状のクライアントから実行する
方法をとりました。

処理速度向上の対策として、移行対象のファイルが、280万件のテーブル、140万件のテーブル、
その他のテーブル(約60本)とあったので、3つのショートカットを用意し、起動するTerm毎に移行処理を
別々に走らせるようにしました。
(280万件のテーブル、140万件のテーブルはグループコミットで、その他のテーブルはタスクコミット)

トータルで4時間半ほどかかっていたのが、2時間半を切るぐらいの処理時間になりましたので、
この方法で処理することにいたしました。
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2011-7-8 17:23
nkmt  長老   投稿数: 1668
タスクコミットというのは、
トランザクション開始をタスク前の前にする事でしょうか?

グループコミットというのは、どんなタスク構造なんでしょうか?
投票数:0 平均点:0.00

なし Re: トランザクションの開始

msg# 1.1.1.2.1.2.1.1.1
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2011-7-11 14:55
mizuno  常連   投稿数: 58
タスクコミット、グループコミットという表現が一般的かどうかわかりかねますが、
ここでの表現としては、

タスクコミット:トランザクションの開始 = タスク前の前
グループコミット:トランザクションの開始 = グループ

として話をしていました。


グループコミットは文字通りグループ毎にトランザクションをかける
設定になります。
グループ処理を設定し、トランザクションの開始をグループにすると、
右側の項目が有効になり設定したグループでbegin-commitします。

投稿した件の移行では、伝票日付の年度をグループとしました。
投票数:0 平均点:0.00

なし Re: トランザクションの開始

msg# 1.1.1.2.1.2.1.1.1.1
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2011-7-11 15:36 | 最終変更
nkmt  長老   投稿数: 1668
mizunoさん

バッチタスクに
グループ処理を付けると、トランザクション開始に
G=グループ を選べるんですね。

有難う御座いました。
(SQL始めて間もないし知らなかったです。)
投票数:0 平均点:0.00

  条件検索へ


Copyright (C) Magic Software Japan K.K. All Rights Reserved.
個人情報保護方針 会員規約