- - PR -
Oracle8.0.5 REDOログについて
| 投稿者 | 投稿内容 | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-04-07 16:17
はじめまして。
現在、Oracle8.0.5のREDOログについて悩んでおります。 環境 【Server】 OS:WindowsNT DB:Oracle8.0.5 【Client】 OS:Windows98 VB6SP3にてシステム構築している保守をしています。 本題に入りますが、 あるプログラムを使用するとREDOログがかなり使用されます。 プログラムに原因があるのかOracleの設定に原因があるのかを 調査しています。 画面でデータを更新・追加・削除できるのですが、 2レコード更新しするだけで、 REDOログの使用量が12Mが使用されます。 画面から夜間バッチで使用しているバッチも実行されています。 試しに夜間バッチのREDOログ使用量を調査してみましたが 2M程度でした。 TRACE等とったりして、 調査しているのですが、わからなくなってきました。 おかしいと思う点は画面のプログラムの トランザクションの張り方です。 トランザクションの張り方によって、 REDOログの使用量がかわるのでしょうか? ご教授・アドバイス・ご指摘など 何でも結構ですので、 よろしくお願いします。 | ||||||||||||
|
投稿日時: 2005-04-07 16:25
今日は。
知ってると思いますが、REDOはデータベースに加えられた変更を戻せる様に する為の物です。 なので、トランザクションの張り方と言うよりは トランザクションを実行する事によってどういうデータが変更されているのか? の理解が必要です。 たとえば主キー、外部キーとかで複数のテーブルが結合されていて かつ1カ所更新したら関連するデータ全て更新する様になっていれば 当然それに対する変更も記録されますよね? と言う事でテーブルがどうなっていて、そのトランザクションを実行する事によって どういうデータが更新されるのかを把握した方が良いかと | ||||||||||||
|
投稿日時: 2005-04-07 17:34
ご回答ありがとうございます。 テーブルの更新量はあきらかに 夜間バッチの方がおおいです。 (更新する内容も同じようなものです。) 夜間バッチの方はトランザクションのをこまめに切って コミットしてるいのですが、 問題の画面ですが、 例ですが、 BeginTran ''バックアップテーブル CreateTable xxx1 ''テンポラリテーブル CreateTable xxx2 ''既存テーブルをバックアップテーブルに複写 Insert into xxx1 select * from aaa1 更新処理1 → 更新内容をxxx2テーブルにInert commit BeginTran 更新処理2 → 夜間バッチで使用しているバッチ呼び出し DropTable xxx1 DropTable xxx2 commit みたいな感じなのです。 Naoさんがおっしゃている内容ですと トランザクションの長さではREDOログの使用量はかわらないと 言うことでしょうか? 補足ですが、 テーブルは確認しましたが、 結合とかの怪しい点はありませんでした。 | ||||||||||||
|
投稿日時: 2005-04-07 17:48
今晩は。
要は同じテーブル作ってコピーして更新する内容を追加してるんですよね? Oracleがどう扱ってるかは解りませんが、12Mも増えるって事は 1行ずつコピーをしてる様な気がします。
更新処理2が何をやってるか解りませんので、その辺りを 調べれば良いかと。
質問の通りトランザクションの長さでは無く、REDOは 更新されるデータ量(というか何か起きた時にROLLBACKする処理量) で変わります。 | ||||||||||||
|
投稿日時: 2005-04-07 17:50
これが画面側で行っている処理なら、明らかに昼の方がデータ更新量が多いのでは? | ||||||||||||
|
投稿日時: 2005-04-07 18:15
Naoさん、いーたさんありがとうございます。
説明不足で申し訳ありません。 詳しく説明しますと、 日次夜間バッチで実績データを取込ます。 (毎日1000レコードくらいです。) 画面はその実績に修正があった場合に使用します。 更新処理1は 画面で修正した内容をxxx2テーブルにInsertします。 更新処理2は 夜間バッチで使用している一部のプログラムを 使用しテーブルにUpdate、Insert、Deleteを行う。 はじめのバックアップテーブルにコピーするのは 修正対象のレコードだけです。 そのバックバックアップで12Mになっているのかどうかまではわかりません。 トレースをとってみたのですが、 SELECT * FROM aaa1 FOR UPDATE NOWAIT call count cpu elapsed disk query current rows ------- ------ -------- ---------- ---------- ---------- ---------- ---------- Parse 5 0.00 0.19 0 0 0 0 Execute 5 2.21 7.70 0 1270 69173 0 Fetch 0 0.00 0.00 0 0 0 0 ------- ------ -------- ---------- ---------- ---------- ---------- ---------- total 10 2.21 7.89 0 1270 69173 0 のCURRENT「69173」が以上に多いような気がしました。 夜間バッチではこんなになっているところはありませんでした。 トレース結果を記載しておきます。 画面での更新のトレースの統計 画面のトレース統計 OVERALL TOTALS FOR ALL NON-RECURSIVE STATEMENTS call count cpu elapsed disk query current rows ------- ------ -------- ---------- ---------- ---------- ---------- ---------- Parse 28 0.16 1.39 0 0 4 0 Execute 30 2.52 13.28 0 1285 69250 13 Fetch 6 0.02 0.01 0 72 6 4 ------- ------ -------- ---------- ---------- ---------- ---------- ---------- total 64 2.70 14.68 0 1357 69260 17 Misses in library cache during parse: 12 OVERALL TOTALS FOR ALL RECURSIVE STATEMENTS call count cpu elapsed disk query current rows ------- ------ -------- ---------- ---------- ---------- ---------- ---------- Parse 204 0.40 6.52 0 0 1 0 Execute 322 0.18 1.77 0 604 1543 327 Fetch 77 0.02 0.01 0 186 0 25 ------- ------ -------- ---------- ---------- ---------- ---------- ---------- total 603 0.60 8.30 0 790 1544 352 バッチ処理での統計 OVERALL TOTALS FOR ALL NON-RECURSIVE STATEMENTS call count cpu elapsed disk query current rows ------- ------ -------- ---------- ---------- ---------- ---------- ---------- Parse 61 0.43 3.47 0 0 6 0 Execute 69 0.70 7.35 4 3 117 5 Fetch 63 0.01 0.05 2 2463 30 101 ------- ------ -------- ---------- ---------- ---------- ---------- ---------- total 193 1.14 10.87 6 2466 153 106 Misses in library cache during parse: 21 OVERALL TOTALS FOR ALL RECURSIVE STATEMENTS call count cpu elapsed disk query current rows ------- ------ -------- ---------- ---------- ---------- ---------- ---------- Parse 322 1.03 13.76 1 0 3 0 Execute 527 0.31 2.31 0 594 1343 286 Fetch 805 0.03 0.06 2 1560 3 592 ------- ------ -------- ---------- ---------- ---------- ---------- ---------- total 1654 1.37 16.13 3 2154 1349 878 >更新処理2が何をやってるか解りませんので、その辺りを >調べれば良いかと。 調査しましたが、更新処理2ではないようです。 説明不足かもしれませんがよろしくお願いします。 [ メッセージ編集済み 編集者: さらのとうちゃん 編集日時 2005-04-07 18:18 ] | ||||||||||||
|
投稿日時: 2005-04-08 00:31
aaa1テーブルの全件をxxx1テーブルにINSERTしているので、aaa1テーブルのレコード総件数がわかればおおよそのサイズがわかるのではないでしょうか?
UPDATE/INSERT/DELETEを行っていればREDOログが生成されるので関係あると思います。 こちらについても該当する件数がわからないでしょうか? | ||||||||||||
|
投稿日時: 2005-04-08 02:42
もうちょい正確に言うと、更新されるデータ量(というか何か起きた時にROLLFORWARD&ROLLBACKする処理量)で変わります。 | ||||||||||||
