- PR -

データの取得方法を実表から一時表に変えると処理速度が遅くなる

1
投稿者投稿内容
たけくん
ベテラン
会議室デビュー日: 2003/08/19
投稿数: 63
投稿日時: 2005-01-13 11:05
処理速度の改善に取り組んでいます。
本番環境ではシノニムからデータを取得しているのですが、開発環境では、本番環境のデータをシノニム参照先のデータと同じテーブルを作成してデータを入れています。

で、開発環境で処理を実行すると、約二時間程度で処理が終わります。
とりあえず、いくつかのテーブルのうち、メインとなる二つのテーブルのデータを一度、処理の中で作成した一時表に入れ込み、そこからデータを取得するように変えてみました。
つまり、 テーブル→処理 から テーブル→一時表→処理 としてみました。
普通に考えれば、テーブルのデータを一時表に入れる時間が少し増えるだけで、処理時間はあまり変わらないと予測します。

しかし、実際には5時間かかり、処理速度が遅くなりました。
ありえないようでありえるのでこの調査をしようとしています。
環境はInformixなのですが、OracleやSQLサーバなどの場合はどうなのかでもいいので、いろいろアドバイスいただきたいです。いまのところどう調査すればいいのかも見当もついておりません。

頂きたいのは、
上記のような現象は起こりうるのか?
何に着目して調査をしていけばいいのか?
です。

以上、お願いいたします。
NAL-6295
ぬし
会議室デビュー日: 2003/01/26
投稿数: 966
お住まい・勤務地: 東京
投稿日時: 2005-01-13 11:23
引用:

つまり、 テーブル→処理 から テーブル→一時表→処理 としてみました。
普通に考えれば、テーブルのデータを一時表に入れる時間が少し増えるだけで、処理時間はあまり変わらないと予測します。

しかし、実際には5時間かかり、処理速度が遅くなりました。



本当に少し増えるだけですか?

処理単位毎に処理時間を測定してみてはいかがですか?

そうすれば見えてくるものがあるでしょう。
_________________
「伝える」とは「人に云う」と書く。
http://d.hatena.ne.jp/NAL-6295/
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2005-01-13 12:00
実表と一時表にアクセスする際の実行プランをそれぞれ調べてみた方がいいでしょう。
実表に存在するインデックスが一時表にはないとかそんなことありませんか?
hidemaru
常連さん
会議室デビュー日: 2004/03/22
投稿数: 44
投稿日時: 2005-01-13 12:01
時間的に見て、ある程度の件数の処理をしていると思うのですが、
一時表に対して、インデックスをつけていますか?
実表に関しては、インデックスをつけて処理をしていると思いますが、
一時表に対しても、インデックスをつけないと、処理件数によっては、
処理時間が遅くなります。
あと、Informix のバージョンにもよりますが、
ちょっと古いバージョンだと、表にデータを挿入した後とか、
インデックスを作成した後に、UPDATE STATISTICS FOR TABLE 表名
これをかけないと、インデックスの効果が出ないものがあります。
この辺を、見てはいかがですか?
たけくん
ベテラン
会議室デビュー日: 2003/08/19
投稿数: 63
投稿日時: 2005-01-17 11:32
回答頂きありがとうございます。
御礼が遅れ申し訳ありません。

一時表にはIndexはつけてあります。
なので、書込みにありました、
UPDATE STATISTICS FOR TABLE 表名
を一度トライしてみます。

また、結果についてはご報告させていただきます。

以上、失礼します。
1

スキルアップ/キャリアアップ(JOB@IT)